【发布时间】:2010-04-05 16:08:36
【问题描述】:
我需要一个很好的函数,它是在 Java 程序中实现的:ImageJ。 我需要了解那里使用的算法。 该函数有几个参数: link text
在使用 FFT 之前,它会将图像转换为特殊图像: 带通滤波器使用一种特殊的算法来减少边缘伪影(在傅里叶变换之前,通过在原始图像之外附加图像部分的镜像副本来扩展图像的大小,因此边缘不会发生跳跃)
你能告诉我更多关于这个特殊变换的信息吗? 实际上是平铺镜像。
我正在编写 C++,并希望用 C++ 重写程序的那部分。
编辑1: 我需要了解它是如何进行平铺镜像操作的,可能是特殊的。实际上,起初它将图像转换为新大小的图像,所以对于我的图像,它将是: 从 600X480 转换为 1024X1024 大小的图像。 这里如何使用平铺?
编辑2: tileMirrored 函数的描述也很难理解:
将 ImageProcessor (ROI) 放入位置 (x,y) 处大小为宽度 x 高度 y 的新 ImageProcessor。图像围绕其边缘进行镜像,以避免 FFT 的环绕效应。 “...在位置 (x,y) 处的大小宽度 x 高度 y。”是什么意思?
编辑3: 我实现了那个带通滤波器,它给出了与原始程序相同的结果。 但是,原始程序中的算法本身(也在我的程序中)非常慢 我不想在我的程序中使用该过滤器一次,但每次调用它会计算大约 0.5 到 2 秒(取决于参数值)。 使用了 FHT 变换(不是 FFT),它比 FFT 更快吗? 我觉得filter本身没有优化,请看filterLargeSmall函数实现: source code
【问题讨论】:
-
您想知道如何实现整个 Bandpass 功能,还是只是在边缘镜像和平铺的位?
-
我需要了解这两个,但使用镜像平铺更重要,因为我认为其他事情更明显。我需要了解它是如何进行平铺镜像操作的,可能是特殊的。实际上,起初它将图像转换为新大小的图像,所以对于我的图像,它将是:从 600X480 转换为 1024X1024 大小的图像。这里如何使用平铺?
标签: image-processing filtering imagej