如何取函数的conj改变原本会是常规卷积的东西? `ifft2(conj(fft2(f))。* fft2(tmp)`

时间:2018-07-15 07:20:16

标签: matlab image-processing floating-point fft convolution

我希望能够将一些matlab代码转换为C。我相信以下代码段创建了一个新图像,其中每个像素是源图像中ah * w矩形中居中的本地像素的总和像素,至少为奇数h和w。

[rows, cols] = size(img);

tmp = ...
%Is mostly input img, but also extended on all sides by reflecting edge values.
%Extended above and below by h each, left and right by w each.

f = zeros(rows+2*h, cols+2*w);

f(1:h, 1:w) = 1;

sumimg = real( ifft2( conj(fft2(f)) .* fft2(tmp) ) );

%then cut out the center of the original input size.

我对FFT不太了解,但是我想我了解图像处理中的卷积,并且FFT是实现这一目标的一种方法。我想知道conj()的作用,因为在阅读卷积定理时我看不到它。

我的第二个问题是:对于带有h=w=63的浮点,以上方法的准确性与我的C方法(忽略边)相比如何?

具有用于当前列段总和的辅助数组。

初始化:将前h行加到aux中,同时将最后一行的输出总和与完成的矩形相加。

然后其余行的核心是:

//top == bot-(h-1)*stride;
double partial = 0;
int j=0;
for ( ; j!=w-1; ++j)//presum first w-1 elems, and roll column sums
    partial += (aux[j] += bot[j] - top[j]);

for ( ; j!=segcols; ++j)
{
    double result = partial + (aux[j] += bot[j] - top[j]);
    output(result);
    partial = result - aux[j-(w-1)];
}

因此,我所要做的只是简单的加法和减法,但是我不确定在初始化步骤中是否向每个列累加器中依次添加h=63元素,并且以下算法比复杂的FFT数学差。 ,关于浮点精度。

0 个答案:

没有答案