java - 用于测量相似性的 FFT 图像

标签 java image image-processing fft

好吧,我正在编写一个小型 Java 应用程序,它接受两个图像作为输入,比较它们,然后给出定量输出作为相似度的度量(例如,相似度为 50%)。

据我了解,FFT 是衡量两幅图像相似性的好方法。但是我不能为了上帝的爱弄清楚如何编码/实现它。

到目前为止,我已经实现了另一个功能,它基本上为我提供了两个直方图(每个图像一个)。我现在需要做的就是编写一种方法来对图像进行 FFT 运算并给出可量化的结果。

谁能帮我解决这个问题?我真的很想看到一些示例代码,如果不是至少在正确方向上的一点的话。非常感谢。

最佳答案

相似性不是一个确切的术语。例如:如果你有圆和椭圆,它们相似吗?它们都是圆形物体,所以从这个意义上说它们是——但如果我们只想过滤掉圆形,它们就不是。您必须定义一个度量(或多个度量 - 例如圆度、强度分布、大小、方向、对象数量、欧拉数等),然后为每个图像计算它。两个图像的相似性将是两个计算值之间的(某种)距离。这可能是欧氏距离(对于两个实际测量),或某种误差函数(强度分布的 RMS)。

如果您的测量值保持不变,您将必须选择使用哪些变换(旋转后的图像是否与原始图像相似?如果是,则简单的傅里叶变换不合适)。

测量图像的相似性很难,如果你必须这样做,我会阅读 image stitching .如果您只需要区分 BLOB-s,首先尝试计算一些简单的度量(我建议计算力矩 - 面积,方向;阅读 K-means clusteing ),或轮廓到质心距离的一维傅立叶变换(这有点困难)。

关于java - 用于测量相似性的 FFT 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5540150/

相关文章:

java - 需要设计模式

image - 快速计算扭曲矩阵

jquery - 这个切换功能有什么问题吗?

java - 如何在android中使用opencv访问轮廓区域内的像素并写回原始图像

c - 如何从 jpg 图像中获取 RGB888(24 位)和 RGB565(16 位)帧缓冲区转储?

python - 如何从扫描图像中裁剪黑角?

java - 浏览器重启java后保持 session

Java Map之map(嵌套map)排序

java - Java 中的 JSON-RPC 客户端

java - 你能用Java检查一个文件是否真的是一个图像吗?