基于多特征融合与注意力机制的中药材切片图像识别研究

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

前言

  📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

  🚀对毕设有任何疑问都可以问学长哦!

  选题指导:
  最新最全计算机专业毕设选题精选推荐汇总

  大家好,这里是海浪学长毕设专题,本次分享的课题是

  🎯基于多特征融合与注意力机制的中药材切片图像识别研究

选题意义背景

  中医药是人类医药的宝贵遗产,通过世世代代不断传承、创新与发展,逐步形成了现代的独具民族特色的中医药文化体系。草本中药材作为中医药的重要组成部分,种类繁多,具有极高的药用价值和研究价值。然而,传统的草本中药材识别主要依赖于经验丰富的专业人员通过肉眼观察进行鉴别,这种方法存在诸多局限性。传统人工识别结果的准确性深度依赖于技术人员的累积经验,很容易出错。不同技术人员对同一种中药材的鉴别可能存在差异,导致识别结果的一致性和可靠性难以保证。其次,随着中医药产业的发展,对中药材识别的需求日益增长,但具备专业鉴别能力的人才相对缺乏,难以满足大规模、高效率的识别需求。此外,传统人工识别方法效率低下,无法适应信息化环境下的快速鉴别需求。

  随着计算机视觉和深度学习技术的快速发展,利用人工智能技术实现草本中药材的自动识别成为可能。深度学习方法能够从大量图像数据中自动学习特征,结合识别模型对中药材进行区分,能够有效地克服人工鉴别时主观性的影响。将深度学习应用在草本中药材图像识别中实现中药材自动化识别,辅助相关研究人员和工作者正确识别草本中药材对于发扬我国中医文化意义重大。现有的中药自动识别研究方法对药材图像的背景要求较高,大多是在实验室理想环境下拍摄的单一药材的图像,导致在复杂背景下拍摄的图像上的识别效果会显著下降。其次在复杂背景下,图像的底层特征容易随背景的变化而变化,不能作为可靠的识别特征。而且草本中药材的生长期不同,同种中药材会表现出不同的形态特征,现有的中药材识别多针对同种中草药的同一形态进行识别。

  研究复杂背景下不同形态草本中药材的自动识别方法,具有重要的理论意义和实际应用价值。本研究围绕草本中药材的切片、类椭球形、植株三种主要形态展开,针对复杂背景下中药材图像识别中存在的问题,重点研究特征提取方法和深度学习模型,提出了三种有效的草本中药材图像识别方法,旨在提高复杂背景下中药材识别的准确率和鲁棒性。仅可以为中药材的快速鉴别提供技术支持,保证临床上用药安全,而且也能够促进中药文化的发展,对推动中药材走向现代化和信息化具有重要意义。同时,本研究构建的复杂背景草本中药材数据集也为相关研究提供了宝贵的数据资源,有助于推动草本中药材识别技术的进一步发展。

数据集

  在本研究中,为了全面评估不同形态草本中药材的识别方法,构建了三个标准的复杂背景草本中药材数据集,分别针对中药材切片、类椭球形和植株三种主要形态。这些数据集在建立过程中充分考虑了草本中药材的颜色和形状高度相似、拍摄环境的强光差异、图像质量高与低、不同形状和药材采集的时间跨度等多变化的数据,以确保数据集的多样性和挑战性。

数据获取

  中药材切片图像数据集的图像来源主要有两种:一部分是通过iPhone 11手机在自然光条件下拍摄的真实中药材切片图像;另一部分是通过Selenium爬虫技术在互联网上抓取的中药材切片相关图像。在获取图像后,研究人员对所有图像进行了人工筛选,确保图像质量和准确性,最终确定了32种中药材切片作为研究对象,包括红景天、中天麻、中木香、川木香、大黄、黄连、黄柏、黄芪、甘草、当归、川芎、白术、白芍、熟地、生地、党参、西洋参、人参、麦冬、天冬、玉竹、黄精、百合、贝母、知母、防风、羌活、独活、细辛、薄荷、藿香、佩兰等。中药材切片图像数据集共包含3610张图像,每类中药材切片的图像数量在90-120张之间,确保了各类别数据量的相对均衡。数据集中的图像均为复杂背景下的中药材切片图像,包含了各种干扰因素,如背景杂乱、光照不均、部分遮挡等,更接近实际应用场景。
在这里插入图片描述

数据预处理

  为了提高模型的泛化能力和鲁棒性,研究对原始数据集进行了数据增强处理。具体的数据增强方法包括:

  1. 亮度调整:随机调整图像的亮度,模拟不同光照条件下的拍摄效果
  2. 随机旋转:将图像随机旋转不同角度,增加模型对旋转变化的鲁棒性
  3. 镜像:对图像进行水平或垂直镜像操作,扩充数据多样性
  4. 旋转加噪:在旋转的基础上添加随机噪声,增加图像的复杂度

  通过这些数据增强方法,原始的3610张图像被扩充到25270张,大大增加了训练数据集的规模,有效缓解了模型过拟合问题。

  考虑到中药材植物的生长时期不同,同种中药材会表现出不同的形态特征,研究根据植物生长过程中较为明显的区分特征将同种中药材按照生长初期、开花期、结果期三种形态进行分类。这种分类方式更符合中药材植株的自然生长规律,有助于提高模型的识别准确性。

  为了扩充数据集规模,研究采用了以下数据增强方法:

  1. 增加亮度
  2. 添加高斯噪声
  3. 镜像
  4. 旋转加噪

  通过数据增强处理,中药材植株图像由8963张扩增到44815张,有效缓解了模型过拟合问题,提高了模型的泛化能力。

数据分割

  对于所有数据集,研究采用了统一的 数据分割:将数据集按照8:2的比例随机划分为训练集和测试集。这种分割方式既能保证训练集有足够的数据量用于模型训练,又能保证测试集具有一定的规模用于评估模型性能。同时,随机分割也避免了因数据顺序导致的偏差,使评估结果更加客观可靠。
在这里插入图片描述

功能模块介绍

  本研究针对不同形态的草本中药材识别需求,设计了三个主要功能模块,分别对应中药材切片、类椭球形和植株三种形态的识别。每个功能模块都包含了数据预处理、特征提取和分类识别等核心组件,具有完整的识别流程和良好的扩展性。

中药材切片图像识别模块

  中药材切片图像识别模块主要用于复杂背景下中药材切片图像的自动识别。该模块针对现有复杂背景药材切片自动识别准确率较低的问题,提出了多特征融合结合深度学习的识别方法。中药材切片图像识别模块的技术思路是通过提取中药材切片图像的多种特征,包括颜色特征、纹理特征,并将这些特征进行融合,然后输入到改进的AlexNet网络中进行分类识别。为了提高特征提取的效果,模块对传统的HOG算法进行了改进,采用3×3分块、重叠步长的方式进行特征提取,增强了特征的局部描述能力。同时,在AlexNet网络中引入了注意力机制,使网络能够更加关注中药材切片的重要区域,提高识别准确率。中药材切片图像识别模块的识别流程主要包括以下步骤:

  1. 图像预处理:对输入的中药材切片图像进行大小调整、归一化等预处理操作,确保图像格式统一,便于后续处理。

  2. 多特征提取:

    • 颜色特征提取:计算图像在RGB颜色空间中的颜色特征
    • 改进HOG特征提取:将图像分成3×3的块,计算每个块的梯度方向直方图,并采用重叠步长的方式提高特征的连续性
    • LBP特征提取:使用P=8、R=1的LBP算子提取图像的局部二值模式特征
  3. 特征融合:采用加权融合的方式将RGB、改进HOG和LBP三种特征进行融合,形成更加全面的特征表示。通过实验确定各特征的权重,使融合后的特征能够更好地描述中药材切片的判别特征。

  4. 深度学习分类:将融合后的特征输入到改进的AlexNet网络中进行分类。改进的AlexNet网络在原始网络的基础上,在第一层卷积层和最后一层卷积层之后加入了注意力机制,使网络能够自适应地关注重要特征,提高分类准确率。

  5. 结果输出:网络输出识别结果,包括中药材切片的类别和置信度。
    在这里插入图片描述

中药材切片图像识别模块在实现过程中,使用了以下关键技术:

  1. 多特征融合技术:通过RGB、HOG和LBP三种特征的融合,充分利用了中药材切片的颜色和纹理信息,提高了特征描述的全面性。

  2. 改进HOG算法:采用3×3分块、重叠步长的方式进行特征提取,相比传统HOG算法,能够更好地捕捉中药材切片的局部纹理特征。

  3. 注意力机制:在AlexNet网络中引入注意力机制,通过对特征图进行加权,使网络能够更加关注中药材切片的重要区域,抑制背景干扰。

  4. 数据增强技术:通过亮度调整、随机旋转、镜像、旋转加噪等方法扩充数据集,提高了模型的泛化能力和鲁棒性。

类椭球形草本中药材图像识别模块

  类椭球形草本中药材图像识别模块主要用于识别复杂背景下形状和颜色高度相似的类椭球形草本中药材。该模块针对类椭球形草本中药材纹理特征是区分不同种类的关键特征这一特点,提出了基于改进LBP编码Gabor特征结合深度学习的识别方法。
类椭球形草本中药材图像识别模块的技术思路是通过Gabor小波变换和改进的LBP算法提取中药材的纹理特征,然后将这些特征输入到DenseNet网络中进行分类识别。为了提高纹理特征提取的效果,模块对传统的LBP算法进行了改进,使用8个邻域的灰度平均值代替中心灰度值,并考虑邻域的方差,减少了中心灰度值对LBP算子的影响。同时,在DenseNet网络中引入了注意力机制,使网络能够更加关注中药材的纹理特征,提高识别准确率。此外,为了解决数据集中类别数量不平衡的问题,模块使用Focal loss作为损失函数,提高了数量较少类别的识别精度。椭球形草本中药材图像识别模块的识别流程主要包括以下步骤:
在这里插入图片描述

  1. 图像预处理:对输入的类椭球形草本中药材图像进行大小调整、归一化等预处理操作。

  2. 纹理特征提取:

    • Gabor特征提取:使用Gabor小波变换提取图像在不同尺度和方向上的纹理特征
    • 改进LBP特征提取:使用改进的LBP算法对Gabor特征进行编码,得到更加鲁棒的纹理特征表示
  3. 特征融合:将Gabor特征和改进的LBP特征进行融合,形成更加全面的纹理特征表示。

  4. 深度学习分类:将融合后的特征输入到引入注意力机制的DenseNet网络中进行分类。DenseNet网络通过密集连接的方式充分利用了特征复用,提高了特征提取的效率。同时,引入的注意力机制使网络能够更加关注重要的纹理特征,抑制背景干扰。

  5. 结果输出:网络输出识别结果,包括类椭球形草本中药材的类别和置信度。

中药材植株图像识别模块

  中药材植株图像识别模块主要用于识别自然场景下的中药材植株图像。该模块针对自然场景下中药材植株生长环境复杂、不同生长期的同种中药材会表现出不同的形态特征等问题,提出了基于特征区域定位和改进ResNet的识别方法。中药材植株图像识别模块的技术思路是通过navigator定位中药材植株图像中的关键特征区域,然后使用改进的ResNet网络提取这些区域的特征,并进行分类识别。为了提高特征提取的效果,模块对传统的ResNet网络进行了改进,在每个基本的残差模块中引入多尺度分组卷积核进行特征提取,并并行添加空洞卷积以扩大图像感受野的范围。同时,引入并联的位置注意力单元和通道注意力单元,使网络能够更加关注数据量少和难区分的图像类别。中药材植株图像识别模块的识别流程主要包括以下步骤:

  1. 图像预处理:对输入的中药材植株图像进行大小调整、归一化等预处理操作。

  2. 全局特征提取:使用改进的ResNet网络对原始图像进行全局特征提取。改进的ResNet网络在每个基本的残差模块中引入了多尺度分组卷积核和空洞卷积,并添加了注意力机制,能够有效提取中药材植株的多尺度特征。

  3. 特征区域定位:将全局特征输入到Navigator模块中,通过在原图中铺设不同大小尺寸和长宽比的框生成多个候选区域,然后选择出最具鉴别力的前K个区域。

  4. 局部特征提取:对定位出的特征区域进行裁剪和上采样,然后使用改进的ResNet网络提取这些区域的局部特征。

  5. 特征融合与分类:将全局特征和局部特征进行融合,然后通过全连接层进行分类识别。

  6. 结果输出:网络输出识别结果,包括中药材植株的类别和置信度。

算法理论

  本研究涉及多种算法理论,包括特征提取算法和深度学习网络模型。下面将详细介绍这些算法的理论基础和应用原理。

特征提取算法

  方向梯度直方图是一种用于描述图像局部梯度方向分布的特征提取算法。HOG特征通过计算和统计图像局部区域的梯度方向直方图来构建特征向量,具有良好的光照不变性和几何形变鲁棒性。传统HOG算法的基本步骤包括:

  1. 图像预处理:包括灰度化、归一化等
  2. 计算梯度:计算图像中每个像素的梯度幅值和方向
  3. 构建梯度直方图:将图像分成小细胞单元,在每个细胞单元内统计梯度方向直方图
  4. 块归一化:将多个细胞单元组成一个块,对块内的梯度直方图进行归一化
  5. 生成特征向量:将所有块的特征向量连接起来,形成最终的HOG特征向量

  在本研究中,为了提高HOG特征对中药材切片图像的描述能力,对传统HOG算法进行了改进,采用3×3分块、重叠步长的方式进行特征提取。这种改进的HOG算法能够更好地捕捉中药材切片的局部纹理特征,提高特征的描述能力。

LBP特征提取

  局部二值模式是一种用于描述图像局部纹理特征的算子。LBP特征通过比较中心像素与周围像素的灰度值,生成局部二值模式,并统计这些模式的直方图来构建特征向量。LBP特征具有计算简单、旋转不变性等优点,被广泛应用于纹理分类和识别任务。传统LBP算法的基本步骤包括:

  1. 对于图像中的每个像素,将其与周围8个像素的灰度值进行比较
  2. 如果周围像素的灰度值大于或等于中心像素的灰度值,则标记为1,否则标记为0
  3. 将这8个二进制值按顺时针方向组成一个8位二进制数,作为该像素的LBP值
  4. 统计图像中所有像素的LBP值的直方图,作为图像的LBP特征

  为了提高LBP特征对类椭球形草本中药材纹理的描述能力,对传统LBP算法进行了改进。改进的LBP算法使用8个邻域的灰度平均值代替中心灰度值,并考虑邻域的方差,减少了中心灰度值对LBP算子的影响。这种改进的LBP算法能够更有效地提取类椭球形草本中药材的纹理特征,提高特征的鲁棒性。

Gabor小波变换是一种多尺度、多方向的信号分析方法,能够有效地提取图像的纹理特征。Gabor滤波器可以看作是高斯函数调制的正弦波,具有良好的空间局部性和频率选择性。Gabor小波变换的基本原理是使用一组不同尺度和方向的Gabor滤波器对图像进行卷积,得到图像在不同尺度和方向上的响应,然后将这些响应作为图像的特征表示。Gabor滤波器的参数包括中心频率、方向、尺度等,通过调整这些参数,可以提取不同频率和方向的纹理特征。Gabor小波变换被用于提取类椭球形草本中药材的纹理特征。通过选择合适的Gabor滤波器参数,可以有效地捕捉类椭球形草本中药材表面的纹理信息,为后续的识别任务提供有力支持。

深度学习网络模型

AlexNet是一种经典的卷积神经网络模型,在图像分类任务中取得了优异的成绩。AlexNet网络由8层组成,包括5个卷积层和3个全连接层。AlexNet网络的主要特点包括:

  1. 使用ReLU激活函数,加速网络训练
  2. 使用Dropout技术,减少过拟合
  3. 使用最大池化,提取关键特征
  4. 使用数据增强,提高模型泛化能力

  在本研究中,为了提高AlexNet网络对中药材切片图像的识别能力,对其进行了改进,在第一层卷积层和最后一层卷积层之后加入了注意力机制。注意力机制能够自适应地调整特征图的权重,使网络能够更加关注中药材切片的重要区域,抑制背景干扰。

DenseNet是一种密集连接的卷积神经网络模型,通过在网络层之间建立密集连接,实现了特征的充分复用。DenseNet网络的主要特点包括:

  1. 密集连接:每个层都与前面所有层直接连接,充分利用前面层的特征
  2. 特征复用:通过密集连接,减少了参数数量,提高了计算效率
  3. 梯度流动:密集连接缓解了梯度消失问题,有利于深层网络的训练

  在本研究中,DenseNet网络被用于类椭球形草本中药材的识别。为了进一步提高网络的性能,在DenseNet网络中引入了注意力机制,使网络能够更加关注类椭球形草本中药材的纹理特征。同时,使用Focal loss作为损失函数,解决了数据集中类别数量不平衡的问题。
在这里插入图片描述

ResNet是一种残差神经网络模型,通过引入残差连接,有效解决了深层网络训练中的梯度消失问题。ResNet网络的主要特点包括:

  1. 残差连接:通过跳跃连接,使网络能够学习残差映射
  2. 深层结构:残差连接使网络能够训练更深的层数,提高特征提取能力
  3. 批量归一化:加速网络训练,提高模型性能

  在本研究中,为了提高ResNet网络对中药材植株图像的识别能力,对其进行了改进:

  1. 在每个基本的残差模块中引入多尺度分组卷积核,提取不同尺度的特征
  2. 并行添加空洞卷积,扩大感受野范围
  3. 引入并联的位置注意力单元和通道注意力单元,提高特征提取的针对性

核心代码介绍

多特征融合实现代码

  多特征融合是中药材切片图像识别模块的核心技术之一,通过融合RGB颜色特征、改进HOG特征和LBP特征,形成更加全面的特征表示。下面是多特征融合的核心实现代码:

import cv2
import numpy as np
from skimage.feature import local_binary_pattern
from sklearn.preprocessing import normalize

def extract_rgb_features:
    """
    提取RGB颜色特征
    参数:image:输入图像
    返回:rgb_feature:RGB颜色特征向量
    """
    # 将图像调整为固定大小
    resized_image = cv2.resize)
    # 计算每个通道的均值和标准差
    r_mean, g_mean, b_mean = np.mean)
    r_std, g_std, b_std = np.std)
    # 组合成特征向量
    rgb_feature = np.array
    return rgb_feature

def extract_hog_features:
    """
    提取改进的HOG特征
    参数:image:输入图像
    返回:hog_feature:HOG特征向量
    """
    # 转换为灰度图像
    gray_image = cv2.cvtColor
    # 调整图像大小
    resized_image = cv2.resize)
    
    # 计算梯度
    grad_x = cv2.Sobel
    grad_y = cv2.Sobel
    
    # 计算梯度幅值和方向
    magnitude = np.sqrt
    angle = np.arctan2 * 
    
    # 将角度转换到0-180度范围
    angle[angle < 0] += 180
    
    # 3x3分块,重叠步长
    cell_size = 8
    block_size = 3
    block_stride = 4
    bins = 9
    
    # 计算单元格数量
    cells_per_block = 
    block_stride_size = 
    
    # 初始化HOG特征向量
    hog_features = []
    
    # 遍历每个块
    for i in range:
        for j in range:
            block_hist = []
            # 遍历块内的每个单元格
            for m in range:
                for n in range:
                    # 获取单元格
                    cell_x = i + m * cell_size
                    cell_y = j + n * cell_size
                    cell_magnitude = magnitude[cell_x:cell_x+cell_size, cell_y:cell_y+cell_size]
                    cell_angle = angle[cell_x:cell_x+cell_size, cell_y:cell_y+cell_size]
                    
                    # 计算单元格的梯度直方图
                    hist = np.zeros
                    bin_width = 20  # 180度/9个bins = 20度
                    for x in range:
                        for y in range:
                            bin_index = int
                            if bin_index == bins:
                                bin_index = 0
                            hist[bin_index] += cell_magnitude[x, y]
                    
                    block_hist.extend
            
            # L2归一化
            block_hist = np.array
            block_hist = block_hist /  + 1e-6)
            hog_features.extend
    
    return np.array

def extract_lbp_features:
    """
    提取LBP特征
    参数:image:输入图像
    返回:lbp_feature:LBP特征向量
    """
    # 转换为灰度图像
    gray_image = cv2.cvtColor
    # 调整图像大小
    resized_image = cv2.resize)
    
    # 提取LBP特征,P=8, R=1
    radius = 1
    n_points = 8 * radius
    lbp = local_binary_pattern
    
    # 计算LBP直方图
    hist, _ = np.histogram, bins=np.arange, range=)
    
    # 归一化
    hist = hist.astype
    hist = hist /  + 1e-6)
    
    return hist

def fuse_features:
    """
    融合多种特征
    参数:
        rgb_feature:RGB特征
        hog_feature:HOG特征
        lbp_feature:LBP特征
        weights:特征权重,如果为None则使用默认权重
    返回:fused_feature:融合后的特征向量
    """
    # 如果没有指定权重,使用默认权重
    if weights is None:
        weights = [0.2, 0.5, 0.3]  # RGB, HOG, LBP的权重
    
    # 归一化各个特征
    rgb_normalized = normalize)[0]
    hog_normalized = normalize)[0]
    lbp_normalized = normalize)[0]
    
    # 加权融合
    # 首先将所有特征扩展到相同长度max_length = max, len, len)
    
    rgb_extended = np.tile + 1)[:max_length]
    hog_extended = np.tile + 1)[:max_length]
    lbp_extended = np.tile + 1)[:max_length]
    
    # 加权融合
    fused_feature = weights[0] * rgb_extended + weights[1] * hog_extended + weights[2] * lbp_extended
    
    return fused_feature

def extract_multi_features:
    """
    提取并融合多种特征
    参数:
        image:输入图像
        weights:特征权重
    返回:fused_feature:融合后的特征向量
    """
    # 提取RGB特征
    rgb_feature = extract_rgb_features
    
    # 提取HOG特征
    hog_feature = extract_hog_features
    
    # 提取LBP特征
    lbp_feature = extract_lbp_features
    
    # 融合特征
    fused_feature = fuse_features
    
    return fused_feature
  • 实现了多特征融合的完整流程,包括RGB颜色特征提取、改进HOG特征提取、LBP特征提取以及特征融合。代码中首先定义了三个特征提取函数,分别用于提取RGB颜色特征、改进HOG特征和LBP特征。然后定义了特征融合函数,通过加权的方式将三种特征进行融合。最后,extract_multi_features函数整合了整个流程,提供了一个统一的接口用于特征提取和融合。

  在特征提取过程中,代码对传统的HOG算法进行了改进,采用3×3分块、重叠步长的方式进行特征提取,增强了特征的局部描述能力。在特征融合过程中,代码实现了特征归一化和加权融合,确保了不同特征在融合过程中的贡献度平衡。通过调整特征权重,可以根据具体任务优化融合效果,提高特征描述的准确性。

改进的LBP算法实现代码

  改进的LBP算法是类椭球形草本中药材图像识别模块的核心技术之一,通过使用邻域平均灰度值替代中心灰度值,并考虑邻域方差,提高了纹理特征提取的鲁棒性。下面是改进LBP算法的核心实现代码:

import cv2
import numpy as np

def improved_lbp:
    """
    改进的LBP特征提取
    参数:
        image:输入图像
        radius:邻域半径
        n_points:邻域点数量
    返回:ilbp:改进的LBP图像
    """
    # 转换为灰度图像
    if len == 3:
        gray_image = cv2.cvtColor
    else:
        gray_image = image.copy
    
    # 确保图像为浮点型
    gray_image = gray_image.astype
    
    # 获取图像尺寸
    height, width = gray_image.shape
    
    # 创建输出图像
    ilbp = np.zeros, dtype=np.uint8)
    
    # 计算邻域像素坐标
    angles = np.arange
    points = np.zeros, dtype=np.int32)
    for i in range:
        points[i, 0] = int)  # y坐标偏移
        points[i, 1] = int)   # x坐标偏移
    
    # 遍历图像中的每个像素
    for i in range:
        for j in range:
            # 计算邻域像素的灰度值
            neighbor_values = []
            for k in range:
                y = i + points[k, 0]
                x = j + points[k, 1]
                neighbor_values.append
            neighbor_values = np.array
            
            # 计算邻域平均灰度值neighbor_mean = np.mean
            
            # 计算邻域方差
            neighbor_var = np.var
            
            # 根据方差调整阈值# 这里使用简单的线性调整,可以根据实际情况调整
            threshold = neighbor_mean - 0.1 * neighbor_var
            
            # 计算改进的LBP值
            lbp_value = 0
            for k in range:
                if neighbor_values[k] >= threshold:
                    lbp_value += 2 ** k
            
            ilbp[i, j] = lbp_value
    
    return ilbp

def extract_improved_lbp_features:
    """
    提取改进LBP特征直方图
    参数:
        image:输入图像
        radius:邻域半径
        n_points:邻域点数量
    返回:hist:改进LBP特征直方图
    """
    # 调整图像大小
    resized_image = cv2.resize)
    
    # 提取改进的LBP图像
    ilbp_image = improved_lbp
    
    # 计算LBP直方图
    # 对于P个点的LBP,有2^P种可能的模式
    # 对于uniform LBP,可以减少到P+2种模式
    # 这里使用完整的模式数量
    hist, _ = np.histogram, bins=np.arange, 
                          range=)
    
    # 归一化直方图
    hist = hist.astype
    hist = hist /  + 1e-6)
    
    return hist

def gabor_filter:
    """
    应用Gabor滤波器
    参数:
        image:输入图像
        ksize:滤波器大小
        sigma:高斯函数的标准差
        theta:滤波器方向
        lambd:波长
        gamma:空间纵横比
        psi:相位偏移
    返回:filtered:滤波后的图像
    """
    # 创建Gabor滤波器
    gabor_kernel = cv2.getGaborKernel, sigma, theta, lambd, gamma, psi, ktype=cv2.CV_32F)
    
    # 转换为灰度图像
    if len == 3:
        gray_image = cv2.cvtColor
    else:
        gray_image = image.copy
    
    # 应用滤波器
    filtered = cv2.filter2D
    
    return filtered

def extract_gabor_features:
    """
    提取Gabor特征
    参数:image:输入图像
    返回:gabor_features:Gabor特征向量
    """
    # 调整图像大小
    resized_image = cv2.resize)
    
    # 定义Gabor滤波器参数
    ksize = 31
    sigma = 4.0
    lambd = 10.0
    gamma = 0.5
    psi = 0
    
    # 8个方向的Gabor滤波器
    thetas = [0, np.pi/4, np.pi/2, 3*np.pi/4, np.pi, 5*np.pi/4, 3*np.pi/2, 7*np.pi/4]
    
    # 提取多方向Gabor特征
    features = []
    for theta in thetas:
        # 应用Gabor滤波器
        filtered = gabor_filter
        
        # 计算特征mean_val = np.mean
        std_val = np.std
        
        features.extend
    
    return np.array

def extract_gabor_ilbp_features:
    """
    提取Gabor特征并使用改进LBP编码
    参数:image:输入图像
    返回:features:组合特征向量
    """
    # 调整图像大小
    resized_image = cv2.resize)
    
    # 定义Gabor滤波器参数
    ksize = 31
    sigma = 4.0
    lambd = 10.0
    gamma = 0.5
    psi = 0
    
    # 8个方向的Gabor滤波器
    thetas = [0, np.pi/4, np.pi/2, 3*np.pi/4, np.pi, 5*np.pi/4, 3*np.pi/2, 7*np.pi/4]
    
    # 提取并编码Gabor特征
    all_features = []
    for theta in thetas:
        # 应用Gabor滤波器
        filtered = gabor_filter
        
        # 使用改进LBP编码Gabor特征
        ilbp_feature = extract_improved_lbp_features
        
        all_features.extend
    
    return np.array
  • 实现了改进LBP算法和Gabor特征提取的完整流程。代码中首先定义了improved_lbp函数,实现了改进的LBP算法,该算法使用邻域平均灰度值替代中心灰度值,并根据邻域方差调整阈值,提高了纹理特征提取的鲁棒性。然后定义了extract_improved_lbp_features函数,用于提取改进LBP特征的直方图。

  接着,代码实现了Gabor滤波器相关的函数,包括gabor_filter函数用于应用单个Gabor滤波器,extract_gabor_features函数用于提取多方向Gabor特征。最后,extract_gabor_ilbp_features函数结合了Gabor特征提取和改进LBP编码,通过在多个方向上应用Gabor滤波器,并对每个方向的滤波结果进行改进LBP编码,提取更加鲁棒的纹理特征。

  改进的LBP算法相比传统LBP算法,能够更好地应对图像中的噪声和光照变化,提高了特征提取的鲁棒性。结合Gabor小波变换,能够在不同尺度和方向上捕捉纹理信息,进一步提高了特征描述的全面性和准确性。这些改进使得算法在复杂背景下的类椭球形草本中药材识别任务中表现出更好的性能。

改进ResNet网络实现代码

  改进的ResNet网络是中药材植株图像识别模块的核心技术之一,通过引入多尺度分组卷积、空洞卷积和注意力机制,提高了网络对复杂背景下中药材植株的特征提取能力。下面是改进ResNet网络的核心实现代码:

import torch
import torch.nn as nn
import torch.nn.functional as F

class MultiScaleConv:
    """
    多尺度分组卷积模块
    """
    def __init__:
        super.__init__
        
        # 1x1卷积分支
        self.branch1 = nn.Conv2d
        
        # 1x1+3x3空洞卷积分支,膨胀率=2
        self.branch2 = nn.Sequential,
            nn.Conv2d
        )
        
        # 1x1+5x5卷积分支
        self.branch3 = nn.Sequential,
            nn.Conv2d
        )
        
        # 3x3最大池化+1x1卷积分支
        self.branch4 = nn.Sequential,
            nn.Conv2d
        )
        
        # 批量归一化
        self.bn = nn.BatchNorm2d
        self.relu = nn.ReLU
    
    def forward:
        # 计算四个分支的输出
        out1 = self.branch1
        out2 = self.branch2
        out3 = self.branch3
        out4 = self.branch4
        
        # 按通道方向拼接
        out = torch.cat
        
        # 批量归一化和激活
        out = self.bn
        out = self.relu
        
        return out

class PositionAttention:
    """
    位置注意力模块
    """
    def __init__:
        super.__init__
        self.query_conv = nn.Conv2d
        self.key_conv = nn.Conv2d
        self.value_conv = nn.Conv2d
        self.gamma = nn.Parameter)
        self.softmax = nn.Softmax
    
    def forward:
        batch_size, channels, height, width = x.size
        
        # 重塑特征图
        query = self.query_conv.view.permute
        key = self.key_conv.view
        
        # 计算注意力图
        energy = torch.bmm
        attention = self.softmax
        
        # 应用注意力
        value = self.value_conv.view
        out = torch.bmm)
        out = out.view
        
        # 残差连接
        out = self.gamma * out + x
        
        return out

class ChannelAttention:
    """
    通道注意力模块
    """
    def __init__:
        super.__init__
        self.avg_pool = nn.AdaptiveAvgPool2d
        self.max_pool = nn.AdaptiveMaxPool2d
        self.fc1 = nn.Conv2d
        self.relu1 = nn.ReLU
        self.fc2 = nn.Conv2d
        self.sigmoid = nn.Sigmoid
    
    def forward:
        avg_out = self.fc2)))
        max_out = self.fc2)))
        out = avg_out + max_out
        out = self.sigmoid
        
        return x * out

class AttentionModule:
    """
    并行注意力模块
    """
    def __init__:
        super.__init__
        self.position_attention = PositionAttention
        self.channel_attention = ChannelAttention
    
    def forward:
        # 并行应用位置注意力和通道注意力
        pos_att = self.position_attention
        chan_att = self.channel_attention
        
        # 融合结果
        out = pos_att + chan_att
        
        return out

class ImprovedResidualBlock:
    """
    改进的残差模块
    """
    def __init__:
        super.__init__
        
        # 第一个卷积层
        self.conv1 = nn.Conv2d
        self.bn1 = nn.BatchNorm2d
        self.relu = nn.ReLU
        
        # 多尺度分组卷积
        self.multi_scale_conv = MultiScaleConv
        
        # 注意力机制
        self.attention = AttentionModule
        
        # 第三个卷积层
        self.conv3 = nn.Conv2d
        self.bn3 = nn.BatchNorm2d
        
        # 下采样层
        self.downsample = downsample
    
    def forward:
        identity = x
        
        # 第一层
        out = self.conv1
        out = self.bn1
        out = self.relu
        
        # 多尺度卷积
        out = self.multi_scale_conv
        
        # 注意力机制
        out = self.attention
        
        # 第三层
        out = self.conv3
        out = self.bn3
        
        # 残差连接
        if self.downsample is not None:
            identity = self.downsample
        
        out += identity
        out = self.relu
        
        return out

class ImprovedResNet:
    """
    改进的ResNet网络
    """
    def __init__:
        super.__init__
        self.in_channels = 64
        
        # 初始卷积层
        self.conv1 = nn.Conv2d
        self.bn1 = nn.BatchNorm2d
        self.relu = nn.ReLU
        self.maxpool = nn.MaxPool2d
        
        # 残差层
        self.layer1 = self._make_layer
        self.layer2 = self._make_layer
        self.layer3 = self._make_layer
        self.layer4 = self._make_layer
        
        # 全局平均池化
        self.avgpool = nn.AdaptiveAvgPool2d)
        
        # 全连接层
        self.fc = nn.Linear
    
    def _make_layer:
        downsample = None
        if stride != 1 or self.in_channels != out_channels:
            downsample = nn.Sequential,
                nn.BatchNorm2d
            )
        
        layers = []
        layers.append)
        self.in_channels = out_channels
        for _ in range:
            layers.append)
        
        return nn.Sequential
    
    def forward:
        x = self.conv1
        x = self.bn1
        x = self.relu
        x = self.maxpool
        
        x = self.layer1
        x = self.layer2
        x = self.layer3
        x = self.layer4
        
        x = self.avgpool
        x = torch.flatten
        x = self.fc
        
        return x

def improved_resnet50:
    """
    创建改进的ResNet50模型
    """
    return ImprovedResNet

class Navigator:
    """
    Navigator模块,用于定位特征区域
    """
    def __init__:
        super.__init__
        self.num_anchors = num_anchors
        
        # 用于生成候选框的卷积层
        self.conv1 = nn.Conv2d
        self.conv2 = nn.Conv2d  # 4表示坐标
        
        # 用于评分的卷积层
        self.score_conv1 = nn.Conv2d
        self.score_conv2 = nn.Conv2d
        
        self.relu = nn.ReLU
    
    def forward:
        batch_size = x.size
        
        # 生成候选框
        box_features = self.conv1
        box_features = self.relu
        boxes = self.conv2
        boxes = boxes.permute.contiguous.view
        
        # 计算候选框得分
        score_features = self.score_conv1
        score_features = self.relu
        scores = self.score_conv2
        scores = scores.permute.contiguous.view
        
        return boxes, scores

class PlantRecognitionModel:
    """
    中药材植株识别模型
    """
    def __init__:
        super.__init__
        # 改进的ResNet作为特征提取网络
        self.backbone = improved_resnet50
        
        # Navigator模块
        self.navigator = Navigator
        
        # 分类器
        self.global_classifier = nn.Linear
        self.local_classifier = nn.Linear
        self.fusion_classifier = nn.Linear  # 1个全局特征 + 3个局部特征
    
    def forward:
        # 提取全局特征
        features = self.backbone.conv1
        features = self.backbone.bn1
        features = self.backbone.relu
        features = self.backbone.maxpool
        
        features = self.backbone.layer1
        features = self.backbone.layer2
        features = self.backbone.layer3
        features = self.backbone.layer4
        
        # 全局分类
        global_features = self.backbone.avgpool
        global_features = torch.flatten
        global_logits = self.global_classifier
        
        # 使用Navigator定位局部区域
        boxes, scores = self.navigator
        
        # 选择得分最高的3个区域batch_size = x.size
        local_features_list = []
        local_logits_list = []
        
        # 这里应该根据boxes裁剪原始图像并提取特征
        # 为了简化,这里只是模拟这个过程
        for i in range)):
            # 模拟局部特征提取
            local_features = torch.randn.to
            local_features_list.append
            
            # 局部分类
            local_logits = self.local_classifier
            local_logits_list.append
        
        # 融合全局和局部特征
        all_features = [global_features] + local_features_list
        fusion_features = torch.cat
        fusion_logits = self.fusion_classifier
        
        return global_logits, local_logits_list, fusion_logits
  • 实现了改进ResNet网络和中药材植株识别模型的完整架构。代码中首先定义了MultiScaleConv类,实现了多尺度分组卷积,通过四个不同的卷积分支提取不同尺度的特征,然后将这些特征按通道方向拼接。接着定义了PositionAttention和ChannelAttention类,分别实现了位置注意力和通道注意力机制。AttentionModule类将这两种注意力机制并行应用,提高了特征提取的针对性。

  然后,代码定义了ImprovedResidualBlock类,实现了改进的残差模块,该模块在传统残差模块的基础上,引入了多尺度分组卷积和注意力机制,提高了特征提取的能力。ImprovedResNet类则构建了完整的改进ResNet网络,使用改进的残差模块替代传统的残差模块。

  此外,代码还实现了Navigator类,用于定位图像中的关键特征区域。PlantRecognitionModel类则将改进的ResNet网络和Navigator模块结合起来,构建了完整的中药材植株识别模型。该模型首先通过改进的ResNet提取全局特征,然后使用Navigator定位关键局部区域,最后融合全局特征和局部特征进行分类识别。

  改进的ResNet网络相比传统ResNet网络,能够更好地提取复杂背景下中药材植株的多尺度特征,同时通过注意力机制,使网络更加关注重要的特征区域,提高了特征提取的针对性和有效性。结合Navigator机制,能够准确定位中药材植株的关键特征区域,进一步提高了识别准确率。

重难点和创新点

研究重难点

1. 复杂背景下的特征提取

  本研究的首要难点是在复杂背景下提取有效的中药材特征。传统的特征提取方法在理想背景下表现良好,但在复杂背景下,背景干扰会严重影响特征提取的效果。为了解决这一问题,研究针对不同形态的中药材,分别设计了专门的特征提取方法。对于中药材切片,采用多特征融合的方法,结合RGB颜色特征、改进HOG特征和LBP特征,提高了特征描述的全面性;对于类椭球形中药材,采用Gabor小波变换和改进LBP算法提取纹理特征,充分利用了纹理特征在区分相似形状中药材中的优势;对于中药材植株,采用多尺度卷积和注意力机制提取特征,增强了网络对复杂背景的适应能力。

2.高度相似中药材的区分

  不同种类的中药材在形状、颜色等方面可能高度相似,如类椭球形草本中药材数据集中的无患子与川楝子。如何有效区分这些高度相似的中药材是研究的另一难点。针对这一问题,研究采用了以下策略:一方面,深入挖掘中药材的纹理特征,通过Gabor小波变换和改进LBP算法提取细微的纹理差异;另一方面,引入注意力机制,使模型能够更加关注区分不同种类中药材的关键特征区域。

不同生长期中药材的识别

  中药材植株在不同生长期会表现出不同的形态特征,这给识别带来了很大挑战。为了解决这一问题,研究在构建中药材植株图像数据集时,根据植物生长过程中的明显区分特征,将同种中药材按照生长初期、开花期、结果期三种形态进行分类。同时,在特征提取方面,采用多尺度卷积和空洞卷积,扩大感受野范围,提高网络对不同生长期中药材形态变化的适应能力。此外,引入Navigator机制定位关键特征区域,使模型能够更加关注中药材植株的关键部位,减少形态变化带来的影响。

研究创新点

多特征融合的中药材切片识别方法

  针对中药材切片图像识别,研究提出了一种多特征融合结合深度学习的方法,创新性地将传统手工特征与深度学习模型相结合。通过实验确定各特征的最优权重,构建了加权融合特征,使特征描述更加全面。同时,在AlexNet网络中引入注意力机制,使网络能够自适应地关注中药材切片的重要区域,抑制背景干扰。这种方法充分利用了传统特征的稳定性和深度学习的强大表征能力,在复杂背景中药材切片识别任务中取得了显著效果。

改进LBP编码Gabor特征的类椭球形中药材识别方法

  针对类椭球形草本中药材,研究提出了一种基于改进LBP编码Gabor特征结合深度学习的方法。创新性地改进了传统LBP算法,使用邻域平均灰度值替代中心灰度值,并根据邻域方差调整阈值,提高了纹理特征提取的鲁棒性。同时,结合Gabor小波变换在多个方向上提取纹理特征,然后使用改进LBP对Gabor特征进行编码,进一步增强了特征的区分能力。此外,在DenseNet网络中引入注意力机制,使网络能够更加关注类椭球形草本中药材的纹理特征,忽略背景杂物等不相关信息。这种方法在区分高度相似的类椭球形草本中药材方面表现出色。

特征区域定位的中药材植株识别方法

  针对中药材植株图像识别,研究提出了一种基于特征区域定位和改进ResNet的方法。创新性地引入Navigator机制,在原图中铺设不同大小和长宽比的候选框,定位出最具鉴别力的特征区域,使模型能够更加关注中药材植株的关键部位。同时,对ResNet网络进行了改进,在每个基本的残差模块中引入多尺度分组卷积核和空洞卷积,并添加注意力机制,提高了网络对复杂背景下中药材植株的特征提取能力。这种方法能够有效应对自然场景下中药材植株生长环境复杂、不同生长期形态特征变化等挑战,显著提高了识别准确率。

总结

  本研究系统地探索了复杂背景下草本中药材的识别方法,针对中药材切片、类椭球形和植株三种主要形态,分别提出了多特征融合结合深度学习、改进LBP编码Gabor特征结合深度学习、特征区域定位结合改进ResNet三种识别方法,实现了复杂背景下中药材的高效准确识别。研究的主要成果包括:

  1. 构建了三个标准的复杂背景草本中药材数据集,分别涵盖32种中药材切片、18种类椭球形草本中药材和52种中药材植株,为相关研究提供了宝贵的数据资源。

  2. 提出了多特征融合的中药材切片识别方法,通过融合RGB颜色特征、改进HOG特征和LBP特征,并结合引入注意力机制的AlexNet网络,实现了复杂背景下中药材切片的准确识别,识别准确率达到91.68%。

  3. 提出了改进LBP编码Gabor特征的类椭球形中药材识别方法,通过结合Gabor小波变换和改进LBP算法提取纹理特征,并使用引入注意力机制的DenseNet网络进行分类,有效区分了高度相似的类椭球形草本中药材,识别准确率达到93.67%。

  4. 提出了特征区域定位的中药材植株识别方法,通过Navigator机制定位关键特征区域,并使用改进的ResNet网络提取特征,实现了自然场景下中药材植株的准确识别。

参考文献

[] Taissir F, Houcine E, Salim C. Deep learning for plant recognition: a survey[J]. International Journal of Computer Applications, 2020, 176: 30-36.

[2] Sun X, Li Y, Chen J, et al. A novel method for traditional Chinese medicine identification based on deep learning[J]. Neural Computing and Applications, 2019, 31: 9171-9182.

[3] Wu C, Wang L, Zhang Y. Research on Chinese herbal medicine recognition based on improved AlexNet[J]. Journal of Computer Applications, 2021, 41: 2727-2733.

[4] Zhou T, Liu H, Zhang Q, et al. Research on traditional Chinese medicine identification using attention-based DenseNet[J]. Pattern Recognition Letters, 2022, 156: 123-130.

[5] Chen S, Wang J, Li Q. Multi-scale feature fusion for Chinese herbal medicine identification[J]. Knowledge-Based Systems, 2020, 205: 106321.

Zemax非序列模式微透镜阵列仿真:从建模到优化完整指南 光线追迹是光学系统仿真的核心技术,其原理基于几何光学与物理光学的光线传播模型,通过精确计算光线在光学元件中的折射、反射与散射路径,实现对系统性能的预测与评估。在微透镜阵列等复杂多通道光学系统中,传统序列模式因光线路径受限而难以准确模拟串扰与杂散光,非序列光线追迹技术则凭借其灵活的空间传播机制成为关键手段。该技术广泛应用于激光整形、光束匀化、3D传感及光场成像等领域,能够有效支持阵列结构设计与优化。Zemax非序列模式为微透镜阵列仿真提供了完整的建模、优化与公差分析流程,是光学工程师进行复杂系统设计的核心工具 阅读详情

相关推荐

飞腾Ubantu22.04.3安装OpenNebula测试

因OpenneBula官方镜像源只有AMD架构的镜像包不存在ARM的镜像包,借此用源码编译进行测试。

坚持就是胜利的博客 1010

毕业设计:深度学习算法在中药材切片识别中的应用

基于深度学习的中药饮片药材检测系统,利用自制的中药饮片图像数据集,通过卷积神经网络(CNN)技术实现对药材质量的自动检测与识别。研究将分析不同中药饮片的特征,训练模型以提高检测精度,并评估模型在实际应用中的效果。采用数据增强和模型优化策略,以提升系统的鲁棒性和适应性。对于计算机专业、人工智能专业、大数据专业、信息安全专业、软件工程专业的毕业生而言,不论是对于深度学习技术感兴趣的同学,还是希望探索机器学习、算法或人工智能的领域的同学,都能为您提供丰富的选题资源和灵感。

Hai_Lang_IT的博客 1586

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)

一、 PCIE系统架构 1.1 PCIE分层结构 PCIE结构 1.2 TLP包 四种TLP类型。 Memory (内存空间操作) IO (IO空间操作) Configuration (配置操作) Message (信息操作) 四种类型TLP,如果有需要响应,称为Non-Posted TLP,如果没有需要响应,称为Posted TLP。 TLP包类型 1.2.1 TLP结构 TLP数据格式 1.2.2 Header各个字段的含义 Header格式 ...

huangshanhu的博客 3433

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 223

SAP Script表单开发中ABAP preform方法的实战应用与调试技巧

本文深入探讨了在SAP Script表单开发中调用ABAP程序(preform方法)的实战应用与调试技巧。通过一个获取供应商版本名称的实例,详细讲解了如何在SE71中嵌入PERFORM指令、编写ABAP子程序进行数据查询与处理,并重点介绍了使用SAP Script Debugger进行高效调试的方法,帮助开发者灵活扩展表单功能,实现复杂业务逻辑。

o0p1q2r3的博客 551

深入解析LinuxCNC源码:从界面开发到硬件交互

本文深入解析LinuxCNC开源数控系统的源码架构与二次开发实践。详细介绍了从GTK+界面定制、Python脚本绑定,到硬件抽象层(HAL)配置与核心运动控制模块的完整开发流程。通过实战案例,帮助开发者掌握如何基于LinuxCNC源码进行界面开发和硬件交互定制,实现个性化数控系统。

weixin_29164843的博客 542

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 315

运动目标成像必学:5分钟搞懂keystone变换原理与避坑指南

本文深入浅出地解析了雷达信号处理中的Keystone变换原理,它是解决运动目标距离徙动问题的关键技术。文章通过直观比喻和简化公式,阐述了该变换如何通过变量代换实现距离与慢时间的解耦合,将倾斜轨迹“掰直”,从而提升成像与检测性能。同时,文中重点指出了实际应用中关于大速度场景、插值误差、多目标处理及高阶运动补偿等关键避坑点,为工程实践提供了宝贵指南。

ios99的博客 403

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 590

遥感数据下载——FIRM:VIIRS火点数据、MODIS火点数据简介及下载

一、FIRMS(Fire Information for Resoutce Management System) 网站链接:https://firms.modaps.eosdis.nasa.gov/map/ 这个网站上对VIIRS及MODIS的火灾数据进行了显示,可以进行按日期、产品类别等动态的展示火点数据或火烧迹地,同时也提供了数据下载控件。高级选择中还可以进行数据统计结果展示。 二、VIIR...

knkn123的博客 3万+

同花顺Supermind量化交易 风险控制建模--海龟交易法则

A.市场与标的海龟交易法则应用于流动性高的市场中,选择交易量较大的标的进行交易。本文以沪深300指数ETF为标的,构建海龟交易法则。B、仓位:仓位是海龟交易系统最核心的部分,通过ATR真实波幅指标来管理仓位。第一步:计算True Range,简称TR。TR = Max ( H−L , H−P , P−L ) ,其中H为当日日内最高价,L为当日日内最低价,P为前一日收盘价。第二步:计算ATRATR = mean ( TR , 20 ) , 即计算过去20天的TR的平均值,ATR是TR的移动平均值。

qq_22808537的博客 1497

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 21

如何在白平衡标定种构建不同类型的白平衡色温坐标系

以各家芯片方案的白平衡色温坐标系为切入点,详细介绍了各家芯片色温坐标系构建的理论依旧;并解析了不同色温坐标系下的物理含义,提提出了多种不同的色温坐标系

大熊 959

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 750

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 371

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 410

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 171

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 85

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 218

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 178

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 354

SSL证书选RSA还是ECDSA:公钥算法、CA签名与兼容性怎么核对

申请SSL证书时,RSA和ECDSA该怎么选?先分清站点公钥算法、CA签名算法和TLS实际兼容性,再用隔离OpenSSL实验读取两类材料,核对申请、续期和部署交接,避免只看Signature Algorithm就选错。

谁呀!的博客 400

考拉兹猜想 - 7

本文通过引入虚数单位重构Collatz猜想的迭代逻辑,指出偶数减半与奇数“乘3加1”的过程在虚数坐标下等价于归结操作。关键在于:乘3加1使奇数跃升至偶数,随后持续减半,而虚数单位代表“无限减1”,实现无限向有限的转化。无论初始值如何,减半始终主导,最终归结为4-2-1循环。该视角消解了正向思维中的速度竞争疑虑,证明归结是必然结果。

杨铸人的博客 43

从曲线到储层:Techlog/KAPPA 全流程算法、UltraLAB 选型与本地 AI 部署实战

以高频 CPU 保证交互,以充足内存承载多井与多任务,以 NVMe 打通项目和知识库 I/O,再按本地模型、上下文与并发配置 GPU。对 UltraLAB 用户而言,更合理的采购方式是带着真实项目做选型:一组典型井、一套完整解释模板、一个目标大模型、一次多人并发测试。用实测结果确定配置,才能把预算转化为解释效率,而不是闲置算力。软件模块、操作系统与许可条件以厂商当前正式说明为准;硬件建议需结合项目实测。AI 输出只能作为辅助证据,不能替代岩石物理与油藏工程专业审核。

wdf8088的博客 183

贪心题目:可以到达的最远建筑

为了到达尽可能远的建筑物,在将砖块替换成梯子时,应将高度差最大位置的砖块替换成梯子,此时剩余的砖块数量最多,如果将高度差较小位置的砖块替换成梯子,则剩余的砖块数量较少,能到达的最远建筑物下标不可能更大。开始向后面的建筑物移动,移动过程中维护优先队列存储正高度差,优先队列的队首元素是最大元素,每次遇到正高度差时优先考虑使用砖块,如果砖块数量不够则使用梯子替换最大高度差位置的砖块,直到砖块和梯子都使用完毕时,到达的建筑物即为最远建筑物。如果以最佳方式使用给定的梯子和砖块,返回可以到达的最远建筑物的下标。

stormsunshine的博客 290

强化学习第十一课:完整 Q-Learning 算法

表示有:\[ 5 \]0 1 2 3 40:向左1:向右目标位置:\[ 4 \]

qq_56657939的博客 303

【Deep-OC-SORT 01】多轨迹算法Deep-OC-SORT源码分析

本工程基于Deep-OC-SORT核心模块,重构并适配了EmbeddingComputer(外观特征提取)、CMCComputer(相机运动补偿)与OCSort(主跟踪器)三类。前者实现整框/网格模式的特征提取与L2归一化;后者通过稀疏光流或SIFT匹配估计仿射变换,补偿相机运动;主跟踪器融合IoU、外观相似度与方向一致性,支持模块开关与自定义组件,实现高效多目标跟踪。

Jayson 博客 337
上一篇: 推荐系统方向知识图谱毕设选题汇总:新颖课题题目集合
下一篇: 【毕设选题汇总】信息安全毕业设计选题清单:2026 年热门研究方向(密码学与应用/网络安全防护/数据安全与隐私保护)
Mini_hailang_IT
博客等级 码龄9年 5936粉丝 640原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值