Завершите эксперимент по обнаружению углов изображения.
Реализация углового алгоритма Харриса
Согласно приведенному выше обсуждению, алгоритм обнаружения углов изображения Харриса можно резюмировать следующим образом, который разделен на следующие пять шагов:
-
Вычислите градиенты Ix, Iy изображения I(x,y) в обоих направлениях X и Y.
-
Вычисляет произведение градиентов двух направлений изображения.
-
Гауссово взвешивание I2x, I2y и Ixy с функцией Гаусса (принимающей σ=1) для генерации элементов A, B и C матрицы M.
-
Вычисляет отклик Харриса R для каждого пикселя и устанавливает R равным нулю, если R меньше некоторого порогового значения t.
-
Немаксимальное подавление выполняется в окрестности 3×3 или 5×5, а точкой локального максимума является угловая точка изображения.
Свойства Харрис Корнерс
- Влияние параметра α на обнаружение углов Предполагая, что собственные значения λ1≥λ2≥0 матрицы M получены, пусть λ2=kλ1, 0≤k≤1. Из связи между собственными значениями и прямым следом и определителем матрицы M мы можем получить: detM=∏iλi traceM=∑iλi Тогда мы можем получить отклик угловой точки R=λ2λ2=α(λ2+λ2 )2=λ2(k?α( 1+k)2) В предположении R≥0 имеем: 0≤α≤k(1+k)2≤0,25 Для малого значения k R≈λ2(k?α ),α
- Оператор определения угла Харриса не чувствителен к изменениям яркости и контрастности, поскольку дифференциальный оператор используется для дифференциации изображения во время обнаружения угла Харриса, не чувствителен к высоте или спуску. Другими словами, аффинное преобразование яркости и контраста не меняет места появления экстремумов отклика Харриса, но за счет выбора порога может влиять на количество обнаружений углов.
- Оператор обнаружения углов Харриса имеет инвариантность к вращению Оператор обнаружения углов Харриса использует матрицу моментов второго порядка региональной шкалы серого вблизи угла. Матрица моментов второго порядка может быть представлена в виде эллипса, а большая и малая оси эллипса обратны квадратному корню из собственных значений матрицы моментов второго порядка. Когда эллипс признаков вращается, собственное значение не меняется, поэтому значение отклика R оцененного угла не меняется, что показывает, что оператор обнаружения угла Харриса имеет инвариантность к вращению.
- Оператор обнаружения углов Харриса не имеет масштабной инвариантности.Как показано на рисунке ниже, когда правое изображение уменьшается, содержимое изображения, содержащегося в окне, полностью меняется при условии, что размер окна обнаружения остается неизменным. Изображение слева может быть распознано как край или кривая, а изображение справа может быть распознано как угол.
close all;
clear all;
clc;
img=imread('testc.jpg');
imshow(img);
img = im2gray(img);
img =double(img);
[m n]=size(img);
tmp=zeros(m+2,n+2);
tmp(2:m+1,2:n+1)=img;
Ix=zeros(m+2,n+2);
Iy=zeros(m+2,n+2);
E=zeros(m+2,n+2);
Ix(:,2:n)=tmp(:,3:n+1)-tmp(:,1:n-1);
Iy(2:m,:)=tmp(3:m+1,:)-tmp(1:m-1,:);
Ix2=Ix(2:m+1,2:n+1).^2;
Iy2=Iy(2:m+1,2:n+1).^2;
Ixy=Ix(2:m+1,2:n+1).*Iy(2:m+1,2:n+1);
h=fspecial('gaussian',[7 7],2);
Ix2=filter2(h,Ix2);
Iy2=filter2(h,Iy2);
Ixy=filter2(h,Ixy);
Rmax=0;
R=zeros(m,n);
for i=1:m
for j=1:n
M=[Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)];
R(i,j)=det(M)-0.06*(trace(M))^2;
if R(i,j)>Rmax
Rmax=R(i,j);
end
end
end
re=zeros(m+2,n+2);
tmp(2:m+1,2:n+1)=R;
img_re=zeros(m+2,n+2);
img_re(2:m+1,2:n+1)=img;
for i=2:m+1
for j=2:n+1
if tmp(i,j)>0.02*Rmax &&...
tmp(i,j)>tmp(i-1,j-1) && tmp(i,j)>tmp(i-1,j) && tmp(i,j)>tmp(i-1,j+1) &&...
tmp(i,j)>tmp(i,j-1) && tmp(i,j)>tmp(i,j+1) &&...
tmp(i,j)>tmp(i+1,j-1) && tmp(i,j)>tmp(i+1,j) && tmp(i,j)>tmp(i+1,j+1)
img_re(i,j)=255;
end
end
end
img_re=mat2gray(img_re(2:m+1,2:n+1));
figure,imshow(img_re);
function re=get_coords(angle) %angle是边缘法线角度,返回法线前后两点
sigma=0.000000001;
x1=ceil(cos(angle+pi/8)*sqrt(2)-0.5-sigma);
y1=ceil(-sin(angle-pi/8)*sqrt(2)-0.5-sigma);
x2=ceil(cos(angle-pi/8)*sqrt(2)-0.5-sigma);
y2=ceil(-sin(angle-pi/8)*sqrt(2)-0.5-sigma);
re=[x1 y1 x2 y2];
end