Susan Corner Detector实施

时间:2013-11-03 13:37:30

标签: matlab image-processing feature-detection

我还没有理解代码和函数的处理方式..

你能详细说明函数声明吗

fun = @(img) susanFun(img);
map = nlfilter(img,maskSz,fun);

同样在苏珊角探测器中我们只有2个阈值..“t和g”..但这里我们有“thGeo,thGeo1,thGeo2,thT,thT1”

我无法理解这里采用的方法:

function [ map r c ] = susanCorner( img )
%SUSAN Corner detection using SUSAN method.
%   [R C] = SUSAN(IMG)  Rows and columns of corner points are returned.


maskSz = [7 7];
fun = @(img) susanFun(img);
map = nlfilter(img,maskSz,fun);
[r c] = find(map);

end

function res = susanFun(img)
% SUSANFUN  Determine if the center of the image patch IMG
%   is corner(res = 1) or not(res = 0)


mask = [...
    0 0 1 1 1 0 0
    0 1 1 1 1 1 0
    1 1 1 1 1 1 1
    1 1 1 1 1 1 1
    1 1 1 1 1 1 1
    0 1 1 1 1 1 0
    0 0 1 1 1 0 0];

% uses 2 thresholds to distinguish corners from edges
thGeo = (nnz(mask)-1)*.2;
thGeo1 = (nnz(mask)-1)*.4;
thGeo2 = (nnz(mask)-1)*.4;
thT = .07;
thT1 = .04;

sz = size(img,1);
usan = ones(sz)*img(round(sz/2),round(sz/2));

similar = (abs(usan-img)<thT);
similar = similar.*mask;
res = sum(similar(:));
if res < thGeo
    dark = nnz((img-usan<-thT1).*mask);
    bright = nnz((img-usan>thT1).*mask);
    res = min(dark,bright)<thGeo1 && max(dark,bright)>thGeo2;

else
    res = 0;
end

end

1 个答案:

答案 0 :(得分:0)

fun = @(img) susanFun(img);
map = nlfilter(img,maskSz,fun);

装置

  • fun是函数的句柄(或指针)。
  • @(img)fun接受一个名为img的论据。
  • susanFun(img)fun
  • 的正文

nlfilter传递函数句柄fun并可以调用它。 实际上,它会将fun与参数img一起应用为图像img的每个7x7滑动块。 请注意,此处重载名称img:它是包含图像的变量的名称,它是fun参数的名称。

请参阅function_handle (@)