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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

, Q+ s# ^: y' @5 z4 ZHough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。
8 @5 K" C. T4 B; a1 |6 N' o4 x下面给出在matlab中用Hough变化检测直线的实现,文章末尾提供相关资源的下载。3 j7 {  b& W& J  e) u- b
其中先用log(laplacian of gaussian)算子检测图像边界:4 I6 x/ j; `" A' i

) W1 F" h0 l+ r5 E" E* i- t; B! K01        sourcePic=imread('D: matlab程序Hough变换检测直线curve.bmp');
( \( Q. B8 \. g2 K# l* I02        [height,width,l]=size(sourcePic);
2 D' r* y* S1 U" g, ?, v! w03        grayPic=zeros(height,width);7 \; `! t; A1 j
04        for i=1:height %转换成灰度图象
1 S. i7 C, c6 `' f: `' O( L1 O. k05            for j=1:width
1 B: f$ ]5 u0 |4 H06                grayPic(i,j)=(sourcePic(i,j,1) sourcePic(i,j,2) sourcePic(i,j,3))/3;! O& s; t- W% a1 H; W
07            end+ Y  k# g+ B% Y' V( k
08        end. R8 v2 V0 G0 z
09        logNum=0; %log算子的计算值7 e5 h% E/ Z  O- ?
10        edgePic=zeros(height,width);" j5 W. D7 d9 i" T
11        for i=3:height-2 %log算子提取边界" O- _' }/ f- s: d, U
12            for j=3:width-2) n# N" d" c  X$ R8 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);
) a, N8 I2 E) ^* K1 g6 J14                if(logNum > 0)6 G2 U6 a/ o# y9 @: i7 U
15                    edgePic(i,j)=255;& {% O8 Q8 ]# o. B( r+ \
16                else
; ?: g' |# p( [0 y6 h' A. o17                    edgePic(i,j)=0;/ x: I! C! z5 f, Q
18                end; j( s3 u6 x, k; j
19            end
: q( _( T( L  ~& q. j4 U+ U20        end
0 r9 R! b; i5 g( e21        % Hough变换检测直线,g(x)=(a,p)为边界点对应的平面
* ]" Z! n" ?0 z& J$ ?3 I22        ma=180; %a的值为0到180度; W# J% L+ Y3 h& B# N1 M8 {$ f
23        mp=round(sqrt(height^2 width^2)); %对应P的最大值' q5 I  I& M/ o: r5 t+ z' _
24        npc=zeros(ma,2*mp); %用于记录(a,p)对应的点的个数
( F* S, _4 |" E25        npp=cell(ma,2*mp); %用于记录(a,p)对应的点的坐标/ J) u; _' a. O: h
26        for i=1:height %计算(a,p)的值,并做相应记录7 K* y* R+ _4 b& P
27            for j=1:width4 u9 ?" b: K7 y* ?6 ]4 V% M3 s* r
28                if(edgePic(i,j)==255); o4 H) l/ O  q* M- z
29                    for k=1:ma" F$ o9 U' H9 X
30                        p = round(i*cos(pi*k/180) j*sin(pi*k/180));
' [. g) T4 Z8 d7 w4 ]9 k+ c+ V, r31                        if(p > 0)4 b4 K; \4 i6 U
32                            %npc(k,mp*2)=npc(k,mp*2) 1;
% u9 q1 b) W5 e33                            %npp{k,mp*2}=[npp{k,mp*2},[i,j]'];# l$ S7 [$ R! G% V/ ?
34                             10.01.05修正
2 u' a$ m: ?& v4 N35                            npc(k,mp p)=npc(k,mp p) 1;
# d) ?, e+ }+ N# x) V$ K36                            npp{k,mp p}=[npp{k,mp p},[i,j]'];* f  Y5 L" I+ o0 `1 {4 j( \
37                        else. C9 @8 `4 m4 r$ I3 N2 }4 v, f0 N
38                            ap=abs(p) 1;/ ]7 v' P  J2 Y. [2 W% x
39                            npc(k,ap)=npc(k,ap) 1;  _& a  ^% Z; G0 N# c5 P; b
40                            npp{k,ap}=[npp{k,ap},[i,j]'];6 b8 Q% `5 Z4 x2 c7 y4 B
41                        end
& k; e* K; M3 l' S) \  U42                    end
( r' T* Y. U9 h2 M  X# C8 v43                end
* K6 z7 [2 c' G7 N, w  f& D. C44            end+ m  R  e$ }$ c) [
45        end
1 a4 k- k: X6 v, x( w* T% q46        for i=1:ma %根据(a,p)对应的点的个数,用红色标出相应直线
& M3 l; x2 r% K: P, U, W- I! @47            for j=1:mp*2
! N. a; i; {& X( H; r  }48                if(npc(i,j) > 90) %将提取直线的阈值设为90
  `! \9 c9 f( C0 ^; J2 i49                    lp=npp{i,j};
/ c5 ?) x$ J- f) W6 G8 k( }50                    for k=1:npc(i,j)( V% `' ]1 @! I: {; w. f
51                        sourcePic(lp(1,k),lp(2,k),1)=255;/ X# z8 L4 t! n& v
52                        sourcePic(lp(1,k),lp(2,k),2)=0;4 @# t$ g( Z2 o9 b) y
53                        sourcePic(lp(1,k),lp(2,k),3)=0;
) Q9 W: S. I0 x1 P- i& J1 g% v5 K54                    end
# b- Z" K( v. q' g5 E55                end
" c+ d1 i! ^9 h) {  \56            end  `4 G+ e2 u. A! o3 X
57        end: o7 E% e. X6 M5 |  T/ g0 h) o# i
58        figure,imshow(sourcePic);

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-20 17:41 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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