基于matlab的SUSAN特征检测实现

大家好,我是蜉蝣,今天给大家带来的是susan算子的实现过程。

SUSAN算子是一个原理简单、易于了解的算子。由于其指数基于对周边象素的 灰度比较,完全不涉及梯度的运算,因此其抗噪声能力很强,运算量也比较小;同时,SUSAN算子还是一个各向同性的算子;最后,通过控制参数t和g,可以根据具体情况很容易地对不同对比度、不同形状的图像通过设置恰当的t和g进行控制。比如图像的对比度较大,则可选取较大的t值,而图像的对比度较小,则可选取较小的t值。总之,SUSAN算子是一个非常难得的算子,不仅具有很好的边缘检测性能;而且对角点检测也具有很好的效果。

关于SUSAN的检测原理请参考:(https://blog.csdn.net/kezunhai/article/details/11269793)这里不再过多赘述。

接下来带给大家我用matlab对susan算子的实现过程,请看代码;

% detectSUSANFeayures.m    Author:Ephemeroptera  Date:2018\11\12 
% adress:AHU   QQ:605686962   Vsesion:1.0.0
%7x7 圆周template的局部地址
%                    [-1,-3] [0,-3] [1,-3]
%            [-2,-2] [-1,-2] [0,-2] [1,-2] [2,-2]
%    [-3,-1] [-2,-1] [-1,-1] [0,-1] [1,-1] [2,-1] [3, -1]
%    [-3, 0] [-2, 0] [-1, 0] [0, 0] [1, 0] [2, 0] [3 , 0]
%    [-3 ,1] [-2, 1] [-1, 1] [0, 1] [1, 1] [2 ,1] [3 , 1]
%            [-2, 2] [-1, 2] [0, 2] [1 ,2] [2 ,2]
%                    [-1 ,3] [0, 3] [1, 3]
%
%formula:c(r,r0)=  1  if |I(r)-I(r0)|<=t;
%                   0  if |I(r)-I(r0)|>t;
%          USAN(r0)=Σc(r,r0);

%设置圆周模板半径和滑动窗口的步长
radius=3;Xstep=1;Ystep=1;
template=fspecial('disk',radius);
template(template>0.01)=1;  %模板二值化
template(template<0.01)=0;
 %提取圆周模板的逻辑地址
[tem_x,tem_y]=find(template==1);
tem_x=tem_x-radius-1;
tem_y=tem_y-radius-1;

t=45; %USAN判定阈值
I = imread('cameraman.tif');
W=size(I,2);H=size(I,1); %图像大小
nucleas_X=radius+1:Xstep:W-radius; %模板圆心即nucleas运动范围
nucleas_Y=radius+1:Ystep:H-radius;
USAN=zeros(size(I,1),size(I,2));  %初始化USAN累加器
%网格遍历
tic;
for y=nucleas_Y
    for x=nucleas_X
       for e=1:length(tem_x)  %圆周模板上进行判定
           delta=I(y+tem_y(e),x+tem_x(e))-I(y,x);
           if delta0)=1;
figure(1),imshow(BIN,[]),title('SUSAN  边缘检测');

%角点检测(非极大值抑制)
corners=[];
for i=2:H-1
   for j=2:W-1 
        if R(i,j)>max([max(R(i-1,j-1:j+1)),R(i,j-1) ,R(i,j+1), max(R(i+1,j-1:j+1))])
            corners=[corners;[i,j]];
        end
   end
end
% I = insertMarker(I,corners);
figure(2);imshow(I);hold on;
set(gca,'xaxislocation','top','yaxislocation','left','ydir','reverse');
scatter(corners(:,2),corners(:,1),'x','g'),title('SUSAN  角点检测');
hold off;

程序实现结果如下:
基于matlab的SUSAN特征检测实现_第1张图片

你可能感兴趣的:(源码分析)