目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
大家好,这里是海浪学长计算机毕设专题,本次分享的课题是
🎯基于机器视觉的茶叶病害自动检测系统
项目背景
茶叶作为一种重要的经济作物,在全球范围内具有广泛的种植和消费市场。随着茶叶产业的发展,病害问题日益严重,给茶叶的产量和质量带来了显著影响。茶叶病害不仅导致叶片的枯黄、脱落,还可能引起茶树的死亡,严重时甚至影响整个茶园的生态平衡。因此,及时、准确地识别和诊断茶叶病害,对于保障茶叶生产的可持续性、提高茶叶品质和经济效益至关重要。
数据集
茶叶的主要发病部位集中在叶片、芽和根部,常见病害种类繁多,尤其是在我国南方茶区,受病害影响的情况十分严重。为确保采集图像的真实性,采用了手机进行拍摄。图像采集过程中,着重捕捉病叶的特征,如病斑的形状、颜色变化等,以便为后续的图像处理和病害识别提供高质量的样本数据。采用了专业的标注工具,对采集到的茶叶病害图像进行逐一标注。

将整个数据集按照8:2的比例划分为训练集和测试集,其中80%的数据用于模型的训练,20%的数据用于评估模型的性能。为了保证数据的多样性和代表性,划分过程中遵循了随机抽样原则,使得不同病害的样本在训练集和测试集中均有合理分布。这种划分方式为后续的模型评估和优化提供了良好的基础,有助于提升模型的泛化能力。
设计思路
在自然条件下拍摄的茶叶叶片病害彩色图像存在对比度不明显的问题,图像上可能出现一些来源不明的斑点,同时光线的影响使得图像内容有时不够清晰。在进行图像分割和特征提取之前,必须对图像进行预处理,以减少噪声、斑点、光线及其他因素的干扰,优化图像质量,为后续特征提取做好准备。常见的图像预处理方法包括图像灰度调整、叶片目标提取、图像增强和图像分割等。灰度变换可以扩大图像的动态范围,提升对比度,使图像更加清晰,特征更加明显。常用的变换方式包括对数变换、伽马变换等非线性变换,以及阈值变换、分段线性变换等线性变换。在此过程中,采用分段线性变换来改善图像效果,确保所需特征得到清晰展现。

图像分割是将图像中不同区域分开,这些区域可能是需要关注的部分或不需要关注的部分。通常,区域必须互不相交,并且在灰度、纹理、颜色等特征上具有一定的相似性才可区分。图像分割是图像分析和模式识别中的重要步骤,分割的准确性直接影响图像分析和处理的结果,进而影响对图像的理解。图像分割的方法多种多样,各种方法通常仅适用于特定类型的图像,尚未有一种普适的分割方法。常用的图像分割方法包括边缘检测、霍夫变换、区域生长、边界跟踪、阈值分割、区域分割和聚合等。经过对比研究,采用模糊C均值算法进行图像分割。图像分割方法的基础是灰度值的不连续性或相似性。

相对于单方面特征提取,综合提取多方面特征作为识别参数提高了识别率。一般使用颜色、纹理和形状三个方面的特征作为图像特征参数的提取。待识别对象的数据量较大,部分茶叶叶片病害症状相似,直观特征通常无法有效识别,因此需要对图像信息进行变换和对比实验,以获得最能代表分类本质的特征。图像内容中的颜色对特征具有重要影响,颜色提供了最直接的视觉效果。颜色特征是最能代表图像的特征之一。颜色特征具有平移、旋转和尺度变化的不变性,甚至对各种变形也不敏感。基于颜色特征可以有效识别茶叶不同的病害。

图像的纹理特征反映了同质现象的重要视觉特征,描述的是图像像素的邻域灰度空间分布情况。健康茶叶叶片与病变部位的纹理有显著区别,纹理特征的提取方式多种多样,重点介绍灰度共生矩阵。形状是物体一个直观而重要的特征,通常用来描述物体的几何性质。通过目标的形状可以将其从其他物体中区分出来,因此,在图像识别领域,形态特征的使用非常广泛。
模式识别技术在最初出现时的目标是将分类错误率降到最低。经过长期发展,发现过分追求低错误率的代价是需要大量的训练样本。对于长期训练的分类器,虽然错误率可能很低,但考虑到实际应用中的时间、成本等问题,这种分类方式并不符合需求。如何以少量训练样本实现分类器的精确分类成为模式识别技术发展的一个重点。

支持向量机(SVM)通过对分类模型和模型参数的选择,确保训练误差(经验风险)与测试误差(期望风险)最小化。SVM理论的核心思想是通过在高维空间中寻找一个最优的超平面,以便将不同类别的样本分隔开来。这个超平面不仅需要最大化类别之间的间隔,还要考虑到尽量减少分类错误的情况。通过引入边界支撑向量,SVM能有效利用少量训练样本进行分类,并在面对高维数据时仍能保持良好的性能。

图像预处理是病害检测的第一步,目的是通过一系列操作提高图像质量,使后续的特征提取更为准确。此步骤包括灰度变换、去除噪声、图像均衡化和图像分割等操作,以得到清晰的病斑图像。
- 灰度变换:通过调整图像的灰度值,增强图像的对比度,使病斑更加明显。
- 去除噪声:利用滤波技术(如中值滤波)消除图像中的噪声,保留重要特征。
- 图像均衡化:调整图像的直方图,使图像的灰度分布更加均匀,从而提升图像的整体视觉效果。
- 图像分割:使用模糊C均值聚类算法对图像进行分割,提取出病斑区域。
import cv2
import numpy as np
def preprocess_image(image_path):
image = cv2.imread(image_path)
# 灰度变换
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 去除噪声
denoised_image = cv2.medianBlur(gray_image, 5)
# 图像均衡化
equalized_image = cv2.equalizeHist(denoised_image)
# 图像分割
_, segmented_image = cv2.threshold(equalized_image, 127, 255, cv2.THRESH_BINARY)
return segmented_image
preprocessed_image = preprocess_image("tea_leaf.jpg")
对分割出来的病斑进行特征提取是建模的重要步骤。提取的特征包括颜色、纹理和形状等特征。这些特征为后续的分类提供了必要的信息。
- 颜色特征:提取病斑区域的颜色直方图,获取色彩分布。
- 纹理特征:使用灰度共生矩阵等方法提取纹理特征,帮助识别病斑的细微变化。
- 形状特征:描述病斑的几何特性,如面积、周长和形状指数等。
from skimage.feature import greycomatrix, greycoprops
def extract_features(segmented_image):
# 计算颜色特征
color_hist = cv2.calcHist([segmented_image], [0], None, [256], [0, 256])
# 计算纹理特征
glcm = greycomatrix(segmented_image, distances=[1], angles=[0], symmetric=True, normed=True)
texture_feature = greycoprops(glcm, 'contrast')
# 计算形状特征
contours, _ = cv2.findContours(segmented_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
shape_feature = [cv2.contourArea(cnt) for cnt in contours]
return color_hist, texture_feature, shape_feature
features = extract_features(preprocessed_image)
图像分类识别使用支持向量机(SVM)模型进行病害识别,得到识别结果。主要包括文件操作、预处理、特征提取和病害识别等功能模块。
- 训练集获取:选取不同病害(如斑点落叶病、锈病、花叶病)图像各10幅作为训练集。使用模糊C聚类分割算法进行分割,然后提取特征,将特征值作为分类的输入向量。
- 分类模型训练:根据不同病害训练三个二分类SVM模型,采用一对一投票方法进行分类,得票最多的类别即为病害所属类别。
from sklearn import svm
from sklearn.model_selection import train_test_split
import numpy as np
# 假设features和labels分别为提取的特征和对应的标签
X = np.array(features) # 特征向量
y = np.array(labels) # 标签
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练支持向量机模型
model = svm.SVC(kernel='linear')
model.fit(X_train, y_train)
# 进行分类
predictions = model.predict(X_test)
海浪学长项目示例:






187



被折叠的 条评论
为什么被折叠?



