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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
8 Z* M# _3 I) g/ S- W
Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。6 @0 H" m* D6 W: q1 ^2 o
下面给出在matlab中用Hough变化检测直线的实现,文章末尾提供相关资源的下载。( ~; U7 K8 [5 i; n
其中先用log(laplacian of gaussian)算子检测图像边界:* b( P6 d4 V2 q8 v8 e, b' g
7 V! `; |, u3 D$ p
01        sourcePic=imread('D: matlab程序Hough变换检测直线curve.bmp');
0 g4 ^+ h3 T" X2 F4 O3 M% Q+ d02        [height,width,l]=size(sourcePic);5 W8 U) L- v" U
03        grayPic=zeros(height,width);
6 [! ~, U+ w  A8 t6 ]( ~; T" F( w, I# e04        for i=1:height %转换成灰度图象
: q7 Q9 }2 x4 L) }  q05            for j=1:width, H' a# P  e! @6 Q+ t+ m! j
06                grayPic(i,j)=(sourcePic(i,j,1) sourcePic(i,j,2) sourcePic(i,j,3))/3;6 p/ M- t% f- }' J. N
07            end
# F, H0 @7 T. s" G$ ?: N3 \08        end$ E$ D" R+ K2 y# T( q. ]$ E
09        logNum=0; %log算子的计算值
( ~3 y2 b2 v0 q2 }7 J10        edgePic=zeros(height,width);+ c/ j- I  b2 R/ E$ y# U$ _
11        for i=3:height-2 %log算子提取边界9 k  B8 O' U2 |. M
12            for j=3:width-2
" v, G& M. U+ x+ s13                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);
3 H/ Z( c# q2 _! ^  O5 @8 N14                if(logNum > 0)3 e6 @! m0 p: y3 J8 K+ h$ H7 K, }
15                    edgePic(i,j)=255;
3 g. {8 y; \/ K6 N16                else
4 A+ x( B# i$ o* z17                    edgePic(i,j)=0;+ ]7 r8 D' n: `4 G( A
18                end0 d* `( L1 |1 Q# i- b* }4 {
19            end
) T" y! a8 a, D' M& |% p20        end
  T2 s( w$ ?3 ?, c. f! u' X2 ?21        % Hough变换检测直线,g(x)=(a,p)为边界点对应的平面4 b, z2 l9 M. q: m) i- \! ^  q# q
22        ma=180; %a的值为0到180度% u# E( n8 D) Q+ r$ I! q
23        mp=round(sqrt(height^2 width^2)); %对应P的最大值
( S9 A8 l2 ]7 R+ L5 @. i7 N( `24        npc=zeros(ma,2*mp); %用于记录(a,p)对应的点的个数, T# v; m4 l: j
25        npp=cell(ma,2*mp); %用于记录(a,p)对应的点的坐标6 c, t0 p! @$ |4 K
26        for i=1:height %计算(a,p)的值,并做相应记录
; n8 K' X8 Z; p4 s8 }; z7 q27            for j=1:width
  y) _& @; z% b$ s3 A- H28                if(edgePic(i,j)==255)) @. b* J/ a3 v
29                    for k=1:ma. _7 u8 N+ r4 W! W
30                        p = round(i*cos(pi*k/180) j*sin(pi*k/180));
% S& b% z4 s6 v) Z$ K  Y; S31                        if(p > 0)
( ]! U. k+ V0 o. R: y32                            %npc(k,mp*2)=npc(k,mp*2) 1;
! ^. p- w: C) N' K# ]/ Y5 l33                            %npp{k,mp*2}=[npp{k,mp*2},[i,j]'];
7 R8 K, x' |# w# @6 f" W" O# E34                             10.01.05修正
0 s6 d( q2 m( o7 |: l5 a! k3 l35                            npc(k,mp p)=npc(k,mp p) 1;
& U4 w) l; c" S( G3 @36                            npp{k,mp p}=[npp{k,mp p},[i,j]'];
0 n; X$ D0 r- {) u# ?; E37                        else
: s$ S9 f! ]) i38                            ap=abs(p) 1;3 i% R7 D& k+ l  q
39                            npc(k,ap)=npc(k,ap) 1;) r! M) Z) a! a' h+ u# d9 O' T
40                            npp{k,ap}=[npp{k,ap},[i,j]'];$ Y$ d* U7 J/ D$ V' K/ C* Z2 ~. B
41                        end6 v4 I, Z* r- y/ \
42                    end# g4 D+ M9 Q1 l! {' t- k
43                end
" m% F5 c8 a+ M0 \. p5 c* c44            end
; d  }5 \7 T( m+ T45        end
& O( N3 L( h/ k46        for i=1:ma %根据(a,p)对应的点的个数,用红色标出相应直线
, f7 {# l& c! |8 z; G47            for j=1:mp*2/ N$ Q- M9 z/ ]; h" M+ y
48                if(npc(i,j) > 90) %将提取直线的阈值设为902 C5 E+ X+ ?( A; B7 \) I
49                    lp=npp{i,j};& ?9 e& v( w+ X' }' s" P
50                    for k=1:npc(i,j)! ^) ?: E1 F) Y! }6 B9 k4 ]- g* d6 S
51                        sourcePic(lp(1,k),lp(2,k),1)=255;
8 B- L8 Y7 s  N& r0 M1 i52                        sourcePic(lp(1,k),lp(2,k),2)=0;4 j; c4 E" D2 W8 x5 J# c/ [. G4 J
53                        sourcePic(lp(1,k),lp(2,k),3)=0;: t2 k  n, H+ j. V* a, q
54                    end
. |% V% m. M* \  O55                end
  _" M$ \  W3 t$ v9 m' U56            end
  x8 j* u0 j6 o57        end
  v: r: B. j# B9 |: Z58        figure,imshow(sourcePic);

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-7 07:23 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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