我希望能够将一些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数学差。 ,关于浮点精度。