[已解决] 用matlab边缘提取后,请问怎么把里面的噪点去掉?

[复制链接]
7720804004 发表于 2021-5-23 17:05:11
用了填充但是里面的一层轮廓没有了,我想让外轮廓和内轮廓都保存,内外轮廓之间的噪点填充掉,请问大佬们这个怎么解决???

本帖子中包含更多资源

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

x

最佳答案


gywxd 发表于 2021-5-24 07:59:22


%%%生成代码                                                      
                                                              
        workpic=imread('D:\MATLAB\刀.jpg');                    
        oldpic=workpic ;                                      
        %%%%读取需要处理的图片                                         
                                                              
        workpic=rgb2gray(workpic) ;                           
        %%RGB图转灰度图                                            
                                                              
        workpic = imgradient(workpic);                           
                                       
        %% 灰度图 梯度分割                                          
                                
        tmpic=oldpic;
        tmpic(:,:,1)=workpic;
        tmpic(:,:,2)=workpic;
        tmpic(:,:,3)=workpic;
        workpic=tmpic;
        %灰度转rgb
        
        
        workpic=im2bw(workpic,0.21);                          
        %%%%闸值二值化处理                                          
                                                              
        workpic=~workpic;                                    
        %%%%图片反色处理                                            
                                                              
        [L,n]=bwlabel(~workpic,8) ;                           
        for k=1:n                                             
             [x,y]=find(L==k);                                
             xscount=size(x,1);                              
             if xscount<285.71                                
                 L(L==k)=0;                                   
                 workpic(x ,y ,1)=1;                          
              end                                             
         end                                                  
        workpic=~workpic;                                    
        %%%%图片反色处理                                            
                                                              
imshow(workpic);

本帖子中包含更多资源

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

x
回复此楼

7 条回复


gywxd 发表于 2021-5-24 07:59:22


%%%生成代码                                                      
                                                              
        workpic=imread('D:\MATLAB\刀.jpg');                    
        oldpic=workpic ;                                      
        %%%%读取需要处理的图片                                         
                                                              
        workpic=rgb2gray(workpic) ;                           
        %%RGB图转灰度图                                            
                                                              
        workpic = imgradient(workpic);                           
                                       
        %% 灰度图 梯度分割                                          
                                
        tmpic=oldpic;
        tmpic(:,:,1)=workpic;
        tmpic(:,:,2)=workpic;
        tmpic(:,:,3)=workpic;
        workpic=tmpic;
        %灰度转rgb
        
        
        workpic=im2bw(workpic,0.21);                          
        %%%%闸值二值化处理                                          
                                                              
        workpic=~workpic;                                    
        %%%%图片反色处理                                            
                                                              
        [L,n]=bwlabel(~workpic,8) ;                           
        for k=1:n                                             
             [x,y]=find(L==k);                                
             xscount=size(x,1);                              
             if xscount<285.71                                
                 L(L==k)=0;                                   
                 workpic(x ,y ,1)=1;                          
              end                                             
         end                                                  
        workpic=~workpic;                                    
        %%%%图片反色处理                                            
                                                              
imshow(workpic);

本帖子中包含更多资源

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

x
回复此楼

gywxd 发表于 2021-5-24 08:02:09
如果需要轮廓更细些  腐蚀一下就可以了

7720804004 发表于 2021-5-25 17:14:53
gywxd 发表于 2021-5-24 07:59
%%%生成代码                                                      
                               ...

大佬,最后这一段是什么意思阿,能讲解一下嘛,麻烦了
[L,n]=bwlabel(~workpic,8) ;                           
        for k=1:n                                             
             [x,y]=find(L==k);                                
             xscount=size(x,1);                              
             if xscount<285.71                                
                 L(L==k)=0;                                   
                 workpic(x ,y ,1)=1;                          
              end                                             
         end                                                  
        workpic=~workpic;                                    
        %%%%图片反色处理

gywxd 发表于 2021-5-25 17:19:07
7720804004 发表于 2021-5-25 17:14
大佬,最后这一段是什么意思阿,能讲解一下嘛,麻烦了
[L,n]=bwlabel(~workpic,8) ;                     ...

去像素量在 285 以下的 联通块

7720804004 发表于 2021-5-26 14:22:14
gywxd 发表于 2021-5-25 17:19
去像素量在 285 以下的 联通块

L(L==k)=0;
workpic(x ,y ,1)=1;

这两段第一行是让小于285的连通块变成0,第二行(x,y,1)=1是什么意思阿

gywxd 发表于 2021-5-26 15:35:28
7720804004 发表于 2021-5-26 14:22
L(L==k)=0;
workpic(x ,y ,1)=1;

改变像素颜色啊

7720804004 发表于 2021-5-26 22:03:23
gywxd 发表于 2021-5-26 15:35
改变像素颜色啊

谢谢阿!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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