在一幅图像中自动检测直线并输出交点
特征提取是计算机视觉中的底层任务,在很多场合都有应用,如何检测图像中的直线呢,Hough变换很好用。
处理代码如下,包括3个主要步骤:
Step1. 图像预处理
Step2. Hough变换,提取峰值参数,绘出提取的直线
Step3. 求解两直线交点
Matlab代码如下:
% automatically detectthe intersection(cross) of two lines
% step 1. preprocessing:
% step 2. Hough transform
% step 3. computer thecross coordinate by two equations of the two lines
% Read the model images.
I1 = rgb2gray(imread('cutROI1.png'));
figure(1), imshow(I1);
% step1. preprocessing the original image to binary image before doing Hough
% choose a proper edge operator, including 'sobel', 'prewitt', 'canny', 'roberts', it's problem-dependent
BW = edge(I1,'sobel');
% step 2. Basic Houghtransform
[H,T,R] = hough(BW);
figure(2)
imshow(H,[],'XData',T,'YData',R, 'InitialMagnification','fit');
xlabel('\theta')
ylabel('\rho')
axis on, axis normal, hold on;
% extract the peaks (rho,theta) of hough result
P = houghpeaks(H, 2, 'threshold',ceil(0.2*max(H(:))));
x = T(P(:,2)) %theta
y = R(P(:,1)) % rho
plot(x, y, 's', 'color', 'blue')
% extract the two lines in the searchedpeaks
% highlight the longestline segment overlapped in the input image
lines = houghlines(I1, T, R, P,'FillGap', 20, 'MinLength', 8);
figure(3)
imshow(I1), hold on
max_len = 0; count =0;
for k = 1:length(lines)
xy &#