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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
- k3 j4 f& `# E4 C1 I; @
Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。- E6 F( A% ]& {, P
下面给出在matlab中用Hough变化检测直线的实现,文章末尾提供相关资源的下载。
5 j+ i0 ]6 r- g; s! I9 h其中先用log(laplacian of gaussian)算子检测图像边界:4 |0 _8 J2 }, j3 O( ?% {
) x% k# p) K8 L  p. R% r' B* Z) }
01        sourcePic=imread('D: matlab程序Hough变换检测直线curve.bmp');& h6 ]1 G  m8 j4 {
02        [height,width,l]=size(sourcePic);
. U7 f% ^: y7 ~3 B03        grayPic=zeros(height,width);
$ u6 o0 J. w. [0 r* q04        for i=1:height %转换成灰度图象1 Z% K+ z+ a" {' }9 `5 c
05            for j=1:width7 b9 `# ?+ z5 A, p2 n
06                grayPic(i,j)=(sourcePic(i,j,1) sourcePic(i,j,2) sourcePic(i,j,3))/3;
3 o! ~# s5 E( f) @1 M; `07            end7 T: _/ r0 |1 y
08        end
5 {* {& k$ h: c& y09        logNum=0; %log算子的计算值0 W6 ]: o6 p, G1 z" W7 E2 b' z
10        edgePic=zeros(height,width);
& D' N; m2 V7 C* ~, z  z11        for i=3:height-2 %log算子提取边界- q7 p3 _& d( Y- _6 [7 J
12            for j=3:width-2
' {9 A* [0 |( Q: B) d7 H13                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);5 B2 n; K7 H5 S* [; g; Z' F3 Q9 w5 u
14                if(logNum > 0)4 T, b( Y5 z' \3 M& c  g
15                    edgePic(i,j)=255;' @5 S, O$ {+ O
16                else2 {+ x, m4 I( X
17                    edgePic(i,j)=0;) Z4 P+ _4 ]1 _" Q; q) m1 E1 g
18                end
) w. e) J0 O2 c+ r19            end
- @4 B# W& p0 c9 B# i4 ^* }) }2 R20        end
1 S2 f: t! c$ S& g- e7 }. d1 E21        % Hough变换检测直线,g(x)=(a,p)为边界点对应的平面0 s- ~, \! j# {  G9 i  ]
22        ma=180; %a的值为0到180度
, K1 ^  @( z  P6 D$ \23        mp=round(sqrt(height^2 width^2)); %对应P的最大值
3 u; `( z$ J: P24        npc=zeros(ma,2*mp); %用于记录(a,p)对应的点的个数
3 L* u$ g7 @! L( u  V  v( p25        npp=cell(ma,2*mp); %用于记录(a,p)对应的点的坐标: i' s# \( W7 w4 M& h5 H$ n: v
26        for i=1:height %计算(a,p)的值,并做相应记录
) H" `8 h4 G: _  s27            for j=1:width
4 m+ v4 E% x* V1 L28                if(edgePic(i,j)==255)
5 V, n9 z% B  ^$ B  @9 ]29                    for k=1:ma
8 N; \. ~  o& h. I30                        p = round(i*cos(pi*k/180) j*sin(pi*k/180));4 H# k% ~; G4 r2 Y& ^4 i! f
31                        if(p > 0)
4 K- V2 h  Y8 B$ A  f% D32                            %npc(k,mp*2)=npc(k,mp*2) 1;
5 n4 d4 n. C5 y% x# V4 p33                            %npp{k,mp*2}=[npp{k,mp*2},[i,j]'];( X4 F  d8 o: p- \% I
34                             10.01.05修正
# p! t# t. a; X, f% z, v- v35                            npc(k,mp p)=npc(k,mp p) 1;
( M5 I+ Y, k0 Z: [. N; K! R36                            npp{k,mp p}=[npp{k,mp p},[i,j]'];
. [8 I/ E. @0 b% I" W" N1 }/ F37                        else6 K- F! t% h4 ^% D( U4 p8 g
38                            ap=abs(p) 1;
6 X* B" M, y6 q6 T( A39                            npc(k,ap)=npc(k,ap) 1;' }3 C5 v7 T9 E" ?* l8 T/ @
40                            npp{k,ap}=[npp{k,ap},[i,j]'];
+ l6 ]! O6 o: y5 p: V+ ?41                        end
- f! W% }, I: i. d. X( B4 r/ K42                    end
" A* @' d- z  F( P0 o! v- ^9 v43                end& K4 z9 K0 `0 i, F' O5 U
44            end
+ d/ f, S7 S7 n/ s3 z. |& N5 @# g45        end! V0 r- p% r1 D5 h
46        for i=1:ma %根据(a,p)对应的点的个数,用红色标出相应直线
2 j, p# [- A+ t; a3 V! y1 N& H47            for j=1:mp*2. A( N% _+ W( _2 N
48                if(npc(i,j) > 90) %将提取直线的阈值设为90% J5 I6 u# D0 Z7 W( I
49                    lp=npp{i,j};) l+ G8 j  T8 z* ]
50                    for k=1:npc(i,j)
. }& O$ |* H0 T3 R) D8 p- ^51                        sourcePic(lp(1,k),lp(2,k),1)=255;5 Y9 l* J* _2 W. U* c
52                        sourcePic(lp(1,k),lp(2,k),2)=0;
) ~  ?1 U0 }# K2 V9 p) b53                        sourcePic(lp(1,k),lp(2,k),3)=0;
2 M6 Q7 F# d( f5 `7 S' h+ H4 P% }54                    end
9 y3 Z: Z1 _# t  u5 |- D4 ~# m/ p% S55                end
' [2 q* f$ W7 Y5 y" u: Z56            end
1 N  o( V2 O* ]) z; k( k57        end2 [4 v: \1 l" K6 ~/ k, Y& S; Q
58        figure,imshow(sourcePic);

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-26 01:33 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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