【CV】傅里叶描绘子原理及应用简介

【图像处理入门和进阶教程】 同时被 2 个专栏收录
89 篇文章 79 订阅 ¥99.00 ¥49.90
57 篇文章 60 订阅 ¥99.00 ¥39.90

转载自:http://www.cnblogs.com/edie0902/p/3658174.html

1 引言

物体的形状识别是模式识别的重要研究方向,广泛用于图像分析、机器视觉和目标识别的应用中。在计算机中物体的形状表示方式有多种:边界曲线上点的坐标序列,边界上的点到物体中心的距离以及边界上的点随弧长变化的切线方向等。基于形状不同的表示方式,已有大量的形状识别方法被提出,如:基于边界特征点,不变矩、傅里叶描绘子和自回归模型等。Kauppien 比较了各种典型的形状识别方法,实验表明基于物体轮廓坐标序列的傅里叶描述子具有最佳形状识别性能。

2 傅里叶描述子

傅里叶描述子的基本思想是:假定物体的形状是一条封闭的曲线,沿边界曲线上的一个动点P(l)的坐标变化x(l)+iy(l)是一个以形状边界周长为周期的函数,这个周期函数可以用傅里叶级数展开表示,傅里叶级数中的一系列系数z(k)是直接与边界曲线的形状有关的,称为傅里叶描述子。

The outline of the shape is seen as a closed curve, described by its arc length s from an origin A.  We normalize this parameter so that its sum over the whole curve is equal to 2.Pi, it is the parameter t as shown below. We define a function of t, called Phi, that gives the angular variation between the tangent at the origin A and the tangent at position s.

(1)

此函数是连续的周期的(周期为2.pi),所以可以通过傅里叶级数来表示:

(2)

式中a(k)就是傅里叶描绘子

3测试算法

3.1 寻找形状的闭合边界

 

复制代码
 1 function [new_indeces]=find_close_indeces(im_in)
 2 
 3 [r,c]=find(im_in);
 4 
 5 p=pdist([r c]);
 6 psqr=squareform(p);
 7 
 8  nl=length(r);
 9  
10 new_indeces=[r(1) c(1)];
11 ind_ind_data=1;
12 lenindata=1;
13 newind=1;
14  for ind=2:nl
15   
16     mcur_dist=psqr(newind,:);
17     [dist_min,dist_min_ind]=sort(mcur_dist);
18     [dmin inddmin]=setdiff( dist_min_ind,ind_ind_data);
19     dist_min_ind =  dist_min_ind(sort(inddmin));
20     newind=dist_min_ind(1);
21     new_indeces  =[new_indeces; [r(newind) c(newind)]];
22     
23      ind_ind_data=[ind_ind_data; newind];
24     lenindata=length(ind_ind_data);
25     
26  end
27  
复制代码

3.2  傅里叶描述子对形状进行处理并且重建

复制代码
 1 function [border_fft,border_restored,xx,yy] = make_fft_sec(image_edged,ncoef)
 2 
 3 border_fft=zeros(size(image_edged));border_restored=zeros(size(image_edged));
 4 [a,b]=size(image_edged);
 5 
 6 % find border
 7  f=find(image_edged);
 8  lenf=length(f);
 9 
10  
11   [new_indeces]=find_close_indeces(image_edged);
12   ii=new_indeces(:,1);jj=new_indeces(:,2);
13  border_cmplx=ii+j*jj;
14 
15    border_fft =fftshift(fft(border_cmplx));
16    
17    if mod(lenf,2) % odd
18     lenf = lenf-1;
19    end
20     rc = fix(lenf/2)+1;  
21 
22 
23 p1=[ (rc+1):(rc+1+ncoef-1)];
24 p2=[ (rc-1):-1:(rc-1-ncoef+1)];
25 
26 
27 
28 border_ifft=zeros(1,lenf);
29 for ind=1:(ncoef)
30     mfreq_vec=zeros(1,lenf);
31    mfreq_vec(p1(ind))=border_fft(p1(ind));
32     mfreq_vec(p2(ind))=border_fft(p2(ind));
33     
34     border_ifft = border_ifft+(ifft(ifftshift(mfreq_vec)));
35 end
36 
37 %add dc
38  mfreq_vec=zeros(1,lenf);
39  mfreq_vec(rc)=border_fft(rc);
40  border_ifft = border_ifft+(ifft(ifftshift(mfreq_vec)));
41 
42 
43 border_restored = zeros(size(image_edged));
44 xx=real(border_ifft);yy=imag(border_ifft);
45 
46 
47 yyt=round(yy);xxt=round(xx);
48 
49 if(length(xxt)==0)
50     return ;
51 end
52 
53 hind=sub2ind(size(border_restored),yyt,xxt);
54 border_restored(round(hind))=1;
55 
56 figure(4),plot((xx),yy,'ro');
复制代码

 

3.3 测试代码 

复制代码
 1 %% create the matrix
 2 shapes=2;
 3 
 4 switch shapes
 5     case 1
 6         m=zeros(22);
 7         m(4:19,4)=1;m(4:19,19)=1;
 8         m(4,5:19)=1;m(19,5:19)=1;
 9     case 2
10         m=zeros(41);
11         m(5,18:24)=1;
12         m(5:19,18)=1; m(5:19,24)=1; m(19:25,5)=1;
13         m(19,5:18)=1;m(19,24:37)=1; m(19:25,37)=1;
14         m(25,5:18)=1;m(25,24:37)=1;
15         m(25:39,18)=1; m(25:39,24)=1;
16         m(39,18:24)=1;
17     case  3
18         m=zeros(30);
19          m(10,14:20)=1;
20          m(10:22,14)=1;
21           m(16,14:20)=1;
22 end
23 
24 figure(1),imagesc(m);length(find(m))
25 %% make fft transform                       
26 
27 [border_fft,border_restored]=make_fft_sec(m,10);
28 figure(2),imagesc(border_restored);
复制代码

参考:

http://www.tsi.telecom-paristech.fr/pages/enseignement/ressources/beti/descript_fourier/index.html

王涛, 刘文印, 孙家广, 张宏江 - 《计算机研究与发展》2002年12期

  • 0
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值