3

我正在为赌场监控软件编写一个模块。

一点上下文:

我从不同时间提取的视频中提取了几张图像。我有一个参考甲板,总是在一个我知道大小的固定位置。假设畸变、相机焦距和距离未知(这将是商业销售的软件包,因此这些参数未知)。

正在工作:

我已经应用了精明的边缘检测和水平线来获得两个甲板的像素高度。此外,前面甲板所有角的坐标也是已知的,因为它始终处于具有相同方向的固定位置。

当参考甲板与我要测量的甲板距离不同但更靠近相机时,问题就开始了。在这种情况下,由于其中一个牌组离相机更近,尽管后面的牌组包含更多卡片,但两个牌组可能看起来具有相同的像素高度。

这是一个视觉示例:

实际上,两副牌都有 52 张卡片,但靠近相机的那张为 83 像素,而后面的那张为 63 像素。

样张照片

我怎样才能标准化我在后台参考甲板的值?我发现了一个问题,它在图像内移动时计算大小,但这使用了我不熟悉的 openGL(如何将 2D 点反向投影到 3D?)。我正在尝试使用 Python 中的计算机视觉/图像处理库(我目前使用 ImageMagick 用于精明的边缘和霍夫线)来实现这一点(如果您认为 python 不合适,我愿意接受有关使用另一种编程语言的建议)。

编辑:

总结我想要实现的目标:我想知道这两个对象如何比较高度。我如何将后面的那个缩放到它与前面那个相邻的大小,以便我可以比较两者?

4

2 回答 2

9

我不熟悉 ImageMagick,所以我不能为你编写代码,但我解释了你要做什么:

有一点我们可以确定:每张卡片的真实尺寸!您知道所有卡片都具有相同的宽度和高度(在现实世界中),因此您唯一需要做的就是在图像中的第一个堆栈和第二个堆栈上找到上面卡片的宽度。由于这两个数字相互关联,现在您可以获得甲板 1 和甲板 2 周围的尺寸比。

使用这些比率,您可以标准化甲板的高度并将这些数字相互比较。

例如,考虑每张卡片的宽度(红色箭头)为 5 厘米,图像中第一副牌的宽度为 80 像素,第二副牌的宽度为 40 像素。所以比率是 2。现在为了比较那些黑线,只需将第二行的长度乘以 2,然后将结果数与第一行的长度进行比较。

在此处输入图像描述

你有很多方法来估计每个卡片组的宽度。提取宽度可能很难,所以我建议比较图案的宽度(黄色箭头),为此,我会这样做:

1- 在图像上做一个精明(因为卡片上的图画,卡片表面会有很多线条)

2-做一个膨胀,把所有这些画线粘在卡片的表面上,做一个单位对象

3- 做一个侵蚀来缩小那个物体,然后捕捉那个物体的宽度(这将是一个很好的卡片宽度估计)

于 2019-12-23T07:56:19.287 回答
0

我认为,您应该将参考牌组的面积与目标牌组进行比较。
但首先你应该计算参考甲板和目标甲板的距离。
如果您的数据集有标签,或者您的问题是监督。
我认为,如果你使用神经网络,你可以将两个甲板的距离设置为偏差值。
另外,我认为,您应该将两个甲板的两个最近像素的距离计算为两个甲板的距离。

于 2020-01-01T11:30:07.220 回答