zoukankan      html  css  js  c++  java
  • matlab练习程序(SUSAN检测)

    matlab练习程序(SUSAN检测)

      SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny。不过思想还是有点意思的。

      主要思想就是:首先做一个和原图像等大的目标图像。然后用一个圆形的模板,用模板去遍历原图像每个像素,把模板内的每个像素都和模板中心像素比较,如果灰度小于一个阈值,那么就对目标图像当前和原图像相同位置的像素加一,直到结束。目标图像中在原图像是角点的位置就会取局部极小,所以做一个反向的相减。img=max(img)-img,if img<g,这里的g也是自己给定的阈值,我这里取了2*max(img)/3这样的阈值,g越大,得到的点就越多。这步之后角点的值就成为局部极大了。最后进行非极大抑制,去除一些杂点就行了。

    代码如下:

    clear all;
    close all;
    clc;
    
    img=imread('i.jpg');
    img=rgb2gray(img);
    imshow(img);
    [m n]=size(img);
    img=double(img);
    
    t=45;   %模板中心像素灰度和周围灰度差别的阈值,自己设置
    usan=[]; %当前像素和周围在像素差别在t以下的个数
    %这里用了37个像素的模板
    for i=4:m-3         %没有在外围扩展图像,最终图像会缩小
       for j=4:n-3 
            tmp=img(i-3:i+3,j-3:j+3);   %先构造7*7的模板,49个像素
            c=0;
            for p=1:7
               for q=1:7
                    if (p-4)^2+(q-4)^2<=12  %在其中筛选,最终模板类似一个圆形
                       %   usan(k)=usan(k)+exp(-(((img(i,j)-tmp(p,q))/t)^6)); 
                        if abs(img(i,j)-tmp(p,q))<t  %判断灰度是否相近,t是自己设置的
                            c=c+1;
                        end
                    end
               end
            end
            usan=[usan c];
       end
    end
    
    g=2*max(usan)/3; %确定角点提取的数量,值比较高时会提取出边缘,自己设置
    for i=1:length(usan)
       if usan(i)<g 
           usan(i)=g-usan(i);
       else
           usan(i)=0;
       end
    end
    imgn=reshape(usan,[n-6,m-6])';
    figure;
    imshow(imgn)
    
    %非极大抑制
    [m n]=size(imgn);
    re=zeros(m,n);
    for i=2:m-1
       for j=2:n-1 
            if imgn(i,j)>max([max(imgn(i-1,j-1:j+1)) imgn(i,j-1) imgn(i,j+1) max(imgn(i+1,j-1:j+1))]);
                re(i,j)=1;
            else
                re(i,j)=0;
            end
       end
    end
    
    figure;
    imshow(re==1);

    后两幅比第一幅小,我没进行边缘扩展。

    原图

    未进行非极大抑制,似乎就是边缘了

    最后结果

  • 相关阅读:
    搭建maven web项目
    Promise封装AJAX
    迭代器Iterator
    ...扩展运算符
    解构赋值和模板字符串(反引号 ` `)
    记录一下let,const,var的区别
    重拾旧笔,好久不见
    SQL 中实现递归(根据子节点查找父节点)
    SQL 利用case when 动态给SQL添加条件查询语句
    关于webapi练习过程中遇到的一系列问题记录
  • 原文地址:https://www.cnblogs.com/saliency/p/3616679.html
Copyright © 2011-2022 走看看