1. Después de importar la imagen, procésela previamente, incluida la imagen en escala de grises, el filtrado, el resaltado de bordes y la binarización. Los métodos de detección de bordes incluyen: 'gaussiano', 'sobel', 'prewitt', 'laplaciano', 'log', 'average', 'unsharp', 'disk', 'motion'.
2. Utilice la función [H,theta,rho] = hough(f3,'RhoResolution', 0.2, 'Theta', -90:0.2:89) para transformar la imagen preprocesada y obtener la matriz H.
3. Utilice la función P=houghpeaks(H,5,'threshold', ceil(0.3*max(H(:)))) para obtener las posiciones de los 5 valores más altos en la matriz H, lo que significa obtener el los más largos que existen en la imagen original.5 líneas rectas.
4. Utilice la función líneas=houghlines(f3,theta,rho,P,'FillGap',20,'MinLength',40) para obtener los puntos finales de las cinco líneas rectas anteriores en la figura.
5. Después de filtrar los segmentos de línea cuya longitud y pendiente no coinciden con el carril real, dibuje una línea para mostrar el carril detectado.
F=imread('D:\Desktop\2.png');
f=rgb2gray(F);
f1=medfilt2(f,[9,9]); %中值滤波
H=fspecial('log');
f2=imfilter(f1,H); %突出边缘
thresh=graythresh(f2);
f3=imbinarize(f2,thresh); %二值化
figure(1),imshow(f3);
[H,theta,rho] = hough(f3,'RhoResolution', 0.2, 'Theta', -90:0.2:89);
figure(2),imshow(imadjust(rescale(H)),'XData',theta,'YData',rho,'InitialMagnification','fit');
title('Hough transform');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(gca,hot);
P=houghpeaks(H,5,'threshold', ceil(0.3*max(H(:))));
x = theta(P(:,2));
y = rho(P(:,1));
plot(x,y,'s','LineWidth',1.5,'Markersize',10,'color','green');
lines=houghlines(f3,theta,rho,P,'FillGap',20,'MinLength',40);
line_length_thred=40;
slope_thred=0.1;
figure(3),imshow(f3);
L= length(lines);
for k=1:L
xy= [lines(k).point1; lines(k).point2];
line_length=((xy(1,1)-xy(2,1))^2+(xy(1,2)-xy(2,2))^2)^0.5;
if line_length< line_length_thred
continue;
end
slope=(xy(1,2)-xy(2,2))/(xy(1,1)-xy(2,1));
if abs(slope)< slope_thred
continue;
end
line(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
end
La imagen binaria preprocesada es la siguiente:
Encuentre el valor máximo entre las matrices de 5 H después de una gran transformación:
Se puede observar que (rho, theta) tiene dos valores altos dentro del gráfico alrededor de (100, -50°) y (400,40°).
De acuerdo con la relación de coordenadas después de una gran transformación en matlab, se puede ver que (rho, theta) es (100, -50°), que es la línea del carril detectada a la derecha. (rho, theta) es (400, 40°), que es exactamente la línea del carril detectado a la izquierda.
Theta detecta valores altos en tres matrices H cercanas a -90° y 90°, lo que indica que se detectan líneas horizontales en la imagen.