使用DFT进行亚像素图像移位如何真正起作用?


12

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

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

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


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

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

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

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

Answers:


4

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

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


5
@ hotpaw2:DFT的插值内核不是无限范围内的sinc(),实际上DFT是离散的有限变换。DFT的插值等效于与Dirichlet内核的卷积,也被一些作者称为周期性sinc()en.wikipedia.org/wiki/Dirichlet_kernel
Arrigo

@Arrigo:同意。编辑答案以解决。
hotpaw2

@ hotpaw2:当我将FFT填充到两倍大小时,IFFT将产生两倍大小的重构。不确定如何处理盈余?谢谢
neuviemeporte

扔掉不需要的剩余点。在2倍的上采样中,彼此移位,与重建的原始点交替。在3倍的上采样中,您得到2个与原始点交替的偏移点(分别为1/3和2/3)。等等,您的上采样越多,您扔掉的东西就越多。
hotpaw2

7

为了了解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))=。其中是Dirac delta函数δ(w)δ

好的,现在我们可以连续进行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或。eiπ2

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.