好吧,我正在编写一个小型 Java 应用程序,它接受两个图像作为输入,比较它们,然后给出定量输出作为相似度的度量(例如,相似度为 50%)。
据我了解,FFT 是衡量两幅图像相似性的好方法。但是我不能为了上帝的爱弄清楚如何编码/实现它。
到目前为止,我已经实现了另一个功能,它基本上为我提供了两个直方图(每个图像一个)。我现在需要做的就是编写一种方法来对图像进行 FFT 运算并给出可量化的结果。
谁能帮我解决这个问题?我真的很想看到一些示例代码,如果不是至少在正确方向上的一点的话。非常感谢。
最佳答案
相似性不是一个确切的术语。例如:如果你有圆和椭圆,它们相似吗?它们都是圆形物体,所以从这个意义上说它们是——但如果我们只想过滤掉圆形,它们就不是。您必须定义一个度量(或多个度量 - 例如圆度、强度分布、大小、方向、对象数量、欧拉数等),然后为每个图像计算它。两个图像的相似性将是两个计算值之间的(某种)距离。这可能是欧氏距离(对于两个实际测量),或某种误差函数(强度分布的 RMS)。
如果您的测量值保持不变,您将必须选择使用哪些变换(旋转后的图像是否与原始图像相似?如果是,则简单的傅里叶变换不合适)。
测量图像的相似性很难,如果你必须这样做,我会阅读 image stitching .如果您只需要区分 BLOB-s,首先尝试计算一些简单的度量(我建议计算力矩 - 面积,方向;阅读 K-means clusteing ),或轮廓到质心距离的一维傅立叶变换(这有点困难)。
关于java - 用于测量相似性的 FFT 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5540150/