Python 测量图像中扑克牌组的高度

Python 测量图像中扑克牌组的高度,python,math,image-processing,computer-vision,photogrammetry,Python,Math,Image Processing,Computer Vision,Photogrammetry,我正在为赌场监控软件编写一个模块 一点背景: 我在不同的时间提取了视频中的几个图像。我有一个参考甲板总是在一个固定的位置,我知道的大小。假设失真、相机焦距和距离未知(这是一个商业销售的软件包,因此这些参数未知) 目前正在工作: 我应用了canny边缘检测和houghlines来获得两组图像的像素高度。另外,前面甲板所有角落的坐标是已知的,因为它始终处于同一方向的固定位置 当参考甲板与我试图测量的甲板不在同一距离,但离相机更近时,问题就开始了。在这种情况下,由于其中一个卡组更靠近相机,两个卡组可能

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

一点背景:

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

目前正在工作:

我应用了canny边缘检测和houghlines来获得两组图像的像素高度。另外,前面甲板所有角落的坐标是已知的,因为它始终处于同一方向的固定位置

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

以下是一个可视示例:

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

我如何规范化背景中用于引用甲板的值?我发现了一个问题,该问题与在图像中移动时计算大小类似,但它使用的是我不熟悉的openGL()。我正试图使用Python中的计算机视觉/图像处理库(我目前使用ImageMagick处理canny edge和hough线)实现这一点(如果您认为Python不适合,我愿意接受关于使用另一种编程语言的建议)

编辑:


总结一下我试图实现的目标:我想知道这两个物体在高度方面是如何比较的。如何将后面的一个缩放到与前面的一个相邻的大小,以便比较两者?

我不熟悉ImageMagick,因此无法为您编写代码,但我解释了您将要做的事情:

我们可以肯定的是:每张卡的实际大小!您知道所有卡片的宽度和高度都相同(在现实世界中),因此您只需在图像的第一层和第二层找到上面卡片的宽度。由于这两个数字相互关联,现在可以得到甲板1和甲板2周围尺寸的比率

通过这些比率,您可以规范化甲板的高度,并相互比较这些数字

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

你有很多方法来估计每个卡片组的宽度。提取宽度可能很困难,因此我建议比较图案的宽度(黄色箭头),为此,我将采用以下方法:

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

2-做一个放大,把所有的画线都粘在纸的表面上 将该卡制作为一个单位对象

3-做一次侵蚀,使物体收缩一点,然后抓住 该对象的宽度(这将是对 (卡片)


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

另外,我认为,你应该计算两个组的两个最近像素的距离,作为两个组的距离

很可能,您希望使用变换进行缩放。因此,如果你知道卡片的背面,并且能找到一个到平面的转移,你就可以估计到相机的距离。将距离作为归一化因子。有关仿射变换和自动拟合,请参阅Lukas Kanade等。@Dschoni感谢您的回复。你能详细说明一下找一个传送到编织物和估计到摄像机的距离吗?谢谢你的回复。一些赌场订购定制的扑克牌,因此扑克牌的大小可能不是标准的。在这种情况下可以做些什么?你能更详细地解释第2步和第3步吗?也许有一些例子?我编辑了答案。你不需要知道所有赌场所有牌的实际宽度。你需要做的唯一一件事是确保赌场中的所有卡都有相同的大小。第二步是在卡片上画一个单位对象,当你做第一步时,你会明白为什么我会这么建议。这是一个聪明的解决方案,但不幸的是,也是不正确的。两个甲板与摄像机的角度不同,因此甲板的高度、宽度和长度的相对尺寸不可比较。您需要首先纠正投影失真,这涉及到在安装在桌面上时校准相机。如果你已经进行了校准,就不再需要像这里建议的那样进行比较了。@CrisLuengo谢谢你的好意。当然,正如我提到的,这是一个“估计”,它不是完全精确的,但它有帮助。此外,我们知道卡片的真实世界形状是纯“矩形”,因此无需任何校准即可轻松补偿投影(借助于水平尺寸)。(一切都是估计,即使进行了校准,也无法在图像中找到三维尺寸的精确值)@Meisam您能否给出一个伪代码或解释,说明如何在不进行任何校准的情况下实现投影补偿?嗨@Mehdi,我更正了图形