PU2*_*014 3 python math image-processing computer-vision photogrammetry
我正在为赌场监控软件编写一个模块。
一些上下文:
我从不同时间提取的视频中提取了几张图像。我有一个参考甲板总是在我知道大小的固定位置。假设相机的畸变、焦距和距离是未知的(这将是商业销售的软件包,因此这些参数是未知的)。
正在工作:
我已经应用了精明的边缘检测和 houghlines 来获得两个甲板的像素高度。此外,前面甲板的所有角落的坐标都是已知的,因为它始终处于相同方向的固定位置。
当参考平台与我尝试测量的平台的距离不同但离相机更近时,问题就开始了。在这种情况下,由于其中一副牌更靠近相机,因此尽管后面的一副牌包含更多牌,但两副牌似乎具有相同的像素高度。
这是一个视觉示例:
实际上,两副牌都有 52 张卡片,但靠近相机的那一张是 83 像素,而后面的那一张是 63 像素。
如何标准化我拥有的参考背景中的甲板的值?我发现了一个类似于在图像中移动时计算大小的问题,但这使用了我不熟悉的 openGL(如何将 2D 点反向投影到 3D?)。我正在尝试使用 Python 中的计算机视觉/图像处理库(我目前使用 ImageMagick 用于精明的边缘和霍夫线)来实现这一点(如果您认为 Python 不合适,我愿意接受关于使用另一种编程语言的建议)。
编辑:
总结我想要实现的目标:我想知道这两个对象如何比较高度。我如何将后面的一个缩放到它在前面一个旁边的大小,以便我可以比较两者?
我不熟悉 ImageMagick,所以我无法为您编写代码,但我解释了您将要做什么:
有一点是我们确定的:每张卡片的实际大小!您知道所有卡片都具有相同的宽度和高度(在现实世界中),因此您唯一需要做的就是找到图像中第一叠卡片和第二叠卡片的宽度。由于这两个数字相互关联,现在您可以得到甲板 1 和甲板 2 周围尺寸的比率。
使用这些比率,您可以标准化甲板的高度并将这些数字相互比较。
例如,考虑每张卡片的宽度(红色箭头)为 5 厘米,图像中第一副牌的宽度为 80 像素,第二副牌的宽度为 40 像素。所以比率是2。现在要比较那些黑线,只需将第二条线的长度乘以2,然后将结果数与第一条线的长度进行比较。
你有很多方法来估计每副牌的宽度。提取宽度可能很难,所以我建议比较图案的宽度(黄色箭头),为此,我会这样做:
1- 在图像上做一个精明的(因为卡片上的图画,你会在卡片表面有很多线)
2- 进行扩张以将所有这些绘图线粘贴在卡片表面并制作一个单位对象
3- 做一个腐蚀使那个物体缩小一点,然后抓住那个物体的宽度(这将是对卡片宽度的一个很好的估计)