理论对该曲线进行变换。不同的曲线表示方法有不同的特性,一个好的表示方法 应该使最终获得的傅立叶描述子具有尺度、旋转、平移不变性及起始点的无关性。
傅立叶描述子,是物体形状边界曲线的傅立叶变换系数,是物体边界曲线信号的频域分析结果。它是一种描述不受起始点移动尺寸变化及旋转影响的曲线的方法。傅立叶描述子的基本思想,是把坐标的序列点看作复数:
s(k)?s(k)?jy(k)
即x 轴作为实轴,y 轴作为虚轴,边界的性质不变。这种表示方法的优点,是将 一个二维问题简化成一个一维问题。对s(k)的傅立叶变换为:
a(u)??s(k)e?j2?uk/N
k?0N?1 傅立叶描述子序列{a(u)}反映了原曲线的形状特征,同时,由于傅立叶变换具有能 量集中性,因此,少量的傅立叶描述子就可以重构出原曲线。
三.实现代码
1.主函数
%图像傅里叶算子边界描述 %生成图像边界矩阵 clc;
r=zeros(15,15); %构造15*15的0矩阵
13
r(3,8:13)=1; %按要求构造“R”型图像 r(4,7)=1; r(4,13)=1; r(5,6)=1; r(5,13)=1; r(6,3:5)=1; r(6,13)=1; r(7,3)=1; r(7,13)=1; r(8,3)=1; r(8,13)=1; r(9,3)=1; r(9,13)=1; r(10,3)=1; r(10,13)=1; r(11,3)=1; r(11,12)=1; r(12,3)=1; r(12,11)=1; r(13,3:10)=1;
subplot(121); imshow(r);
title('构建的图像边界'); %主函数
%图像傅里叶算子边界描述 i=1; for m=1:15 for n=1:15
if r(m,n)==1 %将边界坐标存入S矩阵 s(i,1)=m; s(i,2)=n; i=i+1; end end end
z=frdescp(s);
%图像傅里叶算子边界逆描述 z34=ifrdescp(z,34); z34=uint8(z34);
I=zeros(15,15); for k=1:34
I(z34(k,1),z34(k,2))=1; k=k+1; end
subplot(122);
14
imshow(I);
title('34个描绘子重构的图像');
2.Frdescp函数
功能:计算边界的傅里叶描绘子s
%傅里叶边界描述算子生成函数 function z=frdescp(s) [np,nc]=size(s); if nc~=2
error('S must be of size (np,2)'); %必须为2列的矩阵 end
if np/2~=round(np/2); %若点数不是偶数,则补一个点 s(end+1,:)=s(end,:); np=np+1; end
x=0:(np-1); m=((-1).^x)';
s(:,1)=m.*s(:,1); s(:,2)=m.*s(:,2);
s=s(:,1)+i*s(:,2);
z=fft(s);
3.Ifrdescp函数
功能:给定一组傅里叶描绘子,该函数可用给定数量的描绘子计算其逆变换,以产生一条封闭的空间曲线
%傅里叶边界描述逆算子函数 function s=ifrdescp(z,nd)
np=length(z);
if nargin==1|| nd>np; nd=np; end
x=0:(np-1); m=((-1).^x)';
15
d=round((np-nd)/2); z(1:d)=0; z(np-d+1:np)=0;
zz=ifft(z); s(:,1)=real(zz); s(:,2)=imag(zz);
s(:,1)=m.*s(:,1); s(:,2)=m.*s(:,2);
1.34个描绘子重构的图像2.32个描绘子重构的图像 16
四.结果分析