我需要一个很好的函数,它在 Java 程序中实现:ImageJ。我需要了解那里使用的算法。该函数有几个参数: 链接文本
在使用 FFT 之前,它会将图像转换为特殊的图像:带通滤波器使用一种特殊的算法来减少边缘伪影(在傅里叶变换之前,通过在原始图像之外附加图像部分的镜像副本来扩展图像的大小,因此没有跳跃发生在边缘)
你能告诉我更多关于这个特殊变换的信息吗?实际上平铺镜像图像。
我正在写 C++,并希望用 C++ 重写程序的那部分。
EDIT1:我需要了解它是如何进行平铺镜像操作的,可能是特殊的。实际上,起初它将图像转换为新大小的图像,所以对于我的图像,它将是:从 600X480 转换为 1024X1024 大小的图像。这里如何使用平铺?
EDIT2:也很难理解 tileMirrored 函数的描述:
将 ImageProcessor (ROI) 放入位置 (x,y) 处大小为宽度 x 高度 y 的新 ImageProcessor。图像围绕其边缘进行镜像,以避免 FFT 的环绕效应。“......在位置(x,y)处大小宽度x高度y。”是什么意思?
EDIT3:我实现了那个带通滤波器,它给出了与原始程序相同的结果。但是,原始程序中的算法本身(也在我的程序中)非常慢我不想在我的程序中使用该过滤器一次,但每次调用它计算大约 0.5 到 2 秒(取决于参数值)。使用了 FHT 变换(不是 FFT),它比 FFT 更快吗?我觉得filter本身没有优化,请看filterLargeSmall函数实现: 源码