1. 步骤
1.1 图像预处理
-
灰度化:采用加权平均法转换彩色图像
matlabImg_Gray = 0.3*R + 0.59*G + 0.11*B; % R/G/B通道权重 -
去噪:中值滤波消除椒盐噪声
matlabJ = medfilt2(Img_Gray, [3,3]); % 3×3窗口滤波 -
直方图均衡化:增强对比度
matlabIm = imadjust(J, stretchlim(J), []); % 自动拉伸灰度范围
1.2 二值化处理
-
迭代阈值法:动态选择最佳分割阈值
matlabT = 0.5*(max(Im(:)) + min(Im(:))); % 初始阈值 while true foreground = Im > T; mean_bg = mean(Im(~foreground)); mean_fg = mean(Im(foreground)); new_T = 0.5*(mean_bg + mean_fg); if abs(new_T - T) < 0.1 break; end T = new_T; end BW = Im > T; % 二值化结果
1.3 形态学优化
-
开运算去噪:消除小噪点
matlabse = strel('disk', 2); % 圆形结构元素 BW = imopen(BW, se); -
闭运算填充孔洞
matlabBW = imclose(BW, se);
1.4 连通区域分析
-
标记连通域:统计颗粒数量
matlab[L, num] = bwlabel(BW, 4); % 4邻域连通分析 -
区域过滤:排除噪声干扰
matlabstats = regionprops(L, 'Area', 'Centroid'); valid_idx = [stats.Area] > 500; % 过滤面积小于500像素的区域 real_num = sum(valid_idx);
2. 复杂场景优化方案
2.1 粘连颗粒分割
-
分水岭算法:处理密集粘连颗粒
matlabD = -bwdist(~BW); % 距离变换 L = watershed(D); BW(L == 0) = 0; % 分割后更新二值图
2.2 多尺度处理
-
金字塔分解:适应不同尺寸颗粒
matlabpyramid = impyramid(Im, 'reduce'); % 图像金字塔 % 对每层金字塔进行独立分析
2.3 光照不均校正
-
自适应阈值:局部区域二值化
matlablocal_thresh = graythresh(Im); % Otsu全局阈值 BW = imbinarize(Im, local_thresh);
3. 完整代码实现
matlab
% 谷物颗粒计数主程序
clear; clc;
% 1. 图像读取与预处理
img = imread('grain.jpg');
gray_img = rgb2gray(img); % 灰度化
denoised = medfilt2(gray_img, [3,3]); % 去噪
% 2. 自适应二值化
level = graythresh(denoised); % Otsu阈值
binary = imbinarize(denoised, level);
% 3. 形态学优化
se = strel('disk', 2);
opened = imopen(binary, se);
closed = imclose(opened, se);
% 4. 连通区域分析
[L, num] = bwlabel(closed, 4);
stats = regionprops(L, 'Area', 'Centroid');
valid = [stats.Area] > 500; % 过滤小区域
count = sum(valid);
% 5. 结果显示
figure;
subplot(221), imshow(img), title('原图');
subplot(222), imshow(binary), title('二值化');
subplot(223), imshow(closed), title('形态学处理');
subplot(224), imshow(label2rgb(L)), title(['计数结果: ', num2str(count)]);
参考代码 谷物颗粒计数 www.youwenfan.com/contentcsl/65667.html
4. 实际应用案例
- 水稻考种:对2000粒样本测试,平均计数误差<2%
- 小麦质检:处理速度达15帧/秒(NVIDIA Jetson平台)
- 工业分选:结合机械臂实现自动分拣(准确率>98%)
5. 工具与扩展
- 深度学习扩展:使用YOLOv5训练颗粒检测模型
- 并行计算:利用Parallel Computing Toolbox加速处理
- 硬件部署:通过MATLAB Coder生成C代码部署至嵌入式设备