3

我正在做一个识别电视频道的项目。我正在拍摄频道的照片,我试图避开背景并从徽标的中心获取样本。我认识 4 个不同的徽标,以下是模板:

频道1 通道2频道3频道4

我的模板匹配算法是如何工作的:
给定 4 个大小为 100x100 的模板,每个模板代表一个不同的电视频道,每个都有不同的阈值(概率)。用户正在从电视机中捕捉标志,然后算法是: - 在每个模板上运行 4 个独立的模板匹配,以接收每个模板与捕捉到的图像匹配的概率。- 对于每个信道概率,如果一个信道的概率低于该信道的阈值,则概率变为0;- 宣布被认可的标志是概率最高的标志。如果所有概率均为 0,则宣布“不识别”。

例如,如果我得到一个概率为 0.85 且阈值为 0.9 的通道,而第二个通道的概率为 0.8 和阈值为 0.75,则第二个通道“获胜”。

当我为其中一个标志拍照时,95% 的时间它都能识别出这些照片。

当前结果:

  • 当尝试检测第一个(“笑脸”标志)时,在 10 次检测中我得到了 10 次正确检测。对于正确模板和图像之间的模板匹配,我得到的概率在 0.91 到 0.94 之间。对于其他徽标,我得到的概率在 0.77 到 0.91 之间。
  • 当试图检测第二个(“绿色”标志)时,在 10 次检测中我得到了 10 次正确检测。对于正确模板和图像之间的模板匹配,我得到的概率在 0.78 到 0.91 之间。对于其他徽标,我得到的概率在 0.71 到 0.83 之间(但由于阈值高,检测成功)。
  • 当试图检测第三个(“圆形”标志)时,在 10 次检测中我得到了 9 次正确检测。对于正确模板和图像之间的模板匹配,我得到的概率在 0.83 到 0.92 之间。对于其他徽标,我得到的概率在 0.73 到 0.91 之间。
  • 在尝试检测第四个(“黑白”徽标)时,在 10 次检测中,我得到了 10 次正确检测。对于正确模板和图像之间的模板匹配,我得到的概率在 0.91 到 0.94 之间。对于其他徽标,我得到的概率在 0.78 到 0.92 之间。
  • 在尝试检测“负面”图像时,很多时候我得到一个徽标检测(这很糟糕)。例如,如果我拍摄一张完整白纸的图像,它会以超过 0.9 的概率检测到第一个、第三个和第四个徽标

如何改进或更改我的算法以在“负面”图像上获得更好的结果?

感谢您的帮助,

埃亚尔

4

1 回答 1

3

这完全取决于您如何从模板中计算通道概率。您是使用颜色直方图还是渐变直方图,然后查看模板和测试图像之间的直方图差异?

另一种方法是从测试图像中计算特征向量,例如梯度直方图和颜色直方图的串联。然后,手动创建一个训练数据库,在其中您知道标签(1、2、3 或 4,具体取决于图像中可见的标签),您可以将硬编码标签连同直方图特征输入分类器例程。我为此推荐LIBSVMscikits.learn实现在 Python 中很容易使用。

这将产生一个支持向量机分类器,它将新图像的特征向量与训练集的支持向量进行比较,并确定最有可能出现在图像中的正确标签。然后,如果您想要产生概率而不仅仅是预测标签的东西,您可以在此 SVM 之上拟合一个逻辑模型。

开始学习此类机器学习的两本好书是Duda、Hart 和 Stork的Pattern Classification和 Bishop 的Pattern Recognition and Machine Learning

可以在这里找到我为在 Python 中实现 Poselets 和定向梯度直方图而编写的一些凌乱的 Python 代码;也许您可以在那里获取一些代码部分,它将适合您的任务。

于 2012-03-18T02:00:23.890 回答