我正在寻找能够发现两个图像之间差异的算法或库(如“查找错误”游戏)并输出包含这些更改的边界框的协调。 我对使用Python,C或几乎任何其他语言的算法持开放态度。
答案 0 :(得分:3)
如果您只想显示差异,那么您可以使用以下代码。
FastBitmap original = new FastBitmap(bitmap);
FastBitmap overlay = new FastBitmap(processedBitmap);
//Subtract the original with overlay and just see the differences.
Subtract sub = new Subtract(overlay);
sub.applyInPlace(original);
// Show the results
JOptionPane.showMessageDialog(null, original.toIcon());
对于比较两个图像,您可以在Catalano Framework中使用ObjectiveFideliy类。 Catalano Framework在Java中,因此您可以在另一个LGPL项目中移植此类。
FastBitmap original = new FastBitmap(bitmap);
FastBitmap reconstructed = new FastBitmap(processedBitmap);
ObjectiveFidelity of = new ObjectiveFidelity(original, reconstructed);
int error = of.getTotalError();
double errorRMS = of.getErrorRMS();
double snr = of.getSignalToNoiseRatioRMS();
//Show the results
免责声明:我是这个框架的作者,但我认为这会有所帮助。
答案 1 :(得分:2)
有很多,适合不同的目的。您可以通过查看OpenCV开始,这是一个带有C,C ++ API的免费计算机视觉库,还可以绑定到Python和许多其他语言。它可以轻松地进行减法,并且还具有对点集进行边界或分组的功能。
除了简单的图像减法之外,OpenCV解决的一个特定用途是motion detection or object tracking。
您可以在Signal Processing stackexchange站点中询问更具体的与图像相关的算法相关问题。
答案 2 :(得分:1)
通过裁剪原始图像将两个图像“解析”为多个较小的图像。 每个“子图像”的大小将是扫描操作的“分辨率”。例如,如果原始图像是100像素x 100像素,则可以将分辨率设置为10 x 10,并且每个原始图像都有100个10 x 10子图像。将子图像保存到磁盘。
接下来,比较每对子图像文件,每个原始图像一个。如果存在文件大小或数据差异,则可以将“坐标”标记为原始图像上的差异。
此算法假设您没有查找单个像素差异的坐标。
答案 3 :(得分:0)