我正在尝试为涉及生成亚像素移位图像的应用程序评估几种图像插值方法的质量。我以为我可以将使用所有这些插值变量的亚像素移位的结果与一些完美偏移的图像进行比较,但可能无法获得它(那么需要什么插值?)。

我当时正在考虑在频域中使用DFT +移位,但是我不确定与显式插入图像(使用双线性,双三次等)相比,它的实际工作原理。我敢肯定它不可能生成完美偏移的图像,但是我无法将手指放在上面。使用DFT进行子像素移位是否等同于应用插值,如果是,应采用哪一个?使用此方法获得的图像中像素值的偏差是多少?谢谢!

编辑:
经过深思熟虑,我认为由于FFT在谐波(正弦函数)方面是原始函数的近似值(甚至是DFT),等于某种三角插值。我记得离散数据的“傅立叶级数插值”公式是三角插值,但不确定是否已连接。

评论

快速傅立叶变换(FFT)是一种用于离散傅立叶变换的算法。 DFT并不是谐波上原始函数的近似值,而是信号在复指数正交基上的投影。

好的,但是信号本身是一些强度分布的采样和量化近似值,与理论分布相比,DFT在谐波含量方面受到限制。您可以从IDFT获得准确的信号,但是如果在IDFT将其填充回去之前对其进行填充(例如移位),则会有些偏差。还是我想念什么?

DFT确实采用离散输入,但不仅限于量化输入。信号是什么都没有关系。正如您所指出的,您可以获得准确的信号。但是,我不确定您所说的“转移”是什么意思。频域中的移位特性是众所周知的(时域中复杂的频率转换)。如果您希望在“时”域中转换,那么您需要考虑该DFT对偶。

我的意思是,如果我对信号的DFT执行某些操作(例如,在我的情况下-使用傅立叶位移定理在“像素域”中对图像进行亚像素位移),则IDFT将返回插值结果,如@ hotpaw2的解释回答。此插值是不完美的,因为信号没有带宽限制,并且DFT本身是根据一组有限的量化(0-255)样本计算得出的。

#1 楼

DFT / FFT,再加上频域中的零填充,再加上更长的IDFT / IFFT,则返回插值点。这些点将使用周期性的Sinc内核进行插值,这是对原始数据的完美插值,而原始数据的带宽严格限制在原始采样率的一半以下。但是,将对数据进行处理,就好像它被圆形包装一样,这可能会在某些图像的边缘产生奇怪的结果。因此,您可能需要在插值之前用漂亮的填充色或取景的颜色填充原始源的边缘。

如果将上采样放大2倍(将FFT零填充,则将IFFT的长度加倍),那么您可以使用插值点进行半像素移位。 3倍用于第三个像素移位,以此类推。对于移位,可以丢弃原始点以及任何多余的插值点以获得所需的大小。

评论


$ \ begingroup $
@ hotpaw2:DFT的插值内核不是无限范围的sinc(),实际上DFT是离散的有限变换。 DFT的插值等效于与Dirichlet内核的卷积,某些作者也将其称为周期sinc():en.wikipedia.org/wiki/Dirichlet_kernel
$ \ endgroup $
– Arrigo
13年2月19日在19:39

$ \ begingroup $
@Arrigo:同意。编辑答案以解决。
$ \ endgroup $
– hotpaw2
13年2月20日在9:01



$ \ begingroup $
@ hotpaw2:当我将FFT填充到两倍大小时,IFFT将产生两倍大小的重构。不确定如何处理剩余?谢谢
$ \ endgroup $
–neuviemeporte
13年2月21日在8:35

$ \ begingroup $
扔掉不需要的剩余积分。在2倍的上采样中,彼此移位,与重构的原始点交替。在3倍的上采样中,您得到2个与原始点交替的偏移点(分别为1/3和2/3)。等等,您的上采样越多,您扔掉的东西就越多。
$ \ endgroup $
– hotpaw2
13年2月21日在8:51



#2 楼

为了了解DFT如何使您移动图像,您需要一些关键的见解。

首先,傅立叶定理:首先看连续(即模拟)情况可能更容易。假设您有一些函数,将其称为g(t)。为简单起见,假设g(t)是模拟音频记录,因此它是一维函数,它是连续的,并表示瞬时压力随时间的变化。

现在,g(t)是我们表示音频记录的一种方法。另一个是G(f)。 G(f)是g(t)的傅立叶变换。因此,G(f)== FT(g(t))。 G(f)具有与g(t)相同的所有信息,但是它在频域而不是时域中表示该信息。关于傅立叶变换有一些挑剔的细节,我不会提及。

您可以将G(f)视为g(t)中包含的“频率分布”。因此,如果g(t)是正弦波(即纯音),则G(f)各处都将为零,但该音的频率除外。最好指出G(f)通常是一个复数函数-也就是说,它返回复数,可以认为它具有实部和虚部或大小和相位。

这里有一个小小的离题:由于g(t)是连续的(在域和范围内),因此G(f)也是连续的。那么,除了音频频率之外,G(f)怎能在所有地方都为零?好吧,FT(sin(wt))= $ \ delta(w)$。 $ \ delta $是Dirac delta函数。

好,所以现在我们有了连续的FT。

这里是第二个见解:离散傅立叶变换因为采样信号是模拟信号,所以它对付里叶变换。在这种情况下,
“离散”是指函数域(时间或频率)的量化,而不是范围的量化。 (从声卡获得的采样数字信号在域和范围内都被量化。)

您从声卡获得的数字字节流包含来自麦克风的原始连续(模拟)信号的“样本”。如果我们对采样的g(t)进行DFT,我们仍然会得到G(f)。记住,G(f)是表示g(t)中包含的信息的另一种方式。如果我们遵循奈奎斯特定理,则采样信号g(t)包含原始连续信号的所有“智能”,因此我们的离散G(f)必须包含原始连续信号的所有信息。顺便说一句,G(f)仍然是一个复数函数。

亚像素移位的神奇之处就在于此,但是在这种情况下,我将写有关如何及时移位音频信号的文章。少于一个样本,因为它是同一件事。

还记得G(f)是一个复函数吗?为了表示在t = 0处不为零的频率,它必须很复杂。记住,sin(0)= 0,所以sin(2 * 0)= 0,依此类推。但是,如果我们开始记录整个音调周期的四分之一,该怎么办?那就是G(f)的相位部分的来源。在这种情况下,相位将为90度或pi / 2弧度,具体取决于您偏好代表一个周期的四分之一。因此,G(tone_frequency)= 0 + i或$ e ^ {{i \ pi} \ over {2}} $。

这意味着我们只需更改G(t)的相位,就可以及时改变音频记录的时间(可以选择任意数量,包括采样时间的一部分)。实际上,这种说法可能有点太随意了。对于未量化的采样信号,可以任意调整相位(这是我在较早时候就对域和范围进行量化的原因之一。但是,对于量化的采样信号(例如我们的音频字节流),量化步长(即位数)决定了我们可以调整相位的分辨率。当我们进行傅立叶逆变换G(f)时(或对于此采样信号进行DIFT变换)时,新的一组采样g'(t)= DIFT(G(F))将在时间上全部偏移我们选择的数量。

将其应用于像素仅意味着使用二维FT而不是此处讨论的一维FT。