【问题标题】:How to detect logo if it is distorted?如果徽标变形,如何检测徽标?
【发布时间】:2015-05-20 21:30:51
【问题描述】:

如果徽标变形(即拉伸、卷曲、挤压),如何检测它们?

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

下面是一个例子,标志出现在瓶子上,它沿着瓶子的曲率拉伸。

另外,产品的材质也会影响效果,比如可能会反光。

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

标志:

示例

【问题讨论】:

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


【解决方案1】:

我认为在尝试检测徽标之前,您应该让情况变得更容易一些 - 一个很好的起点可能是应用透视变换以减少徽标失真。这是将透视变换应用于图像的代码:

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 中的一些技术应该会容易得多(我会尝试扫描线和筛选/冲浪技术,但这只是我的猜测)。或者,您可以尝试使用广义霍夫变换(GHT)、模板匹配或使用类似 Haar 的特征、LBP(局部二进制模式)或 HOG 训练您自己的分类器。

【讨论】:

    【解决方案2】:

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

    使用 SIFT 检测器和描述符我得到了以下结果:

    不够好?

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 1970-01-01
      • 2015-12-02
      • 2015-04-29
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      相关资源
      最近更新 更多