如何使用haskell对图像进行傅里叶变换

时间:2014-10-10 23:48:29

标签: haskell image-processing fft fftw repa

如何使用haskell对图像进行离散傅立叶变换。我相信两个库repa-devilrepa-fftw可能会有所帮助,但我不知道如何整合它们。我之所以喜欢这样,是因为我可以尝试混合图像(我有一个很好的想法,不是单独过滤图像然后对它们求平均值,我可以简单地根据频率进行加权平均。)

注意:一旦完成此操作,如何将其重新解释为图像。

注意:我实际上并不确定如何将dft完全应用于图像处理。我已经看过方程式并且知道如何评估它们,并且知道"意义"对于1D和2D的粗略想法。我也知道如何使用它来过滤出高或低的频率"以某种方式的图像。我只是不确定使用dft生成多么复杂的频率图像。

1 个答案:

答案 0 :(得分:1)

您也可以通过1D变换

变换2D图像(矩阵)
  1. 首先将图片转换为矩阵

    • FFT需要复杂的域
    • 因此对于BW图像设置虚部为0并且实部到像素强度
    • 如果您有彩色图像,则将每个色带处理为单独的图像
  2. 应用2D变换(DFT,DCT,...)

    • 这是C ++中的示例2D DCT by 1D DFT transform
    • 该答案底部的
    • 是此
    • 的详细信息
    • 您只需转换矩阵的所有行
    • 然后是所有列
    • +/-一些归一化常量缩放
  3. 现在在频域上做你的事情

  4. 转换回时域

    • 与子弹2几乎相同。
    • 只使用逆变换和逆归一化缩放常数
  5. 将矩阵转换回图像

  6. [注释]

    • FFT具有复杂的输出
    • 因此您需要从中提取颜色,例如intensity = sqrt (re*re+im*im);
    • 我使用DCT进行光谱分析更直观