如果徽标失真,如何检测?

时间:2015-03-18 07:26:00

标签: opencv image-processing machine-learning computer-vision object-detection

如果徽标失真(如拉伸,滚动,挤压),如何检测徽标?

我使用SIFT作为检测功能,因为它是缩放不变的。

下面是一个例子,徽标出现在瓶子里,它沿着瓶子的曲率伸展。

另外,产品的材料也会影响结果,例如,它可能会反射光线。

如何解决这两个问题?如果有人能给我详细的步骤,我将不胜感激,谢谢!

徽标:

enter image description here

示例

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为在尝试检测徽标之前,你应该让情况稍微容易一些 - 开始的一个好点可能是应用透视变换来减少徽标的变形。以下是将透视transofrm应用于图像的代码:

import cv2
import numpy as np

src = np.array([[8,125], [68,30], [576,261], [510,396]], np.float32)
dst = np.array([[0,0], [100, 0], [100, 400], [0, 400]], np.float32)
perspective_transform = cv2.getPerspectiveTransform(src, dst)
img = cv2.imread('d:\\temp\\logo_lamer.png')
final_img = cv2.warpPerspective(img, perspective_transform, (100, 400))
cv2.imwrite('d:\\temp\\logo_lamer2.png', final_img)

积分是硬编码,但发现它们并不是很难 - 我只是使用了瓶子的最左侧,最顶部,最右侧和最底部的点。这是带点的图像:
enter image description here
这是转型的结果:
enter image description here
正如你所看到的那样,它并不完美(字母" L"和" R"并不是完全可见的),但它可以使用一些有益于物体提取的方法。使用抓取可能是一个好主意,但很可能很多技术在这种情况下表现良好。或者在找到点之后,您可以尝试确保它们形成(旋转)矩形,因此请确保所有角度都相等(或接近)90度 - here就是如何做到的。

现在从this qeustion应用一些技术要容易得多(我会尝试扫描线和筛选/冲浪技术,但这只是我的猜测)。或者,您可以尝试使用广义Hough Transfom(GHT),模板匹配或使用Haar类特征,LBP(本地二进制模式)或HOG训练您自己的分类器。

答案 1 :(得分:0)

在你的问题中,你说你使用SIFT。结果还不够好?

使用SIFT检测器和描述符得到了这个结果:

SIFT matching result

不够好?