有一个功能良好,我需要,这是实现在Java程序:ImageJ.我需要了解所使用的算法。函中有几个参数:链接文本

和以前使用FFT它转换成图像为一个特殊的一:带通滤波器使用一种特殊的算法,以减少边缘项目(前的傅里叶变换,像是扩大小通过附加的镜像副本的图像部以外的原始图像,因而没有跳出现在边缘)

你能告诉我更多关于这个特别的变换?实际上镜切片图像。

我写在C++,并希望重写程序的一部分在C++。

EDIT1:我需要了解它是如何做的切片中的镜像的图像操作,也可以是特殊的一个。实际上在第一个转换图像到一个新型的图像,使用我的照片,它将:皈依从600X480到1024X1024大小的图像。怎么切片是用在这里?

EDIT2:也很难理解这说明tileMirrored功能:

把ImageProcessor(ROI)进入一个新的ImageProcessor的尺寸宽x高度y position(x,y)。像是镜像其周围的边缘,以避免绕影响的FFT。"是什么意思...的尺寸宽x高度y position(x,y)。"?

EDIT3:我实现的,带通滤波器,它提供了同样的结果作为原始程序。但是,算法本身在原来的程序(还在我的节目)是非常缓慢 我要用于过滤器的不只一次在我的程序,但计算约为0.5至2秒每个电话(这取决于参数值)。有用的一个FHT变换(不FFT),这是更加迅速比FFT?我认为,该过滤器本身不是最优化,请参阅filterLargeSmall功能的执行情况:源代码

有帮助吗?

解决方案

我不知道究竟如何,这一职能的工作,但这基本的算法对一个类似的功能:

  1. 确定最小的力量的两个(称它newSize)是较大的比较大的两个方面的图像(电话他们xSize&ySize).

  2. 创建一个新场图像的大小newSize通过newSize和复制的内容图像的中心,新的图像(ie。左上的图像应该开始在 (newSize / 2 - xSize / 2, newSize / 2 - ySize / 2)).

  3. 填补剩余的像素,如下所示,每一像素at(x,y):

    • 如果 x < (newSize / 2 - xSize / 2), 复制素在列 (newSize / 2 - xSize / 2) + (newSize / 2 - xSize / 2) - x 和行y。
    • 如果 y < (newSize / 2 - ySize / 2), 复制素在行 (newSize / 2 - ySize / 2) + (newSize / 2 - ySize / 2) - y 和列x。
    • 如果上述两个是真实的复制素在列 (newSize / 2 - xSize / 2) + (newSize / 2 - xSize / 2) - x, 排 (newSize / 2 - ySize / 2) + (newSize / 2 - ySize / 2) - y.
    • 如果 x > (newSize / 2 + xSize / 2), 复制素在列 (newSize / 2 + xSize / 2) + (newSize / 2 + xSize / 2) - x 和行y。
    • 如果 y > (newSize / 2 + ySize / 2), 复制素在行 (newSize / 2 + ySize / 2) + (newSize / 2 + ySize / 2) - y 和列x。
    • 如果上述两个是真实的复制素在列 (newSize / 2 + xSize / 2) + (newSize / 2 + xSize / 2) - x 和行 (newSize / 2 + ySize / 2) + (newSize / 2 + ySize / 2) - y.

有可能是库,这将使这个更容易(即。翻阅和复印象数据),但是我不熟悉C++,这应该是很容易代码自己作为长期业绩不是一个巨大的问题。小心四舍五入问题的图像奇怪的尺寸:确定他们是一致的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top