如果徽标失真(如拉伸,滚动,挤压),如何检测徽标?
我使用SIFT作为检测功能,因为它是缩放不变的。
下面是一个例子,徽标出现在瓶子里,它沿着瓶子的曲率伸展。
另外,产品的材料也会影响结果,例如,它可能会反射光线。如何解决这两个问题?如果有人能给我详细的步骤,我将不胜感激,谢谢!
徽标:
示例:
答案 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)
积分是硬编码,但发现它们并不是很难 - 我只是使用了瓶子的最左侧,最顶部,最右侧和最底部的点。这是带点的图像:
这是转型的结果:
正如你所看到的那样,它并不完美(字母" L"和" R"并不是完全可见的),但它可以使用一些有益于物体提取的方法。使用抓取可能是一个好主意,但很可能很多技术在这种情况下表现良好。或者在找到点之后,您可以尝试确保它们形成(旋转)矩形,因此请确保所有角度都相等(或接近)90度 - here就是如何做到的。
现在从this qeustion应用一些技术要容易得多(我会尝试扫描线和筛选/冲浪技术,但这只是我的猜测)。或者,您可以尝试使用广义Hough Transfom(GHT),模板匹配或使用Haar类特征,LBP(本地二进制模式)或HOG训练您自己的分类器。
答案 1 :(得分:0)
在你的问题中,你说你使用SIFT。结果还不够好?
使用SIFT检测器和描述符得到了这个结果:
不够好?