如何识别图像中的三种对象?

Posted

技术标签:

【中文标题】如何识别图像中的三种对象?【英文标题】:How to identify three types of objects in a image? 【发布时间】:2018-11-19 11:03:50 【问题描述】:

我想从卫星风图像中识别出三个不同的物体。问题是其中三个有点相似。我尝试使用模板匹配进行识别,但没有成功。三个对象如下。

这里物体的方向并不重要,但行中头部的类型很重要。你能建议一种方法吗?

【问题讨论】:

“我尝试了一些东西,但它没有工作”作为起点的错误描述有点过于宽泛。 在模板匹配中,我将这种类型的图像作为模板,并且只能识别少数对象(两个或三个)。我想从分布在图像中的大约 100 个对象中识别对象。 模板匹配在尺寸变化或旋转方面效果不佳。不过,它有可能对您的图像起作用。 cv2.MatchTemplate 返回一个接近图像大小的数组(图像高度 - 模板高度,图像宽度 - 模板宽度),每个数组元素都有一个分数。因此,如果您在图像中搜索模板的多个实例,您必须自己检查 cv2.MatchTemplate 结果。 minMaxLoc 实际上只会给你一个匹配。 keypoint + homography 是不错的替代品 【参考方案1】:

假设您的图像仅包含纯黑色和纯白色像素,

您可以找到每个轮廓及其边界矩形或 minAreaRect。

https://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=minarearect#minarearect

然后迭代轮廓,将矩形视为单独的图像。现在您对这些图像进行分类。您也可以使用模板匹配。

祝你好运!

【讨论】:

【参考方案2】:

您是否考虑过机器学习?

例如,一个用于数字识别的小型 cnn 可以使用您的一小部分图像进行“重新训练”,Keras 还具有数据增强功能,以帮助确保训练一个健壮的分类器。

有一篇非常好的博客文章 Yash Katariya 发现 @https://yashk2810.github.io/Applying-Convolutional-Neural-Network-on-the-MNIST-dataset/,其中加载了 MNIST 数据集并训练了网络,它经历了您需要使用 ML 来解决您的问题的所有阶段。

您提到您尝试过模板匹配,但您也提到旋转并不重要,这对我来说意味着可以旋转对象,这会导致 TM 失败。

您可以查看 LBP(本地二进制模式),或者可能是 OpenCV 的 Haar 分类器(但它对旋转很敏感)。

除了我建议的项目之外,还有一个很棒的教程 @https://gogul09.github.io/software/image-classification-python,它使用功能和机器学习,你可能会受益于应用到这个问题。

我希望虽然实际上并没有直接回答您的问题,但我已经为您提供了一套工具,您可以通过投入一些时间和阅读来解决这个问题。

【讨论】:

以上是关于如何识别图像中的三种对象?的主要内容,如果未能解决你的问题,请参考以下文章

jsp 的三种语法-头部的 page 指令-.jsp 中的常用脚本-jsp 中的三种注释- 四大域对象pageContext equestsessionapplicatio

如何识别扫描的 PDF 文件中的图像?

如何识别图像中的闭合连通分量?

详解 Java 中的三种代理模式

将图存储在内存中的三种方式,优缺点

详解 Java 中的三种代理模式!