Harris角点检测


贴一下 计算机视觉课的作业

有时候 需要用下 

function F = DetectCorner(I, threshold, sigma)
%Harris Corner Detect
%by:LiFeiteng 
%Version1.0  灰度图像  2013/5/08
%Version1.1  彩色图像  2013/5/13
%存在问题:没有实现跟 corner 相似的接口,对噪声也不能很好的处理<checkerboard(50,2,2)>。

if nargin < 3
    sigma = 0.01;
end
if nargin < 2
    threshold = 0.6; %实验表明 对此参数不敏感
    sigma = 0.01; %对此参数敏感
end
if size(I,3)==3
    I = rgb2gray(I);
end
W = fspecial('gaussian', [5 5], 2);
I = double(I);
I = imfilter(I, W, 'same');

Ix = imfilter(I,[-1 0 1], 'same');
Iy = imfilter(I,[-1 0 1]', 'same');
A = Ix.^2;
B = Ix.*Iy;
C = Iy.^2;

A = imfilter(A, W, 'same');
B = imfilter(B, W, 'same');
C = imfilter(C, W, 'same');
%F = (A.*C-B.*B)./(A+C+eps); 
F = (A.*C-B.*B)-threshold*(A+C); 
F = F/max(F(:));
F = F.*(F>sigma); %F = F.*(F>0.01);
cor = 10;
F(1:cor,1:cor)=0; F(1:cor,end-cor:end)=0;F(end-cor:end,1:cor)=0;F(end-cor:end,end-cor:end)=0;
F = imregionalmax(F, 8);
[row, col] = find(F==1);
F = [col, row];
end

测试用例:

img = imread('lena_gray.tif');
img = imread('corner.jpg');
%img = checkerboard(50,2,2);
% img = rgb2gray(img);
img = imnoise(img,'gaussian');
figure(1),imshow(img, [])
F = DetectCorner(img,0.6);

figure(1),hold on, plot(F(:,1), F(:,2), 'y.')

Harris角点检测_第1张图片


你可能感兴趣的:(Harris角点检测)