⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 susancorner.m

📁 摄像机标定方法张正友方法中图像坐标的提取。一种全新的方法
💻 M
字号:

%********************************************************************
%
% Susan Feature Detector
% Code by Li Weiming@NLPR CASIA 2006.10.26
% Contact Information:  wmli@nlpr.ia.ac.cn
%
%********************************************************************

function [cim,cout] = SusanCorner(im,SmlrGate,WinSz,radius,thresh,flag_show);

im = double( im );
[m,n] = size(im);

% calculate usan 
circleTemplate = ComputeCircleTemplate(WinSz);
usan = zeros(m,n);
for i = WinSz+1:m-WinSz
    for j = WinSz+1:n-WinSz
        count = 0;
        ImPatch = im(i-WinSz:i+WinSz,j-WinSz:j+WinSz);
        ImPatch = ImPatch.*circleTemplate;
        CenterValue = im(i,j);
        count = sum( sum( abs(ImPatch-CenterValue)< SmlrGate ) );
        usan(i,j) = count;
    end
end

%
Nmax = sum(circleTemplate(:));
gate = Nmax/2;
usan = gate-usan;
usan = usan.*(usan > 0);

% locate the corner points: find maximum in usan
g_thresh = gate*thresh;
sze = 2*radius+1;                         % Size of mask.
mx = ordfilt2(usan,sze^2,ones(sze));      % Grey-scale dilate.
cim = (usan == mx) & (usan > g_thresh);   % Find maxima.
[r,c] = find(cim);                        % Find row,col coords.
cout = [r,c];

if flag_show
    figure;imshow(im,[]); 
    hold on;
    plot(c,r,'r+'), title('corners detected');
    hold off;
end

function circleTemplate = ComputeCircleTemplate(WinSz);

    nN = 2*WinSz+1;
    circleTemplate = zeros(nN,nN);
    for i = 1:nN
        for j = 1:nN
            x = i - WinSz;
            y = j - WinSz;
            if x*x + y*y <= WinSz*WinSz
                circleTemplate(i,j) = 1;
            end
        end
    end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -