val给点的值,则它们被合并为一条直线。
实验程序与实验结果如下:
%canny算子边缘检测
clear all;
I1=imread('F:\robot\Images\sniper.jpg');
I=rgb2gray(I1);% 彩色图像灰度化
imshow(I1);
title('原始图像');
BW1= edge(I,'Canny',0.4,0.5) ; %edge调用Canny为检测算子判别阈值为0.5 figure,imshow(BW1);
title( '阈值为0.4,sigma值为0.5的Canny算子边缘检测图像');
BW2= edge(I,'Canny',0.4,0.8) ; %edge调用Canny为检测算子判别阈值为0.8 figure,imshow(BW2);
title( '阈值为0.4,sigma值为0.8的Canny算子边缘检测图像');
BW20= edge(I,'Canny',0.4,1) ; %edge调用Canny为检测算子判别阈值为1 figure,imshow(BW20);
title( '阈值为0.4,sigma值为1的Canny算子边缘检测图像');
BW21= edge(I,'Canny',0.4,1.5) ; %edge调用Canny为检测算子判别阈值为1.5 figure,imshow(BW21);
title( '阈值为0.4,sigma值为1.5的Canny算子边缘检测图像');
BW22= edge(I,'Canny',0.4,2) ; %edge调用Canny为检测算子判别阈值为2 figure,imshow(BW22);
title( '阈值为0.4,sigma值为2的Canny算子边缘检测图像');
%Hough变换检测直线程序
rotI=I;
BW=edge(rotI,'canny',0.4,1.5); %用canny算子提取图像边缘
[H,T,R]=hough(BW); %对图像进行Hough变换
figure;
imshow(H,[ ],'XData',T,'YData',R,...
'InitialMagnification','fit');
title('峰值提取效果');
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');
%找出对应的直线边缘
lines=houghlines(BW,T,R,P,'FillGap',58,'MinLength',5);
figure,imshow(BW),
title('直线标记结果');
hold on
max_len=0;