我一直在阅读有关抗锯齿的内容并且似乎有道理,但有一件事我不太确定。您究竟如何找到信号的最大频率(在图形的上下文中)。
我意识到不止一个案例,所以我假设答案不止一个。但首先让我说一个简单的算法,我认为它代表最大频率,所以有人可以告诉我,我是否以错误的方式对其进行概念化。
让我们说它是1维,有限和灰度图像(以像素为单位)。假设您可以简单地扫描整个像素线(在空间域中)寻找最小振荡并且最小振荡的倒数是最大频率,我是否正确?
Ex值{23,26,28,22,48,49,51,49}
频率:与设置{}
有关(1/2)= .5:{28,22}
(1/4)=。25:{22,48,49,51}
那么.5是最大频率吗?
对于像上面那样的像素线来计算这个的理想方法是什么?
从理论上讲,如果您的采样输入是无限的(更像现实世界),该怎么办?一个有效的过程是否有点像:
Predetermine a decent interval for point sampling
Determine max frequency from point sampling
while(2*maxFrequency > pointSamplingInterval)
{
pointSamplingInterval*=2
Redetermine maxFrequency from point sampling (with new interval)
}
我知道这些算法充满了低效率,那么一些首选方法是什么? (不寻找疯狂优化的东西,只是从根本上更好的概念)
答案 0 :(得分:2)
采用傅立叶变换(实际上是FFT或快速傅立叶变换)的正确方法是
理论的工作原理如下:如果你有一组带有彩色/灰度的像素,那么我们可以说图像是由“空间域”中的像素表示的;也就是说,每个单独的数字指定特定空间位置的图像。
然而,我们真正想要的是在“频域”中表示图像。而不是指定每个像素的每个单独的数字,每个数字代表整个图像中特定频率的幅度。
从“空间域”转换为“频域”的工具是傅立叶变换。 FT的输出将是一系列数字,指定不同频率的相对贡献。
为了找到最大频率,你执行FT,并查看你获得的高频振幅 - 然后只需从最高频率搜索到你达到“最小有效振幅” “门槛。
您可以编写自己的FFT代码,但在实践中使用预打包的库(例如FFTW
)要容易得多答案 1 :(得分:2)
您不扫描最高频率的信号,然后选择采样频率:您选择的采样频率足以捕获您想要捕获的内容,然后过滤信号删除高频。在采样之前,你扔掉的所有物品都高于采样率的一半。
我认为你可以这样做 只需扫描整个像素线(in 寻找一个for的空间域 最小振荡和 最小振荡的倒数 会是最高频率吗?
如果您有一行像素,则已完成采样。应用抗混叠滤波器为时已晚。可能出现的最高频率是采样频率的一半(我猜是“1 / 2px”)。
从理论上讲,还有什么 如果您的采样输入是无限的 (更像现实世界)?
是的,那是你使用过滤器的时候。首先,你有一个连续的功能,如真实的图像(无限采样率)。然后你过滤它以删除fs / 2以上的所有内容,然后你在fs上采样(将图像数字化为像素)。相机实际上并没有进行任何过滤,这就是为什么在拍摄砖块等时获得Moire patterns的原因。
如果你是抗锯齿的计算机图形,你必须首先考虑理想的连续数学函数,并思考如何过滤它并将其数字化以在屏幕上产生输出。
例如,如果要使用计算机生成方波,则不能只是天真地在最大值和最小值之间切换。这就像在没有先过滤的情况下对真实信号进行采样。高次谐波会回绕到基带中,并在频谱中引起大量的杂散尖峰。您需要生成点,就像它们是从过滤的连续数学函数中采样一样:
答案 2 :(得分:1)
我认为来自O'Reilly网站的这篇文章也可能对你很有用...... http://www.onlamp.com/pub/a/python/2001/01/31/numerically.html ...在那里他们指的是声音文件的频率分析,但你给它提供了想法。
答案 3 :(得分:0)
我认为您需要的是傅里叶分析(http://en.wikipedia.org/wiki/Fourier_analysis)的应用。我已经研究了这个,但从未使用它,所以拿一小撮盐,但我相信如果你正确地将它应用到你的数字组,你会得到一组频率,这是系列的组成部分,然后你可以选择最高的一个。
我不能指出你做的一段代码,但我确信它会出现在那里。