技术蛀虫

导航

快速霍夫变换

 1 01.% 入口图像为 BW,出口图像为f  
 2 02.%optimize from main_optimize, merely select 2 lines, one has positive  
 3 03.%slope,the other has negative slope  
 4 04.clear all,close all  
 5 05.BW=imread('D:\Images\NEW\img4b9faef664e03.jpg');  
 6 06.figure,imshow(BW);  
 7 07.  
 8 08.BW=rgb2gray(BW);  
 9 09.%thresh=[0.01,0.17];  
10 10.thresh=[0.01,0.10];  
11 11.sigma=2;%定义高斯参数  
12 12.f = edge(double(BW),'canny',thresh,sigma);  
13 13.figure,subplot(121);  
14 14.imshow(f,[]);  
15 15.title('canny Edge Detect Result');  
16 16.  
17 17.[H, theta, rho]= hough(f, 0.1);%cos(theta)*x+sin(theta)*y=rho  
18 18.%imshow(theta,rho,H,[],'notruesize'),axis on,axis normal  
19 19.%xlabel('\theta'),ylabel('rho');  
20 20.  
21 21.[r,c]=houghpeaks(H,10);  
22 22.hold on  
23 23.  
24 24.  
25 25.lines=houghlines(f,theta,rho,r,c);  
26 26.  
27 27.subplot(122);  
28 28.imshow(f,[]),title('Hough Transform Detect Result'),hold on  
29 29.nlind=0;%new line index  
30 30.st=1;  
31 31.%%%%%%%%%求斜率%%%%%%%%%%%%  
32 32.for k=1:length(lines)  
33 33.    %xy=[lines(k).point1;lines(k).point2];  
34 34.    xielv(k)=(lines(k).point2(1)-lines(k).point1(1))/(lines(k).point2(2)-lines(k).point1(2)+0.0001)  
35 35.end  
36 36.  
37 37.%%%%%%%%%将相同斜率的直线连起来%%%%%%%%%%%%  
38 38.k=1;  
39 39.while(k<=length(lines))  
40 40.    if(k~=length(lines))  
41 41.        k=k+1;  
42 42.    end  
43 43.    while(abs(xielv(k)-xielv(k-1))<0.0001)  
44 44.        k=k+1;  
45 45.        if(k>length(lines))  
46 46.            break;  
47 47.        end  
48 48.    end  
49 49.  
50 50.    if(abs(xielv(k-1))<0.05||abs(xielv(k-1))>=10)%eliminate horizontal and vertical lines,防治水平线和楼房  
51 51.        st=k;  
52 52.        if(k~=length(lines))  
53 53.            continue;  
54 54.        end  
55 55.    end  
56 56.      
57 57.    if(st==length(lines)&&k==st)  
58 58.        if(abs(xielv(k))>0.05&&abs(xielv(k))<10)  
59 59.            nlind=nlind+1;  
60 60.            newlines(nlind)=lines(st);  
61 61.            newlines(nlind).point2=lines(k).point2;  
62 62.            newxy=[newlines(nlind).point1;newlines(nlind).point2];  
63 63.            plot(newxy(:,2),newxy(:,1),'LineWidth',4,'Color',[.6 1.0 .8]);  
64 64.        end  
65 65.        break;  
66 66.    end  
67 67.  
68 68.    %end=k-1,start=st; draw line  
69 69.    nlind=nlind+1;  
70 70.    newlines(nlind)=lines(st);  
71 71.    newlines(nlind).point2=lines(k-1).point2;  
72 72.    newxy=[newlines(nlind).point1;newlines(nlind).point2];  
73 73.    plot(newxy(:,2),newxy(:,1),'LineWidth',4,'Color',[.6 1.0 .8]);  
74 74.  
75 75.    st=k;  
76 76.end  
77 77.  
78 78.fprintf('%d lines are detected in sum.\n',nlind); 

 

posted on 2012-06-19 16:24  技术蛀虫  阅读(367)  评论(0编辑  收藏  举报