m1=1.0*m-k1;
m2=1.0*k2-m;
for(i=0;i<256;i++)
{
imout[i*256+j]=m2*imin[i*320+k1]+m1*imin[i*320+k2];
}
}
for(i=0;i<256;i++)
{
imout[i*256]=imout[i*256+1];
imout[i*256+255]=imout[i*256+254];
}
}
5.3 输入FFT函数的复数图像矩阵形式
要正确得使用DSP库里的FFT函数,那么首先输入数据的格式必须正确。在FFT函数里,规定输入和输出图像矩阵都是复数矩阵,并且实部和虚部必须交错存放。也就是说原来图像的一个像素点对应一个灰度值数据,需要的格式则是一个实部和一个虚部一前一后构成这个像素点的数据。例如,我的实验中使用的256*256的FFT,那么输入矩阵就是一个512*256的矩阵。原图像所有的点都是实数,所需要的转换就是在原图像的每个像素值后插入一个0。
具体转换代码如下:
void complextrans(short *in,int *out)
{
int i;
for (i=0;i<256*256;i++)
{
out[2*i]=in[i];
out[2*i+1]=0;
}
}
5.4 一文FFT生成二文FFT函数
dsplib里的FFT函数是一文FFT函数,可以使用一文FFT来产生二文FFT。将二文矩阵每一行作一次一文FFT,然后把得到的结果的每一列再作一文FFT,这样就得到这个二文矩阵的二文FFT。我用了两个函数来实现这个功能。
void zhuanzhi(int *in,int *out)
{
int i,j;
for(i=0;i<256;i++)
{
for(j=0;j<256;j++)
{
out[512*i+2*j]=in[512*j+2*i];
out[512*i+2*j+1]=in[512*j+2*i+1];
}
}
}
void fft2(int *im_in,int *im_out,int *twiddle,int n)
{
int x;
int dim2=(int)(n*2);
int row_start=0;
for(x=0;x<n;x++)
{
DSP_fft32x32(twiddle,n,&im_in[row_start],&im_out[row_start]);
row_start+=dim2;
}
zhuanzhi(im_out,testin);
row_start=0;
for(x=0;x<n;x++)
{
DSP_fft32x32(twiddle,n,&testin[row_start],&testout[row_start]);
row_start+=dim2;
}
zhuanzhi(testout,im_out);
}
程序中,将二文矩阵每一行作一文FFT,得到的结果转置,每一行继续作一文FFT,最后将二次得到的结果再次转置,即得到二文FFT。
同理,逆变换也可用这种方法求得。
5.5 求出偏移量
在傅氏变换后,将前后两幅图像的频谱相除,得到相位偏移量,然后将相位偏移量的矩阵逆变换,则得到空间偏移量的矩阵。在这个矩阵中找到最大值,其坐标经过一定的变换就得到场景的偏移量。这里我们通过码盘信息,将搜素区域从全图变为码盘数据周围的区域,缩小了搜索范围。需要指明的是:场景向右移动定义为正向移动,场景向左移动定义为逆向移动。
- 上一篇:渥拉斯顿棱镜透射光强扰动分析+文献综述
- 下一篇:含葡萄糖的混浊液后向散射特性的Mueller矩阵实验研究
-
-
-
-
-
-
-
河岸冲刷和泥沙淤积的监测国内外研究现状
中考体育项目与体育教学合理结合的研究
十二层带中心支撑钢结构...
酸性水汽提装置总汽提塔设计+CAD图纸
大众媒体对公共政策制定的影响
杂拟谷盗体内共生菌沃尔...
电站锅炉暖风器设计任务书
乳业同业并购式全产业链...
当代大学生慈善意识研究+文献综述
java+mysql车辆管理系统的设计+源代码