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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
8 s% z% K, X" S6 \
Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。6 A) Y7 {5 V, Q2 t8 s
下面给出在matlab中用Hough变化检测直线的实现,文章末尾提供相关资源的下载。
) i7 W* P5 v% d其中先用log(laplacian of gaussian)算子检测图像边界:
( k$ y$ E9 I! X  p& c$ F
, t$ |3 T, }' Q2 `. [; w; R01        sourcePic=imread('D: matlab程序Hough变换检测直线curve.bmp');
9 h2 N8 k( D3 G: B6 @3 E6 b02        [height,width,l]=size(sourcePic);
/ B; K* \0 A2 s3 \" T03        grayPic=zeros(height,width);
8 k1 E& K7 q: H04        for i=1:height %转换成灰度图象; A7 p7 Q! \# x6 _# W" m
05            for j=1:width
+ e: N8 G0 t8 M, J06                grayPic(i,j)=(sourcePic(i,j,1) sourcePic(i,j,2) sourcePic(i,j,3))/3;2 t4 U8 G4 @: f  x8 S& C8 p
07            end" j5 I+ E8 E1 l/ V: g. b3 T3 V) s
08        end
& f7 m4 _+ S) w) i$ X* r1 C09        logNum=0; %log算子的计算值. U0 a: C8 ], Z
10        edgePic=zeros(height,width);
6 e6 W4 |6 q5 H( q7 {4 _11        for i=3:height-2 %log算子提取边界' [8 M5 b0 y$ J2 `
12            for j=3:width-2
! ~$ B3 a8 m& Q6 l& }6 n! F13                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);& H  p' z' C( i/ ]7 b3 W5 h
14                if(logNum > 0)+ P# w! Z: D3 [
15                    edgePic(i,j)=255;( x7 U8 w" S4 Z. L5 W: i2 i
16                else2 k8 {9 ~& G" G% t6 \$ m7 ^
17                    edgePic(i,j)=0;
  Q# g1 R# S7 o! W7 }; O% E6 v( i18                end
. I+ ?" N$ h# j3 H; ]19            end) J4 m) _8 Z* X
20        end
. O9 B0 l0 I* o" i' [21        % Hough变换检测直线,g(x)=(a,p)为边界点对应的平面0 y8 G  B. H+ B/ J- g
22        ma=180; %a的值为0到180度/ [! W' F  ^5 F9 |1 D, A- h5 i) A
23        mp=round(sqrt(height^2 width^2)); %对应P的最大值3 d7 Z2 p# {/ Y6 @
24        npc=zeros(ma,2*mp); %用于记录(a,p)对应的点的个数
4 H2 ]5 t8 D8 Y0 F- V25        npp=cell(ma,2*mp); %用于记录(a,p)对应的点的坐标
6 }7 _( g+ ~9 `* }26        for i=1:height %计算(a,p)的值,并做相应记录
3 n: B# e' b9 H7 y0 o4 s. X4 W27            for j=1:width
! Q0 h- ?: N8 |' @- h6 C5 f* ], |. }28                if(edgePic(i,j)==255)
' D/ Y! m7 N4 [1 V2 M1 j; c/ y29                    for k=1:ma
  r( j4 V& d+ G' J30                        p = round(i*cos(pi*k/180) j*sin(pi*k/180));! k9 }3 X! r2 p0 v. {5 ^: |9 i
31                        if(p > 0)2 X4 I7 q  S/ ^( P* e& f. ^, Z8 X
32                            %npc(k,mp*2)=npc(k,mp*2) 1;
& \* d3 o# V& u3 u4 ^33                            %npp{k,mp*2}=[npp{k,mp*2},[i,j]'];* J' f5 ]3 H: e( X
34                             10.01.05修正
1 }. y8 I7 z3 J1 n/ q5 O35                            npc(k,mp p)=npc(k,mp p) 1;4 _+ o/ u/ |  B" j1 S9 Q
36                            npp{k,mp p}=[npp{k,mp p},[i,j]'];/ [$ J; d. Q+ g& J' w( k8 _1 [3 Y1 U
37                        else
2 g& ?$ N/ N* c1 }6 {5 q38                            ap=abs(p) 1;
% }- P6 u- x5 i9 l39                            npc(k,ap)=npc(k,ap) 1;
$ n( q% f  g. R6 N8 H40                            npp{k,ap}=[npp{k,ap},[i,j]'];2 j! Y8 L) k) v5 Y! c4 Y. D
41                        end8 |* ^$ B$ s; q
42                    end1 j2 r2 ?: h9 `
43                end
! m$ ]$ `& o) q1 |, N44            end
+ i. g  M: e7 q* Q$ X3 s; ^7 M2 Z) o* w45        end- k0 K' M: \1 ~
46        for i=1:ma %根据(a,p)对应的点的个数,用红色标出相应直线
/ b# G) X" B0 B5 T  K/ s47            for j=1:mp*25 b3 t  \3 m9 U; _6 Z; I& I0 ~8 N
48                if(npc(i,j) > 90) %将提取直线的阈值设为90+ o# t/ R3 J; J
49                    lp=npp{i,j};
2 p5 e: P, |+ E. q: |! T50                    for k=1:npc(i,j)
& ~0 T6 Y- V  M$ k51                        sourcePic(lp(1,k),lp(2,k),1)=255;
2 F( Z3 F8 s* U9 h52                        sourcePic(lp(1,k),lp(2,k),2)=0;' _- `# }* H6 u) L1 V6 I, c/ m
53                        sourcePic(lp(1,k),lp(2,k),3)=0;
! N" A% j1 ^# B  x0 O54                    end: @$ _0 V1 x: a; P" N
55                end8 x: b$ I9 ]) h4 v" |  G% q0 }
56            end5 T4 c- T1 Q- T6 w0 X7 R6 }  w
57        end
& E6 L) g7 ?' z/ |58        figure,imshow(sourcePic);

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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