Java – 图像识别
我有大约5000张带有水印的图像和5000张相同的图像,没有水印。 每组图像的文件名不以任何方式彼此相关。 我正在寻找Java中的API,我可以使用它来将每个水印图像与非水标记对配对。
您可以使用OpenCV库。 它可以在Java中使用。 请关注http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html
关于图像比较,您可以在此处看到另一个有用的答案: 检查图像与OpenCV的相似性
我认为这更多是关于性能然后关于图像比较本身,答案是以这种方式编写的,所以如果你需要帮助比较本身评论我…
-
为每个图像创建简化的直方图
假设每个通道有8个值,每个强度级别限制为4位。 这将导致每个图像
3*8*4=3*32
位 -
排序图像
取上面的直方图,并将其视为单个数字,并按照升序或降序对
A
组的图像进行排序无关紧要 -
匹配
A
和B
分组图像现在相应的图像应该有相似的直方图,所以从未分类的组
B
(水印)中获取图像, bin搜索A
组(原始)中所有最接近的匹配,然后比较选择的图像而不是5000
更强大的方法进行比较。 -
如果
A
组中的图像已匹配,请添加标记所以你可以忽略子弹#3中已经匹配的图像来获得更快的速度
[笔记]
还有其他改进方法,比如使用Perceptual哈希算法