[已答复] 怎么检测图片中的虫子

[复制链接]
mc赵子龙 发表于 2021-5-27 14:19:47
新人,边缘检测,连通域好像都不对:(,能不能告诉我应该怎么去操作,或者有大大发源代码,也是万分感激的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

4 条回复


gywxd 发表于 2021-5-27 23:06:42
%%%生成代码                                                                                                                                       

        workpic=imread('D:\MATLAB\xhd.png');                                                                                                   
        oldpic=workpic ;                                                                                                                       
        %%%%读取需要处理的图片                                                                                                                          

        tmppic=workpic*0;                                                                                                                     
        flg= workpic(:,:,1)-workpic(:,:,2) >13  &  workpic(:,:,1)-workpic(:,:,3) >3  ;                                             
        %红色筛选                                                                                                                                 
        tmppic(:,:,1)=workpic(:,:,1).*uint8(flg);                                                                                             
        tmppic(:,:,2)=workpic(:,:,2).*uint8(flg);                                                                                             
        tmppic(:,:,3)=workpic(:,:,3).*uint8(flg);                                                                                             
        workpic=tmppic ;                                                                                                                     
        %%颜色过滤                                                                                                                                 

        out1=im2bw(workpic,0.094675);   % 筛选结果二值化                                                                                                   
        %%%%闸值二值化处理                                                                                                                           

        figure();
        imshow(out1);



        out2=im2bw(oldpic,0.32544);      %原图亮度二值化      


        figure();

        imshow(out2);  


        figure()

        out3=~out2  &  ~out1;        %亮度筛选和红色筛选的交集

        out3=~out3;

        imshow(out3);




        [L,n]=bwlabel(~out3,8) ;               %去掉小联通区域 去掉噪点            
        for k=1:n                                             
             [x,y]=find(L==k);                                
             xscount=size(x,1);                              
             if xscount<428.57                                
                 L(L==k)=0;                                   
                 out3(x ,y ,1)=1;                          
              end                                             
        end   

        figure()
        imshow(out3)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

gywxd 发表于 2021-5-27 23:07:47
大体想法,是虫类多发红, 用红色通量筛选结果  然后和 亮度筛选结果取交集, 然后去掉噪点,   照片太差,否则能很好调整

lyqmath 发表于 2021-5-28 14:52:10
可以

参考书籍《计算机视觉与深度学习实战——以MATLAB、Python 为工具》[刘衍琦等]

使用一个比较简单的方法,如下


  1. clc; clear all; close all;
  2. img = imread('xhd.png');
  3. J = rgb2hsv(img);
  4. im = mat2gray(J(:,:,3));
  5. im2 = imadjust(im, [0.1 0.2], [0 1]);
  6. im2 = imcomplement(im2);
  7. bw = im2bw(im2, 0.8);
  8. bw = imclearborder(bw);
  9. bw = bwareafilt(bw, 1);
  10. bw = imclose(bw, strel('disk', 9));
  11. [r,c] = find(bw);
  12. th = 4;
  13. rect = [min(c)-th min(r)-th max(c)-min(c)+2*th max(r)-min(r)+2*th];
  14. figure;
  15. imshow(img);
  16. hold on; rectangle('Position', rect, 'EdgeColor', 'c', 'LineWidth', 2, 'LineStyle', '-');
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

gywxd 发表于 2021-5-28 15:25:27
lyqmath 发表于 2021-5-28 14:52
可以

参考书籍《计算机视觉与深度学习实战——以MATLAB、Python 为工具》[刘衍琦等]

这个确实可行,但是通用性有问题,如果阴影区域有大于虫体  的图片就没法使用

bw = bwareafilt(bw, 1);   选取最大阴影面积为虫的 设定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表