Matlab论坛
直播中

乂乂统天下

6年用户 162经验值
擅长:可编程逻辑 测量仪表 嵌入式技术
私信 关注

MATLAB 识别图像中米粒个数

` 本帖最后由 乂乂统天下 于 2020-3-23 14:21 编辑

matlab 图像处理:识别照片中米粒的个数,并对米粒添加标注
新手学习,互相交流,多多关照
  1. clc,clear,close all;                  % 清除缓存
  2. % 2019/10/11 星期五  DAY12
  3. % 功能:识别照片中米粒个数并作出相应标记、计数
  4. % 说明:无
  5. %
  6. %%  形态学处理=数米粒
  7. g=imread('rice.png');
  8. SE=strel('disk',4);  % 形态结构元素
  9. X1=imerode(g,SE);  % 二值图像腐蚀
  10. I=imdilate(X1,SE); % 二值图像膨胀

  11. % I=imread('rice.png');
  12. BG=imopen(I,strel('disk',15));
  13. % 对图像实现开运算,开运算一般能平滑图像的轮廓,消弱狭窄的部分,去掉细的突出。
  14. % se=strel('disk',5);用圆盘形结构元素通过开运算 移除小于5像素的雪花
  15. I2=imsubtract(I,BG);    % 减法运算 从一个图像中减去另一个图像或从图像中减去常量
  16. level=graythresh(I2);   % 灰谷 基于otsu方法的全局图像阈值
  17. bw2=imbinarize(I2,level);  % 基于阈值将图像转换为二值图像
  18. [labeled,numObjects]=bwlabel(bw2,8);
  19. max(max(labeled))
  20. f=bw2;
  21. [L,n]= bwlabel(f);  
  22. % 函数find(见5.2.2节)在处理标记矩阵时非常有用。
  23. % 例如,以下对find的调用将返回属于第三个对象的所有像素的行索引和列索引:
  24. [r,c]=find(L==3);   % 然后,利用r和C作为输入的mean函数来计算该对象的质心。
  25. rbar = mean(r);
  26. cbar = mean(c);   
  27. % 可以使用一个循环来计算和显示图像中全部对象的质心。
  28. % 为了使质心叠置在图像上时可看到该质心,我们将使用中心为白色“*”符号的黑色圆标记来表示,如下所示:
  29. figure
  30. subplot(2,3,1),imshow(I);title('原图');
  31. subplot(2,3,2),imshow(BG);title('背景');
  32. subplot(2,3,3),imshow(I2);title('消除背景');
  33. subplot(2,3,4),imshow(bw2);title('二值化');
  34. subplot(2,3,5),imshow(f);title('标注');
  35. hold on    % So later plotting commands plot on top of the image.
  36. for k = 1:n
  37.     [r,c]= find(L == k);
  38.     rbar = mean(r);
  39.     cbar = mean(c);
  40.     plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',10);
  41.     plot(cbar,rbar,'Marker','*','MarkerEdgeColor','w');     % 标注*
  42. %     text(cbar,rbar,num2str(k),'Color','red','FontSize',14); % 标注标号
  43. end
  44. subplot(2,3,6),imshow(f);title('标注标号');
  45. hold on    % So later plotting commands plot on top of the image.
  46. for k = 1:n
  47.     [r,c]= find(L == k);
  48.     rbar = mean(r);
  49.     cbar = mean(c);
  50.     plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',10);
  51.     plot(cbar,rbar,'Marker','*','MarkerEdgeColor','w');     % 标注*
  52.     text(cbar,rbar,num2str(k),'Color','red','FontSize',14); % 标注标号
  53. end
  54. figure,imshow(f);title('标注标号');
  55. hold on    % So later plotting commands plot on top of the image.
  56. for k = 1:n
  57.     [r,c]= find(L == k);
  58.     rbar = mean(r);
  59.     cbar = mean(c);
  60.     plot(cbar,rbar,'Marker','o','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',10);
  61.     plot(cbar,rbar,'Marker','*','MarkerEdgeColor','w');     % 标注*
  62.     text(cbar,rbar,num2str(k),'Color','red','FontSize',14); % 标注标号
  63. end

源码下载地址https://www.lanzous.com/iajjkad  
  
密码:des4







` LY_result2.jpg LY_result1.jpg

更多回帖

发帖
×
20
完善资料,
赚取积分