我正在编写一个用于赌场监控软件的模块。
一些上下文:
我从不同时间提取的视频中提取了几张图像。我的参考平台总是固定在我知道尺寸的固定位置上。假设相机的失真,焦距和距离未知(这是一个商业销售的软件包,因此这些参数未知)。
当前正在工作:
我已经应用canny边缘检测和粗线来获取两个卡座的像素高度。另外,由于甲板始终位于相同方向的固定位置,因此前面甲板所有角的坐标也是已知的。
当参考平台与我要测量的平台不在同一距离但更靠近相机时,问题就开始了。在这种情况下,由于其中一个卡座更靠近相机,因此两个卡座似乎都具有相同的像素高度,尽管背面的一个卡座包含更多的卡。
这是一个直观的示例:
实际上,两个卡座都有52张卡,但是距离相机最近的卡座为83像素,而背面的卡座为63像素。
如何在后台标准化我要参考的牌组的值?我发现了一个问题,该问题在图像内移动时执行与尺寸计算类似的操作,但这使用了我不熟悉的{How do I reverse-project 2D points into 3D?)openGL。我正在尝试使用Python中的计算机视觉/图像处理库(我目前使用ImageMagick来处理边缘边缘和轮廓线)来实现这一目标(如果您认为python不适合,我可以建议使用其他编程语言)。>
编辑:
总结一下我要达到的目标:我想知道两个对象如何比较高度。如何将后面的一个缩放到与前面的一个相邻的大小,以便我可以比较两个?
答案 0 :(得分:8)
我不熟悉ImageMagick,所以我无法为您编写代码,但我解释了您将要做什么:
我们对此有把握:每张卡的实际大小!您知道所有卡片都具有相同的宽度和高度(在现实世界中),因此您唯一需要做的就是在图像的第一叠和第二叠上找到上层卡片的宽度。由于这两个数字是相互关联的,因此现在您可以获得1号和2号甲板周围尺寸的比率。
使用这些比率,您可以标准化甲板的高度,并将这些数字相互比较。
例如,考虑每张卡的宽度(红色箭头)为5厘米,第一张纸牌的图像宽度为80像素,第二张纸牌的宽度为40像素。因此比率为2。现在,为了比较这些黑线,只需将第二行的长度乘以2,然后将结果数与第一行的长度进行比较。
您有很多方法可以估算每个纸牌的宽度。提取宽度可能很困难,因此我建议比较图案的宽度(黄色箭头),为此,我将使用以下方法:
1-对图像进行精打细算(由于卡片上的图纸,您将 卡表面有很多线)
2-进行扩张以将所有这些绘图线粘贴到 卡并制作单位对象
3-进行腐蚀以使该对象稍微收缩,然后抓住 该对象的宽度(这将是对 卡)
答案 1 :(得分:0)
我认为,您应该将参考牌组的面积与目标牌组进行比较。
但是首先,您应该计算参考卡座和目标卡座的距离。
如果您的数据集带有标签,或者您的问题是受监督的。
我认为,如果您使用神经网络,则可以将两个面板的距离设置为偏差值。
另外,我认为,您应该将两个卡座的两个最近像素的距离计算为两个卡座的距离。