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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
/ X& l  D$ _+ Q# k4 i" A' b
Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。
3 j$ k, g. S" b8 I$ [& B* N; y下面给出在matlab中用Hough变化检测直线的实现,文章末尾提供相关资源的下载。( A# _2 x# M: O4 y5 Z
其中先用log(laplacian of gaussian)算子检测图像边界:
5 n. [5 @: O  y. @+ C3 [+ `  T
; D0 U% B! E/ Q8 w, R3 [9 k( b01        sourcePic=imread('D: matlab程序Hough变换检测直线curve.bmp');
) m# n! a+ m: m" |02        [height,width,l]=size(sourcePic);& b6 p& [# Y! S) }6 _( ?
03        grayPic=zeros(height,width);
: j7 e7 a0 Q8 }9 R04        for i=1:height %转换成灰度图象
/ F6 b' n' R. l0 \05            for j=1:width- i8 Y9 p' a5 O1 t& J5 C5 l
06                grayPic(i,j)=(sourcePic(i,j,1) sourcePic(i,j,2) sourcePic(i,j,3))/3;$ \4 U2 B' w2 }5 J: ~5 e' Q. C  ?( f
07            end
6 [" L  r& C* j08        end
6 r8 L/ ^: G5 @5 O09        logNum=0; %log算子的计算值
$ M: z, T: c* X8 D$ f" P) \/ j10        edgePic=zeros(height,width);* O% O) N  H- T  ?6 f3 i7 p; V( x
11        for i=3:height-2 %log算子提取边界/ C" \! j/ z' \. G" J% {+ S$ N; O
12            for j=3:width-20 Y7 T; A7 t! L; e; _
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);7 d2 W: D- \& D' ?$ A$ M- p
14                if(logNum > 0)- z5 u, {9 q% \* R, h/ H
15                    edgePic(i,j)=255;
! y, v0 {, p" r! V16                else, K8 G! O- Y5 u0 q7 K/ K" l
17                    edgePic(i,j)=0;
& n4 c) z7 L1 R; ~6 v1 Z9 G) S, s18                end& N8 A5 o( L7 k. M* i5 Y4 X
19            end
  Z! a9 I& }( d7 `- s/ G20        end, m. f* A$ {; ?; w9 n
21        % Hough变换检测直线,g(x)=(a,p)为边界点对应的平面
8 H; h+ U7 b7 J1 c' I' e% B" n$ G22        ma=180; %a的值为0到180度
, c8 N4 A& g. @* G. {9 z23        mp=round(sqrt(height^2 width^2)); %对应P的最大值
1 ~( ]1 y" D: v% @0 J5 E$ y. a24        npc=zeros(ma,2*mp); %用于记录(a,p)对应的点的个数
, k) b0 {7 v, D; j1 E9 K25        npp=cell(ma,2*mp); %用于记录(a,p)对应的点的坐标! `. [' _' ?# w0 K/ t
26        for i=1:height %计算(a,p)的值,并做相应记录
, b  ?5 P% S* m7 f27            for j=1:width$ k  t3 d( @) p+ S9 \
28                if(edgePic(i,j)==255)5 T( l) t1 N4 e! _. ]6 A
29                    for k=1:ma
0 B7 E) C$ y1 V7 V' ]& f& R8 G30                        p = round(i*cos(pi*k/180) j*sin(pi*k/180));8 o5 k; w7 B) {- }. ]6 E& G1 E
31                        if(p > 0)2 ~9 ^) x8 y& i
32                            %npc(k,mp*2)=npc(k,mp*2) 1;( v: h  P, C  o- J" x3 E( F% w
33                            %npp{k,mp*2}=[npp{k,mp*2},[i,j]'];
3 ?- y4 \  x! {% [( F' E34                             10.01.05修正
5 V' ?& j* Z& V% h8 E3 \, ]35                            npc(k,mp p)=npc(k,mp p) 1;9 S+ a+ k5 t5 a3 O" c
36                            npp{k,mp p}=[npp{k,mp p},[i,j]'];
# {, c8 n: N. C4 S2 g! y37                        else
7 C0 Z/ I! I. ~5 t7 }* O$ N) q; X38                            ap=abs(p) 1;. s1 G* z; R; X% M
39                            npc(k,ap)=npc(k,ap) 1;
  t! z) |% w. }! b, R40                            npp{k,ap}=[npp{k,ap},[i,j]'];& d! i, l# }4 q2 p1 y6 q
41                        end
. P  Z$ E. g& e0 K2 L& ^42                    end! @  a8 X  n  d" ]3 c" i; P
43                end4 V" i' G" y$ b9 q/ f. r; j
44            end
2 y9 I- O. w2 f45        end* z+ c& z2 l& M2 ^7 _6 Z
46        for i=1:ma %根据(a,p)对应的点的个数,用红色标出相应直线
# i$ O; W& z7 q5 ^47            for j=1:mp*2# P% U) b1 H" o3 g1 }) V8 {
48                if(npc(i,j) > 90) %将提取直线的阈值设为90
: G  ~( Z4 t% W/ Q; y( c0 R6 x' i' x49                    lp=npp{i,j};
/ S# G# G& M; A8 d: Y2 ]: V50                    for k=1:npc(i,j)  z* W/ C. B& D
51                        sourcePic(lp(1,k),lp(2,k),1)=255;+ X, p: m5 h; E
52                        sourcePic(lp(1,k),lp(2,k),2)=0;
+ G9 v; t/ Z) H  n4 c; X% T% M' U53                        sourcePic(lp(1,k),lp(2,k),3)=0;  P8 @! q" X0 a% W; a" w
54                    end
" d- U' y2 m* ~4 T2 H* f' |9 B55                end$ ]! \, e. F. _- d
56            end
& M/ [5 F; c0 u3 h. {57        end% y  x! J, [* u; [4 Z" `
58        figure,imshow(sourcePic);

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 14:32 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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