Anda di halaman 1dari 12

[image processing]

February 4, 2012

HARRIS CORNER DETECTION ALGORITHM

Banyak ciri atau feature dari sebuah citra yang dapat digunakan sebagai representasi sebuah citra. Ciri ini bisa berupa tepi, sudut, warna, garis dan masih banyak yang lainnya. Pada artikel ini saya akan membahas bagaimana mendeteksi sudut (corner) yang terdapat pada sebuah citra. Algoritma yang digunakan adalah Harris Corner Detection. Harris Corner Detector diajukan oleh C. Harris dan M. Stephen pada Tahun 1988. Harris didasarkan pada moment matriks kedua yang digunakan untuk ekstraksi ciri. Ada 2 detektor sudut yang sering digunakan yakni Harris (Eropa) dan KLT (USA). Biasanya detektor sudut digunakan untuk aplikasi pada motion dan shape. Untuk kasus Harris sendiri, sudah banyak pengembangan yang dilakukan sehingga munculah teori Harris-Laplace, Harris-Affine dan lainnya. Dalam deteksi sudut menggunakan Harris, konvolusi dengan fungsi Gaussian merupakan langkah paling penting karena akan menentukan keseluruhan proses dan hasil akhir. Tapi justru ini yang membuat keseluruhan komputasi semakin besar karena proses yang dijalani adalah fungsi Gaussian dikalikan terlebih dahulu dengan piksel lalu dijumlahkan satu demi satu. Semakin besar mask Gaussian yang digunakan, semakin tinggi beban komputasi. Hal ini yang menjadi pendorong munculnya algoritma-algoritma terbaru yang memfasilitasi Harris dalam mendeteksi sudut. Sebagai contoh penggunaan Integral Image dan Box Filter dan lainnya. Ide dasar dari Harris Corner Detector dapat dipahami sebagai berikut:

A = jendela W digeser ke segala arah menghasilkan simpulan bagian flat dari objek B = jendela W digeser ke segala arah menghasilkan simpulan menyatakan bagian tepi dari objek C = jendela W digeser ke segala arah menghasilkan simpulan menyatakan sudut dari objek

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 1

[image processing]

February 4, 2012

Berdasarkan [3] Harris memiliki kelebihan yakni hasil deteksi nyaris tidak berubah untuk kasus: rotasi terhadap citra, penskalaan citra, variasi cahaya dan derau pada citra. Harris didasarkan pada autokorelasi lokal isyarat yang mana mengukur perubahan lokal dari isyarat dengan nilai delta tertentu (nilainya kecil) yang digeser ke arah berbeda. Autokorelasi ini memiliki rumus: , , = , + , +

dimana

menyatakan fungsi citra. ( , ) merupakan pergeseran yang dimaksud. + , + , + , ,

merupakan titik pada jendela W (fungsi gaussian) yang berpusat di (x,y), I(.,.)

Sementara itu, citra yang digeser dirumuskan dengan ekspansi Taylor yakni:

Dengan substitusi persamaan ke (2) ke persamaan (1) maka kita bisa menurunkan persamaan (1) seperti di bawah ini: , = , + , , +

= = =

, ,

, , ,

= = Misalkan dan ,

(3)

adalah nilai eigen dari C(x,y). Vektor eigen bisa berubah arah tapi nilai eigen dan ada tiga kondisi yang mungkin terpenuhi:

tidak berubah. Dengan memanfaatkan

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 2

[image processing]

February 4, 2012

Jika

dan

kecil maka hasil dari autokorelasi lokalnya adalah flat atau datar yang

menandakan intensitas dari region yang dilewati jendela W adalah konstan. Ini berarti hanya ada perubahan yang sangat kecil pada c(x,y) di arah manapun.

Ilustrasinya dapat dilihat pada gambar di bawah ini, dengan titik-titik warna biru merupakan distribusi pada sumbu x dan y. Jika digambarkan sumbu komponen principalnya maka nilai eigen semuanya kecil.

Jika salah satu dari nilai eigen besar dan yang lain kecil, maka hasil autokorelasi lokal berbentuk gundukan (ridge shaped) lalu pergeseran hanya dalam 1 arah (di sepanjang ridge) yang menyebabkan perubahan kecil di c(x,y) sedangkan perubahan cukup besar dalam arah tegak lurus. Ini menunjukkan yang terdeteksi adalah Tepi.

Ilustrasinya ditunjukkan oleh gambar di bawah ini.

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 3

[image processing]

February 4, 2012

Jika kedua nilai eigen besar maka yang terbentuk dari fungsi autokorelasi lokalnya adalah puncak yang tajam, pergeseran ke semua arah menghasilkan nilai yang besar. Ini menunjukkan Sudut (corner).

Ilustrasi dapat dilihat pada gambar di bawah ini.

C(x,y) memiliki formulasi: , = ,

Dimana w = window merupakan fungsi gaussian tapi bisa juga digunakan box filter atau jendela kotak biasa seperti: = 1 1 1 1 1 1 1 9 1 1 1

Ilustrasi dari jendela yang biasa digunakan adalah

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 4

[image processing]

February 4, 2012

Berikut ini dihadirkan langkah-langkah dalam membuat deteksi sudut menggunakan Harris Algorithm. Langkah-langkahnya adalah Compute x and y derivative of Image Dalam hal ini kita menggunakan kernel dari Prewitt Operator. Anda bisa menggunakan Sobel dan kernel lainnya. = = . = . = = . =

Compute product of derivatives at every pixel

Compute the sum of the products of derivatives at each pixel = =

Define at each pixel (x,y) the matrix ,

, ,

, ,

Compute the response of the detector at each pixel =

Threshold on value of R. Compute nonmax suppression. Program berdasarkan langkah-langkah di atas adalah
clear all; close all; clc; %% membaca citra filename='papan.jpg'; % filename='deer1.bmp'; I=imread(filename); [x,y,z]=size(I); if z>1 Ig=rgb2gray(I); else Ig=I; end %% %% Proses Corner Detection Ig=double(Ig);

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 5

[image processing]

February 4, 2012

sigma=2; rad=5; % Compute x and y derivatives of image dx=[-1 0 1; -1 0 1; -1 0 1]; dy=dx'; Ix=conv2(Ig,dx,'same'); Iy=conv2(Ig,dy,'same'); % Compute products of derivatives at every pixel Ix2=Ix.*Ix; Iy2=Iy.*Iy; Ixy=Ix.*Iy; % Compute the sums of the product of derivatives % at each pixel h=fspecial('gaussian',max(1,fix(6*sigma)),sigma); Sx2=conv2(Ix2,h,'same'); Sy2=conv2(Iy2,h,'same'); Sxy=conv2(Ixy,h,'same');

% Compute the response of the detector at each pixel k=0.04; % k=0.04 - 0.06 R=zeros(size(Ig)); for m=1:size(R,1) for n=1:size(R,2) % Define at each pixel matrix H=[Sx2(m,n),Sxy(m,n); Sxy(m,n),Sy2(m,n)]; % Compute the response of detector at each pixel R(m,n)=det(H)-k*trace(H).^2; % R(m,n)=(Sx2(m,n).*Sy2(m,n) - Sxy(m,n).^2)./(Sx2(m,n) + Sy2(m,n) + eps); end end % ambang=800; ambang=0.01*max(R(:)); % Threshold on value of R. Compute nonmax suppresion % Size of mask sze = 2*rad+1; % Grey-scale dilate mx = ordfilt2(R,sze^2,ones(sze)); % Find maxima R = (R==mx)&(R>ambang); [row,col] = find(R); imshow(I); hold on; points=[col row]; plot(points(:,1),points(:,2),'rp'); title('Detected Corner'); %%

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 6

[image processing]

February 4, 2012

Hasil eksekusi terhadap citra asli:

Contoh lain

Bentuk-bentuk penelitian lain Dalam artikel ini saya sertakan program untuk deteksi sudut berlandaskan Harris yang lalu dimodifikasi sesuai dengan penelitian mereka. # kasus 1
clear all; close all; clc;

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 7

[image processing]

February 4, 2012

%% membaca citra % filename='papan.jpg'; filename='deer1.bmp'; I=imread(filename); [x,y,z]=size(I); if z>1 Ig=rgb2gray(I); else Ig=I; end %% %% Proses Corner Detection Ig=double(Ig); sigma=2; rad=5; % Compute x and y derivatives of image dx=[-1 0 1; -1 0 1; -1 0 1]; dy=dx'; Ix=conv2(Ig,dx,'same'); Iy=conv2(Ig,dy,'same'); % Compute products of derivatives at every pixel Ix2=Ix.*Ix; Iy2=Iy.*Iy; Ixy=Ix.*Iy; % Compute the sums of the product of derivatives % at each pixel h=fspecial('gaussian',max(1,fix(6*sigma)),sigma); Sx2=conv2(Ix2,h,'same'); Sy2=conv2(Iy2,h,'same'); Sxy=conv2(Ixy,h,'same'); % Compute the response of the detector at each pixel k=0.04; % k=0.04 - 0.06 R=zeros(size(Ig)); % Compute the response of detector at each pixel R=(Sx2.*Sy2 - Sxy.^2)./(Sx2 + Sy2 + eps); ambang=800; % Threshold on value of R. Compute nonmax suppresion % Size of mask sze = 2*rad+1; % Grey-scale dilate mx = ordfilt2(R,sze^2,ones(sze)); % Find maxima R = (R==mx)&(R>ambang); [row,col] = find(R); imshow(I); hold on; points=[col row]; plot(points(:,1),points(:,2),'rp'); title('Detected Corner');

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 8

[image processing]

February 4, 2012

Hasil eksekusi adalah

# kasus 2

clear all; close all; clc; %% % filename='papan.jpg'; filename='deer1.bmp'; X= imread(filename); Info=imfinfo(filename); if Info.BitDepth>8 f=rgb2gray(X); end %% %% proses %compute prodects of derivatives at every pixel ori_im=double(f)/255; fx = [-2 -1 0 1 2]; Ix = filter2(fx,ori_im); fy = [-2;-1;0;1;2]; Iy = filter2(fy,ori_im); Ix2 = Ix.^2; Iy2 = Iy.^2; Ixy = Ix.*Iy; clear Ix; clear Iy;

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 9

[image processing]

February 4, 2012

h= fspecial('gaussian',[7 7],2); %problem#1 %compute the sums of the products of derivatives at each pixel. sx2 = filter2(h,Ix2); sy2 = filter2(h,Iy2); sxy = filter2(h,Ixy); height = size(ori_im,1); width = size(ori_im,2); result = zeros(height,width); R = zeros(height,width); %compute the response of the detector at each pixel. Rmax = 0; for i = 1:height for j = 1:width K=0.04; %problem#2 H2 = [sx2(i,j) sxy(i,j);sxy(i,j) sy2(i,j)]; R(i,j) = det(H2) - K*(trace(H2))^2; if(R(i,j) > Rmax) Rmax = R(i,j); end; end; end; %threshold on value of R. compute nonmax suppression. cnt = 0; for i = 2:height-1 for j = 2:width-1 %problem#3 nonmax-suppression if(R(i,j) > 0.1*Rmax) result(i,j) = 1; end; end; end; [posc, posr] = find(result == 1); imshow(ori_im) hold on; plot(posr,posc,'r+'); %% end

# kasus 3 (saya dapat dari internet)


% A. Ganoun load Imag I =double(frame); %**************************** imshow(frame); k = waitforbuttonpress;

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 10

[image processing]

February 4, 2012

point1 = get(gca,'CurrentPoint'); %button down detected rectregion = rbbox; %%%return figure units point2 = get(gca,'CurrentPoint');%%%%button up detected point1 = point1(1,1:2); %%% extract col/row min and maxs point2 = point2(1,1:2); lowerleft = min(point1, point2); upperright = max(point1, point2); ymin = round(lowerleft(1)); %%% arrondissement aux nombrs les plus proches ymax = round(upperright(1)); xmin = round(lowerleft(2)); xmax = round(upperright(2)); %*********************************** Aj=6; cmin=xmin-Aj; cmax=xmax+Aj; rmin=ymin-Aj; rmax=ymax+Aj; min_N=12;max_N=16; %%%%%%%%%%%%%%Intrest Points %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% sigma=2; Thrshold=20; r=6; disp=1; dx = [-1 0 1; -1 0 1; -1 0 1]; % The Mask dy = dx'; %%%%%% Ix = conv2(I(cmin:cmax,rmin:rmax), dx, 'same'); Iy = conv2(I(cmin:cmax,rmin:rmax), dy, 'same'); g = fspecial('gaussian',max(1,fix(6*sigma)), sigma); %%%%%% Gaussien Filter %%%%% Ix2 = conv2(Ix.^2, g, 'same'); Iy2 = conv2(Iy.^2, g, 'same'); Ixy = conv2(Ix.*Iy, g,'same'); %%%%%%%%%%%%%% k = 0.04; R11 = (Ix2.*Iy2 - Ixy.^2) - k*(Ix2 + Iy2).^2; R11=(1000/max(max(R11)))*R11; R=R11; ma=max(max(R)); sze = 2*r+1; MX = ordfilt2(R,sze^2,ones(sze)); R11 = (R==MX)&(R>Thrshold); count=sum(sum(R11(5:size(R11,1)-5,5:size(R11,2)-5)));

loop=0; while (((count<min_N)|(count>max_N))&(loop<30)) if count>max_N Thrshold=Thrshold*1.5; elseif count < min_N Thrshold=Thrshold*0.5; end R11 = (R==MX)&(R>Thrshold); count=sum(sum(R11(5:size(R11,1)-5,5:size(R11,2)-5))); loop=loop+1; end

R=R*0; R(5:size(R11,1)-5,5:size(R11,2)-5)=R11(5:size(R11,1)-5,5:size(R11,2)-5); [r1,c1] = find(R); PIP=[r1+cmin,c1+rmin]%% IP

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 11

[image processing]

February 4, 2012

%%%%%%%%%%%%%%%%%%%% Display Size_PI=size(PIP,1); for r=1: Size_PI I(PIP(r,1)-2:PIP(r,1)+2,PIP(r,2)-2)=255; I(PIP(r,1)-2:PIP(r,1)+2,PIP(r,2)+2)=255; I(PIP(r,1)-2,PIP(r,2)-2:PIP(r,2)+2)=255; I(PIP(r,1)+2,PIP(r,2)-2:PIP(r,2)+2)=255; end imshow(uint8(I))

Anda bisa menguji semua program yang ada. Semoga anda bisa mendapatkan detil yang anda butuhkan pada artikel ini.

@terima kasih

Sources:
[1] C. Harris and M.J. Stephens. A combined corner and edge detector. In Alvey Vision Conference, pages 147152, 1988. [2] H. Moravec. Obstacle avoidance and navigation in the real world by a seeing robot rover. Technical Report CMU-RI-TR-3, Carnegie-Mellon University, Robotics Institute, 1980. [3] C. Schmid, R. Mohr, and C. Bauckhage. Evaluation of interest point detectors. International Journal of Computer Vision, 37(2):151172, June 2000.

[janshendry@gmail.com{ee&it ugm, indonesia}]

Page 12