基于DSP实现的移动场景的相位配准(8)
时间:2016-12-27 21:27 来源:毕业论文 作者:毕业论文 点击:次
w[k + 3] = M * cos(2.0 * PI * (i + j) / n); w[k + 2] = M * sin(2.0 * PI * (i + j) / n); /*twiddle factor for the third output of first butterfly*/ w[k + 5] = -M * cos(4.0 * PI * (i ) / n); w[k + 4] = -M * sin(4.0 * PI * (i ) / n); /*twiddle factor for the third output of second butterfly*/ w[k + 7] = -M * cos(4.0 * PI * (i + j) / n); w[k + 6] = -M * sin(4.0 * PI * (i + j) / n); /*twiddle factor for the fourth output of first butterfly*/ w[k + 9] = M * cos(6.0 * PI * (i ) / n); w[k + 8] = M * sin(6.0 * PI * (i ) / n); /*twiddle factor for the fourth output of second butterfly*/ w[k + 11] = M * cos(6.0 * PI * (i + j) / n); w[k + 10] = M * sin(6.0 * PI * (i + j) / n); k += 12; } } } 请注意,上面的代码里,为了 FFT乘法的方便,有些旋转因子的符号被调整。FFT实现在做复数乘法运算时都巧妙的补偿了这些调整的符号。其它FFT函数需要的旋转因子表可能略有不同,在 DSP库里面,每个 FFT函数都提供了一个对应的旋转因子生成函数。通常,旋转因子生成函数在软件初始化阶段调用,生成的旋转因子表被存到数组里。对于不同的FFT点数,要生成不同的旋转因子表。FFT函数则在运行的过程中反复调用,旋转因子表也被反复使用。同时也要注意,旋转因子和输入输出矩阵也一样,也是实部虚部交错存放的。 5.2 图像的预处理 在图像进行FFT之前,首先要满足长度和宽度都是2的整数次幂,但是视频来源往往有不满足这个条件的情况,例如,我所使用的红外视屏的分辨率是320*256的格式。所以,要想办法来解决这一问题。 传统的解决这一问题的方法是补零法,即在图像宽或高的一边补上零,直到宽和高都是2的整数次幂,但是在实际操作中证明,补上的零会成为整个图像相当于噪声的存在,所以,补零法是不可取的。经过思考和实践,可以使用图像的缩放来解决这个问题,例如将320*256的分辨率缩放为256*256的分辨率。常见的缩放算法有均值差值法,双线性差值法和三线性差值法。这里我们就采用双线性插值法来实现。 使用下面的公式算出转换后图像上的点对应于原图像上哪一点: 其中w1为原图像的宽度,w2为转换后图像的宽度;h1为原图像的高度,h2为转换后的图像的高度。那么可以算出这一点P(x,y)如下图: x和y算下来都不是整数, 、 、 、 为离P点最近的4个整点,通过这四点能近似得算出P点对应的灰度值: 我使用的320*256的分辨率转化为了256*256的分辨率,具体代码如下: void scaling(short *imin,short *imout) { int i,j,k1,k2; float m,m1,m2; for(j=1;j<255;j++) { m=j*1.25; k1=m; k2=k1+1; (责任编辑:qin) |