我想从这种图片中捕获数字。
我从以下链接尝试了多尺度匹配。
http://www.pyimagesearch.com/2015/01/26/multi-scale-template-matching-using-python-opencv/
我只想知道红色数字。但问题是,openCV 识别/匹配模板的红色数字是模糊的。是否有其他可能的方法来检测黑色背景上的这个红色数字?
我想从这种图片中捕获数字。
我从以下链接尝试了多尺度匹配。
http://www.pyimagesearch.com/2015/01/26/multi-scale-template-matching-using-python-opencv/
我只想知道红色数字。但问题是,openCV 识别/匹配模板的红色数字是模糊的。是否有其他可能的方法来检测黑色背景上的这个红色数字?
分类数字
您在评论中澄清说您已经隔离了图像预检测的数字部分,所以我将从这个假设开始。
也许您可以通过将其视为手写数字来近似数字的透视效果和“模糊性”。在这种情况下,有一个著名的手写数字数据集用于分类训练,称为 mnist。
Yann LeCun 在mnist handwritten dataset 中列举了这个数据集的最新技术。
在频谱的远端,卷积神经网络产生的错误率极低(1% 的错误率)。对于更简单的解决方案,使用去偏斜、去噪、模糊和 2 像素移位的 k 近邻会产生大约 1% 的误差,并且实施起来明显更快。Python opencv 有一个实现。具有去偏斜的神经网络和支持向量机也有一些令人印象深刻的性能。
请注意,卷积网络不会让您选择自己的特征,因此此处重要的色差信息可能仅用于缩小感兴趣区域。定义特征空间的其他方法可能会更精确地结合已知的色差。
Python 在很棒的包 sklearn 中支持很多机器学习技术——这里是 sklearn 应用于 mnist 的示例。如果你正在寻找关于 Python 机器学习的教程解释,sklearn 自己的教程非常冗长
如果您使用这种方法学习,这些就是您尝试分类的项目类型。为了强调开始训练这些基于机器学习的分类器是多么容易,这里是链接 sklearn 包中示例代码的节选部分:
digits = datasets.load_digits() # built-in to sklearn!
data = digits.images.reshape((len(digits.images), -1))
# Create a classifier: a support vector classifier
classifier = svm.SVC(gamma=0.001)
# We learn the digits on the first half of the digits
classifier.fit(data[:n_samples / 2], digits.target[:n_samples / 2])
如果你喜欢 openCv(可能是因为你想在未来移植到实时系统),opencv3/python也有关于这个主题的教程!他们的演示使用 k-nearest-neighbor(列在 LeCun 页面中),但他们也有 svm 和 sklearn中的许多其他工具。他们使用 SVM 的 ocr 页面使用去偏斜,这可能对您的问题中的透视效果有用:
更新:我在您的图像上使用了上面概述的开箱即用的 skimage 方法,经过大量裁剪,并且正确分类了它。需要进行更多测试才能确定这在实践中是否可靠
^^ 那个小图像是您嵌入问题中的图像的 8x8 裁剪。mnist 是 8x8 图像。这就是为什么它在 skimage 中使用默认参数在不到一秒的时间内进行训练的原因。
我通过使用将其放大到 mnist 范围将其转换为正确的格式
number = scipy.misc.imread("cropped_image.png")
datum = (number[:,:,0]*15).astype(int).reshape((64,))
classifier.predict(datum) # returns 8
我没有从示例中更改任何其他内容;在这里,我只使用第一个通道进行分类,没有智能特征计算。15 左右看着我;您需要对其进行调整以达到目标范围或(理想情况下)提供您自己的训练和测试集
物体检测
如果您还没有隔离图像中的数字,您将需要一个对象检测器。关于这个问题的文献空间是巨大的,我不会从那个兔子洞开始(谷歌 Viola 和 Jones,也许?)这个博客涵盖了 Python 中“滑动窗口”检测器的基础知识。Adrian Rosebrock 看起来他甚至是 SO 的贡献者,并且该页面有一些很好的 opencv 和基于 python 的对象检测器的例子,相当教程(你实际上在你的问题中链接到那个博客,我没有意识到)。
简而言之,对图像中的窗口进行分类并选择置信度最高的窗口。用感兴趣的区域缩小搜索空间当然会在所有性能领域产生巨大的改进
您可以利用以下几件事来发挥自己的优势:
所以我建议你: