python - 如何检测射击目标上的弹孔
问题描述
我目前正在处理我的第一个图像处理任务(在 Python 中使用 OpenCV,但我对任何库和语言都开放)。我的任务是计算用户上传的图像中一到几个射击孔的精确分数(到十分之一分)。问题是用户上传的图像可以在不同的背景上拍摄(尽管它永远不会匹配目标平均颜色的其余部分)。因此,我排除了互联网上找到的大多数解决方案以及我能想到的大多数解决方案。
我的问题总结
弹孔识别:
- 弹孔可以在不同的背景上
- 弹孔可以重叠
- 单个弹孔将始终具有相似的大小(所有计算的射击目标仅使用一种口径)
- 我能够计算出一个非常精确的射孔半径
射击目标:
- 我的应用程序将计算两种类型的射击目标(下面提供的图像)
- 拍摄目标的照片可以在不同的照明条件下拍摄
射击目标 1 示例:
射击目标 2 示例:
射击目标示例以在以下位置找到弹孔:
到目前为止我尝试了什么:
- 颜色分割
- 由于上述原因
- 差异匹配
- 为了能够实际比较目标图像(空的和开火的),我编写了一个算法,通过其外部最大圆(它的半径 + 子弹大小以像素为单位)裁剪目标
- 在那之后,我可能尝试了所有在互联网上找到的图像比较方法
- 例如:蛮力匹配、直方图比较、特征匹配等等
- 我在这里失败主要是因为两张比较图像上的颜色有点不同,还因为其中一张图像有时是在一个小角度拍摄的,因此圆圈没有重叠,它们被计算为差异
- 霍夫圆算法
- 因为我知道目标上射击的半径(以像素为单位),所以我想我可以使用这个算法简单地检测它们
- 经过几个小时/几天的使用 HoughCircles 函数的参数后,我认为如果不根据上传的图像更改参数,它永远不会对所有上传的图像起作用
- 弹孔的边缘检测和寻找轮廓
- 我在使用图像平滑算法(如模糊、双边滤波、变形等)时尝试了两种边缘检测方法(Canny 和 Sobel)。
- 之后,我试图找到边缘检测图像中的所有轮廓,并过滤掉具有相似中心点的目标圆圈
- 起初这似乎是解决方案,但在几个测试图像上它无法正常工作:/
在这一点上,我已经没有想法了,因此来到这里寻求任何可以推动我进一步发展的建议或想法。有没有可能对如此复杂的射击目标识别根本没有解决方案,或者我只是太缺乏经验而无法想出它?
预先感谢您的任何帮助。
编辑:我知道我可以简单地在射击目标后面放一张单色纸,然后以这种方式找到子弹。这不是我希望应用程序工作的方式,因此它不是我的问题的有效解决方案。
解决方案
推荐阅读
- azure - “在 Azure 中没有为 '/ZipDeployUI' 注册路由
- json - 如何将图像数组从 json 格式解析为 tabelview
- javascript - 如何在javascript中根据当前日期使月份、日期和日期动态化?
- python - Python Pip 第一次失败([Errno 2] 没有这样的文件或目录),然后在第二次尝试时工作 - 为什么?
- solr - Solr 查询结果中的同义词
- c# - 如何在 xamarin 表单中开发响应式页面
- android - 将许可协议从我的工作站转移到 Azure Pipeline 代理
- angular - 如何在Angular2中同时验证多个formControls?
- java - How can I receive the file contents in my Vaadin service?
- java - java 8u201和8u202的区别