我需要实现一个非常简单的滤波器来抑制一系列频率。 然后我需要计算逆傅里叶变换并保存新图像。
我正在使用CImg库(C ++)。 到目前为止,我已经完成了:
const CImg<unsigned char> img(source_img);
CImgList<> F = img.get_FFT();
我被困在这里。 F是真实和虚构部分的两个CImg对象的列表,对吗?
有了这个F我如何抑制频率并重建新的图像?
P.S。这是一个家庭作业,所以我不想要一个解决方案,但要解释做什么, 怎么做以及为什么。
答案 0 :(得分:3)
由于它的作业,请随意尝试。
您需要开始工作的第一步是直接转换图像并获取原始输入。如果这不起作用,你很乐意及早赶上它。
第二步是将FFT的某些部分归零,将结果转换回来,看看它是如何不同的。 FFT中的每个像素代表输入中的频率,因此试验找到关系。然后解释与你自己的关系。
最后,一旦你弄清楚哪些像素想要归零以及要保留哪些像素,就要创建一个黑色&amp;白色蒙版,将其转换为灰度图像,然后将其模糊。 FFT域中的锐边在图像域中具有无限支持 - 实际上,这会导致额外的伪边缘。有一个模糊的边缘会更好。