检测图像中粘贴的形状(或对象)

The*_*e G 5 opencv image image-processing computer-vision

我正在尝试找到一种方法来可靠地确定图像中拼图的位置。拼图的形状和找到它的难易程度各不相同。opencv 模块中的哪些算法可以帮助我完成手头的任务?或者我想做的事情超出了模块的范围?

示例图片如下:

1

2

3

更新

原标题是“用 Opencv Python 检测模糊形状”。然而,我对解决此类问题的图像处理概念感兴趣:如何在更大的图像中找到粘贴的图像?

假设如下:

  • 拼图形状始终具有相同的(矩形)边界尺寸即:基于模板的搜索方法可以工作)。
  • 拼图形状不会旋转到任何角度即:将找到直线(- ish)水平和垂直线。
  • 拼图形状总是“粘贴其他一些“原始”图像中(即:粘贴检测方法可以工作)。

解决方案可以是OpenCV(根据提问者的要求),但核心概念应该适用于使用任何适当的软件(即:可以循环遍历图像像素来处理它们的值,以实现所描述的解决方案)。

我自己使用JavaScript,但我当然会理解它openCV.calcHist()成为JS代码中的直方图函数。我可以毫无问题地将好的解释翻译成代码。我将把 OpenCV 代码视为实现工作想法的伪代码。

VC.*_*One 1

我将投入我自己的尝试。它在第一张图像上失败,仅在接下来的两张图像上工作正常。我对其他可能的基于像素处理的技术持开放态度。

我不使用 OpenCV,因此用文字(和图片)解释了该过程。读者可以用自己选择的编程语言/工具来实现解决方案。

背景
我想知道粘贴的图像中是否存在固有的东西(某些东西可能通过像素处理甚至频域分析来揭示,例如:傅里叶信号分析可以在这里提供帮助吗?)。

经过一些研究,我遇到了错误级别分析(或 ELA)。此页面为初学者提供了基本介绍

过程:只需 7 个简单的步骤,即可检测粘贴拼图的位置。

(1)拍摄一张提供的猫图片并以 JPEG 格式重新保存 3 次,如下所示:

  • 将副本 #1 保存为质量设置2的 JPEG 。
  • 重新加载(强制解码)副本 #1,然后将副本 #2 重新保存为质量设置5的 JPEG 。
  • 重新加载(强制解码)副本 #2,然后将副本 #3 重新保存为质量设置2的 JPEG 。

(2)使用原始猫图片作为基础层与重新保存的副本 #3 图像进行不同的混合模式图像将是黑色的,因此我们增加色阶

(3)增加级别以使ELA检测到的区域更加明显。
注意:我建议此时使用 BT.709 或 BT.601 灰度。没有必要,但在稍后模糊时它会给出“更干净”的结果。

(4)在对图像应用框模糊和增加级别之间交替,直到岛屿消失并保留大斑点。

(5)随着级别的增加,斑点本身也得到强调。

(6)最后使用高斯模糊来平滑选择区域

(7)标记斑点区域(绘制轮廓笔画)并与输入图像进行比较...