3.1.5.1. Hàm hough
Cú pháp.
[H, theta, rho] = hough(BW)
[H, theta, rho] = hough(BW,ParameterName,ParameterValue)
46
S d ng hàm houghđ xácăđ nhăđ ng trong nh. Hàm tr v ma tr n H, chính là ma tr n Bi năđổi Hough. Theta và Rho là các m ng giá tr c a rho và theta mƠăquaăđóăhƠmăhoughăt o nên ma tr n H.
Khi PrameterName lƠă„RhoResolution‟,ăc n ch đ nh m t giá tr th c vôăh ng nằm trong kho ng từ0 đ n norm(size(BW)). Khi PrameterName là ‘Theta’, thì giá trị chỉ định của nó là một vector các giá trị của theta
trong ma trận biến đổi Hough. Ví d : I = imread('circuit.tif'); rotI = imrotate(I,33,'crop'); BW = edge(rotI,'canny'); [H,theta,rho] = hough(BW); figure, imshow(imadjust(mat2gray(H)),[],'XData',theta,'YData',rho,... 'InitialMagnification','fit');
xlabel('\theta (degrees)'), ylabel('\rho'); axis on, axis normal, hold on;
colormap(hot) K t qu :
47
Hình 3.7:Dùng biến đổi Hough
3.1.5.2. Hàm houghpeaks
Cú pháp
peaks = houghpeaks(H, numpeaks)
peaks = houghpeaks(..., param1, val1, param2, val2)
Mô t
HƠmăxácăđ nhăđnh trong ma tr n H, numpeaks là m t giá tr vôăh ngăđ xácăđnh s l ng t iăđaăcácăđ nh, giá tr mặcăđ nh c a numpeaks là 1.
Hàm tr v giá tr peaks, là m t ma tr năQx2,ătrongăđóănằm trong kho ng giá tr từ0ăđ n numpeaks.
peaks = houghpeaks(..., param1, val1, param2, val2)
quyăđnh c th cặp tham s - giá tr . Các tham s đóălƠ:
Tham s Mô t
’Threshold’ Giá tr vôăh ngăkhôngăơmăxácăđ nh giá tr mà t iăđóăgiáătr
c aăHăđ căxemănh ălƠăđnh. Mặcăđnh là 0.5*max(H(:))
’NHoodSize’ Vécăt ăg m hai ph n t là s nguyênăd ngăl : [M N]. Xác
đnh khu v c lân c n xung quanh m iăđnh. Mặcăđ nh là giá tr l nhỏ nh t l năh năhoặc bằng size(H)/50.
48 Ví d : >> I = imread('circuit.tif'); BW = edge(imrotate(I,50,'crop'),'canny'); [H,T,R] = hough(BW); P = houghpeaks(H,2); imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit') ; xlabel('\theta'), ylabel('\rho'); axis on, axis normal, hold on;
plot(T(P(:,2)),R(P(:,1)),'s','color','white') K t qu :
Hình 3.8: Kết quả dùng houghpeaks
3.1.5.3. Hàm houghlines
Cú pháp
lines = houghlines(BW, theta, rho, peaks)
lines = houghlines(..., param1, val1, param2, val2)
Mô t
Hàm lines = houghlines(BW, theta, rho, peaks) trích xu tă đo năthẳngătrongă nhănh ăphơnăBWăd aăvƠoăbi năđổiăHough.
49
Hàm lines = houghlines(..., param1, val1, param2,
val2)cóăxácăđnh các cặp giá tr - tham s c th :
Tham s Mô t
’FillGap’ Giá tr th că d ngă xácă đ nh kho ng cách gi aă haiă đo n
thẳng liên quanăđ n bi năđổi Hough. Khi kho ng cách gi a haiă đo n thẳng nhỏ h nă giáă tr quyă đ nh, thì hàm houghlines s k t h p chúng thành m tă đo n thẳng duy nh t. Giá tr mặcăđ nh là 20.
’MinLength’ Giá tr th căd ng,ăxácăđ nhăxemăđo n thẳngăxácăđ nhăđ c
nên gi hay bỏ đi.ă Đo n thẳng ng n nhỏ h nă giáă tr quy đ nhăđ c bỏđi.ăGiáătr mặcăđnh là 40.
Ví d : I = imread('circuit.tif'); rotI = imrotate(I,33,'crop'); BW = edge(rotI,'canny'); [H,T,R] = hough(BW); imshow(H,[],'XData',T,'YData',R,... 'InitialMagnification','fit'); xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:)))); x = T(P(:,2)); y = R(P(:,1));
plot(x,y,'s','color','white'); % Find lines and plot them
lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7); figure, imshow(rotI), hold on
max_len = 0;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green'); % Plot beginnings and ends of lines
50
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
% Determine the endpoints of the longest line segment len = norm(lines(k).point1 - lines(k).point2);
if ( len > max_len) max_len = len; xy_long = xy; end
end
% highlight the longest line segment
plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','blue'); K t qu :
Hình 3.9:Kết quả sử dụng hàm houghlines