找回密码
 注册
关于网站域名变更的通知
查看: 450|回复: 1
打印 上一主题 下一主题

在Matlab中实现Hough变换检测直线

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-27 11:10 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

5 f$ M, t+ E; v4 _; {( LHough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。' R3 ]% |( |- G$ |$ s
下面给出在matlab中用Hough变化检测直线的实现,文章末尾提供相关资源的下载。
0 w% \4 t' |* b7 ]# i* L其中先用log(laplacian of gaussian)算子检测图像边界:. r$ m7 s" y  f: ]! L

, ?2 a% V# P" Y' R01        sourcePic=imread('D: matlab程序Hough变换检测直线curve.bmp');: ^, [6 j- E0 x8 l5 l$ Z
02        [height,width,l]=size(sourcePic);8 c. i1 j) P( x) m8 `
03        grayPic=zeros(height,width);
9 m5 I6 ~+ f9 K% o- ?04        for i=1:height %转换成灰度图象# Q8 w, U7 v4 |1 ~" j
05            for j=1:width
3 }7 S) H0 v9 y: Z06                grayPic(i,j)=(sourcePic(i,j,1) sourcePic(i,j,2) sourcePic(i,j,3))/3;
) T) A7 r; t$ B2 C  q. d07            end0 Q. l) L4 F4 Q- P  s
08        end) Z1 A( d/ U6 c' w0 c, I
09        logNum=0; %log算子的计算值9 |7 r5 g  V; D
10        edgePic=zeros(height,width);1 l8 Y" A4 t/ n9 F# t& D  g
11        for i=3:height-2 %log算子提取边界: d0 G; i; j4 ~2 M
12            for j=3:width-2
* x; n3 v) K. X6 ]. d7 d+ }4 a13                logNum=16*grayPic(i,j)-grayPic(i-2,j)-grayPic(i-1,j-1)-2*grayPic(i-1,j)-grayPic(i-1,j 1)-grayPic(i,j-2)-2*grayPic(i,j-1)-2*grayPic(i,j 1)-grayPic(i,j 2)-grayPic(i 1,j-1)-2*grayPic(i 1,j)-grayPic(i 1,j 1)-grayPic(i 2,j);
% ^$ o$ ]; B; b  D14                if(logNum > 0)
+ T  a. Z+ d. H2 s- R3 }% T4 C15                    edgePic(i,j)=255;; _) n; Z1 p+ p2 q
16                else2 d: v/ w' H/ \7 |5 K7 H
17                    edgePic(i,j)=0;
5 R1 R' _0 q. k18                end
4 F3 E  ]; Z& c9 Y19            end9 K5 H: S( f% Q- a( m2 M2 D) k
20        end: Q- I8 {2 e. j- N( c* l) v5 x
21        % Hough变换检测直线,g(x)=(a,p)为边界点对应的平面
/ E& }/ B  ]! h. B7 Q22        ma=180; %a的值为0到180度
7 d( H  k8 Q: B4 y23        mp=round(sqrt(height^2 width^2)); %对应P的最大值
! M  M1 Q) \8 T, M+ ]0 \+ ~24        npc=zeros(ma,2*mp); %用于记录(a,p)对应的点的个数$ M/ I9 n- B0 V; z/ q: K8 V
25        npp=cell(ma,2*mp); %用于记录(a,p)对应的点的坐标2 Q8 x' h2 I- S/ _) M
26        for i=1:height %计算(a,p)的值,并做相应记录
( ?- u% N& u) a: ]# K27            for j=1:width: h1 |. K2 u/ V9 D: a
28                if(edgePic(i,j)==255)( e* b5 T: \, s: E! m6 }
29                    for k=1:ma* e0 i3 u  R! C, o  W
30                        p = round(i*cos(pi*k/180) j*sin(pi*k/180));
- b3 R6 C' A7 H  z( F7 D) O31                        if(p > 0)$ w& l1 r0 }  t2 j- y. V+ x2 ^) A8 M
32                            %npc(k,mp*2)=npc(k,mp*2) 1;
5 Q' h8 w  j5 a  H5 n33                            %npp{k,mp*2}=[npp{k,mp*2},[i,j]'];7 G/ k  u& c! ]; z2 b. O6 x0 ]/ y& G
34                             10.01.05修正; R. v" P, F, f) b
35                            npc(k,mp p)=npc(k,mp p) 1;
( F( i) [6 X  [) H8 M& p- s& z# W36                            npp{k,mp p}=[npp{k,mp p},[i,j]'];; r4 {/ J: a& [) S% P
37                        else1 c  D; r  l  _  m& d; M8 H
38                            ap=abs(p) 1;
8 S% }4 [$ j2 v) R2 m39                            npc(k,ap)=npc(k,ap) 1;
4 s4 I3 V9 k' Z- o$ C40                            npp{k,ap}=[npp{k,ap},[i,j]'];
8 _8 u: V$ l; m41                        end$ X- O2 F9 z- a
42                    end# q+ }. b$ |6 ^7 O
43                end$ |) D: H, y3 ?1 l. G: @) [' z
44            end
  j. D# N" j1 D45        end
2 Y, K$ o% ]. H46        for i=1:ma %根据(a,p)对应的点的个数,用红色标出相应直线
7 M# E  I, V! Z1 ~, Q- e; k* l47            for j=1:mp*2* L' y, d0 m( n+ K5 d/ W
48                if(npc(i,j) > 90) %将提取直线的阈值设为904 \# l/ C; n' u! c8 F- s- \8 ~
49                    lp=npp{i,j};0 \, `! E5 l) x' B% g$ C# R& C  q
50                    for k=1:npc(i,j); [1 I6 r$ S$ U
51                        sourcePic(lp(1,k),lp(2,k),1)=255;% E( m8 q) n) q. ]/ G( b
52                        sourcePic(lp(1,k),lp(2,k),2)=0;$ ]7 ~  H6 a* p
53                        sourcePic(lp(1,k),lp(2,k),3)=0;. O& P9 `' b# v0 F: D' r& a) J
54                    end5 p9 v1 G1 H$ c0 b: B
55                end
. |5 F9 t! N) l. y4 ?2 H! Y% r8 S. H56            end
0 R, R5 M6 \; l57        end
) F* L7 I1 T/ G6 V. g+ q5 S1 ]58        figure,imshow(sourcePic);

该用户从未签到

2#
发表于 2020-4-27 13:24 | 只看该作者
在Matlab中实现Hough变换检测直线
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 12:15 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表