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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
6 G7 }3 o! }' e7 Z$ f% b
Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。# [! e1 z1 o+ G+ G9 Z
下面给出在matlab中用Hough变化检测直线的实现,文章末尾提供相关资源的下载。
$ d8 V8 G1 `  z# U其中先用log(laplacian of gaussian)算子检测图像边界:  t. D; ]0 s- K( O

+ ?1 B2 t# t& O( P$ n. l5 I01        sourcePic=imread('D: matlab程序Hough变换检测直线curve.bmp');. B. y: A1 ?" T4 M- s, V
02        [height,width,l]=size(sourcePic);
8 m& t. C( F: h$ S/ @3 t2 D3 Z3 @03        grayPic=zeros(height,width);# |* g' E2 T3 r0 r1 @+ n* N
04        for i=1:height %转换成灰度图象
1 A# K8 o- _3 M: T0 v2 v2 c1 B05            for j=1:width( G; r5 l$ C0 j; o* P: p, E( F. O
06                grayPic(i,j)=(sourcePic(i,j,1) sourcePic(i,j,2) sourcePic(i,j,3))/3;$ u) e6 A7 r8 C, z/ I
07            end. Y& N5 ~; L7 z4 L( [8 }
08        end& t0 i8 s% R2 V" b9 S- q/ v
09        logNum=0; %log算子的计算值" X/ M' p/ M4 d* j* b) b4 H2 D' W
10        edgePic=zeros(height,width);
  A% ?0 k; i9 J$ D( _11        for i=3:height-2 %log算子提取边界. D$ x& g) Z( z! R+ y7 `5 U+ O
12            for j=3:width-2
4 p8 h  N9 x2 P# c( {, |. I$ _13                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);; I8 \' N6 M1 I+ ]1 n
14                if(logNum > 0); Z( f& }9 I$ i0 K) e4 R
15                    edgePic(i,j)=255;
9 P2 d6 @" L# P16                else
3 K4 T6 W/ C+ ]' e) a! u7 y17                    edgePic(i,j)=0;
8 H5 m' x6 ?* v# o* ~6 d* o& f18                end# r) n% h9 l. t' \( `$ ^' L
19            end+ r" q7 Z* ~0 X5 W
20        end) p8 T) ]" A$ O3 ?4 K$ V8 E* v
21        % Hough变换检测直线,g(x)=(a,p)为边界点对应的平面
! F5 C) I! q8 ~: E8 ^8 N22        ma=180; %a的值为0到180度
1 |5 G0 \' l3 L8 z1 T( ^23        mp=round(sqrt(height^2 width^2)); %对应P的最大值( k7 k- B3 r( {( x
24        npc=zeros(ma,2*mp); %用于记录(a,p)对应的点的个数2 J+ f3 D( q# D  o
25        npp=cell(ma,2*mp); %用于记录(a,p)对应的点的坐标
" C& y7 G1 \* j7 S2 B26        for i=1:height %计算(a,p)的值,并做相应记录9 a* }) u  w' r; I
27            for j=1:width4 S" ?% g. ?6 q( w0 |  d1 {
28                if(edgePic(i,j)==255)
2 C! {: b2 C6 h' P& j29                    for k=1:ma' A. x. g" }; |! u9 J  v- K/ x
30                        p = round(i*cos(pi*k/180) j*sin(pi*k/180));
4 n7 Z2 {! n& L8 C! d( n. M31                        if(p > 0)6 i9 s8 A8 e6 A2 h  W
32                            %npc(k,mp*2)=npc(k,mp*2) 1;
: K4 m* ~  m" L8 z  b: @) E33                            %npp{k,mp*2}=[npp{k,mp*2},[i,j]'];
% _: y' V/ e9 V. \9 ^$ Z. M! ~34                             10.01.05修正5 G' a/ F. z1 o9 U0 o& f6 z/ U
35                            npc(k,mp p)=npc(k,mp p) 1;5 b1 y( {* e8 ]9 C& P
36                            npp{k,mp p}=[npp{k,mp p},[i,j]'];
8 S, n1 V( B- M! w$ {0 g* e37                        else; M+ h$ M7 s4 H. q/ I
38                            ap=abs(p) 1;
9 v1 j# z, N* T5 c% ?39                            npc(k,ap)=npc(k,ap) 1;
) }- G5 Q  o3 A# [3 \3 ]& L: {; {. s40                            npp{k,ap}=[npp{k,ap},[i,j]'];
* a8 b$ Q) Q# v4 b41                        end
3 X" Y, ?& @2 U$ A42                    end& r2 D+ l- `3 ^
43                end
! k; w" i4 x+ G44            end6 i& r2 m# O$ n
45        end
) r1 l3 C% d% ^# P% y; q46        for i=1:ma %根据(a,p)对应的点的个数,用红色标出相应直线/ C% N( O! v, i- @
47            for j=1:mp*2% r8 ]4 u4 N8 \
48                if(npc(i,j) > 90) %将提取直线的阈值设为90
, Z$ N7 N  g) N: _1 a1 V6 @0 h49                    lp=npp{i,j};6 }0 S: }, i7 [2 d" |
50                    for k=1:npc(i,j)
+ [/ t# t3 j+ D$ h- B/ j. B% j" [51                        sourcePic(lp(1,k),lp(2,k),1)=255;
  O# I( k; R- K4 M+ x52                        sourcePic(lp(1,k),lp(2,k),2)=0;! Y, A! Z' y- f0 P, K9 E( w% j
53                        sourcePic(lp(1,k),lp(2,k),3)=0;7 g0 g" Y4 @( G& r
54                    end
9 _+ e; v" }8 z9 B) H( ?55                end
4 C  y, I7 P$ ]7 g) p$ Y) P3 k9 e- c56            end
* Y8 R, \, L; q' e9 e8 C57        end
7 t3 W" R+ U3 t/ q. d58        figure,imshow(sourcePic);

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-23 16:28 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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