Matlab实现霍夫变换_优化版

来源:互联网 发布:员工数据库设计 编辑:程序博客网 时间:2024/05/02 17:01

在上一篇博客中发现经过霍夫变换检测出的直线有可能因为车辆挡住路沿等原因断开,形成线段,这样就不好了,因为检测道路是要找直线焦点。

Thus it is necessary to combine 相同斜率的直线 and connect them.

本代码提供了matlab下求取经过霍夫变换的直线斜率,并将其联合,代码见下方,实验结果见文末。


% 入口图像为 BW,出口图像为f%optimize from main_optimize, merely select 2 lines, one has positive%slope,the other has negative slopeclear all,close allBW=imread('D:\Images\NEW\img4b9faef664e03.jpg');figure,imshow(BW);BW=rgb2gray(BW);%thresh=[0.01,0.17];thresh=[0.01,0.10];sigma=2;%定义高斯参数f = edge(double(BW),'canny',thresh,sigma);figure,subplot(121);imshow(f,[]);title('canny Edge Detect Result');[H, theta, rho]= hough(f, 0.1);%cos(theta)*x+sin(theta)*y=rho%imshow(theta,rho,H,[],'notruesize'),axis on,axis normal%xlabel('\theta'),ylabel('rho');[r,c]=houghpeaks(H,10);hold onlines=houghlines(f,theta,rho,r,c);subplot(122);imshow(f,[]),title('Hough Transform Detect Result'),hold onnlind=0;%new line indexst=1;%%%%%%%%%求斜率%%%%%%%%%%%%for k=1:length(lines)    %xy=[lines(k).point1;lines(k).point2];    xielv(k)=(lines(k).point2(1)-lines(k).point1(1))/(lines(k).point2(2)-lines(k).point1(2)+0.0001)end%%%%%%%%%将相同斜率的直线连起来%%%%%%%%%%%%k=1;while(k<=length(lines))    if(k~=length(lines))        k=k+1;    end    while(abs(xielv(k)-xielv(k-1))<0.0001)        k=k+1;        if(k>length(lines))            break;        end    end    if(abs(xielv(k-1))<0.05||abs(xielv(k-1))>=10)%eliminate horizontal and vertical lines,防治水平线和楼房        st=k;        if(k~=length(lines))            continue;        end    end        if(st==length(lines)&&k==st)        if(abs(xielv(k))>0.05&&abs(xielv(k))<10)            nlind=nlind+1;            newlines(nlind)=lines(st);            newlines(nlind).point2=lines(k).point2;            newxy=[newlines(nlind).point1;newlines(nlind).point2];            plot(newxy(:,2),newxy(:,1),'LineWidth',4,'Color',[.6 1.0 .8]);        end        break;    end    %end=k-1,start=st; draw line    nlind=nlind+1;    newlines(nlind)=lines(st);    newlines(nlind).point2=lines(k-1).point2;    newxy=[newlines(nlind).point1;newlines(nlind).point2];    plot(newxy(:,2),newxy(:,1),'LineWidth',4,'Color',[.6 1.0 .8]);    st=k;endfprintf('%d lines are detected in sum.\n',nlind);



实验结果:

原图:


未优化的霍夫变换:


优化后:


原创粉丝点击