为探索水稻谷粒图像快速计数方法,修正或减少因谷粒粘连引起的误差,采用黑色平面结合机械振动分散谷粒并采集图像,利用Matlab软件对图像进行灰度处理、二值化处理、两步开运算及腐蚀运算等消除粘连,并对计数点标记和计算.在灰度图上作开运算能有效修整谷粒边缘,腐蚀运算后谷粒中心与边缘亮暗对比更加鲜明,二值化后的图像初步分离效果好,在进一步开运算和腐蚀运算后,颗粒缩小,边界距离增大,解决了绝大部分粘连.对计数点标记后,非计数点更容易观察。
clc;clear all;close all;set(0,'defaultfigurecolor','w')I=imread('123.png');x=rgb2gray(I);figure(1);subplot(3,2,1);imshow(I);title('原始图像');subplot(3,2,2);imshow(x);title('灰度图像'); thresh=graythresh(x);J1=imnoise(x,'gaussian',0,0.01);hood=3;K1=medfilt2(J1,[hood hood]);subplot(3,2,3);imshow(K1);title('高斯噪声的滤波效果');I2=im2bw(x,thresh);subplot(3,2,4);imshow(I2)title('二值图像');J=edge(I2,'canny'); K=imfill(J,'holes'); subplot(3,2,5);imshow(K); SE=strel('disk',1);%用于膨胀腐蚀及开闭运算等操作的结构元素对象 L=imopen(K,SE); %对图像实现开运算,开运算一般能平滑图像的轮廓,消弱狭窄的部分,去掉细的突出。subplot(3,2,6);imshow(L); M=bwlabel(L,4);%联通域标记 [m,n]=size(M); %矩阵M的大小 num=0;%谷物颗粒的个数 for i=1:m for j=1:n if M(i,j)>num%最大的label值即联通域的个数 num=M(i,j); end end end disp('谷物颗粒个数:'); disp(num);
注:完整代码或者代写添加QQ1575304183