如何使用图像处理从顶视图中找到铰接点或旋转轴?

时间:2019-07-11 06:30:54

标签: opencv image-processing computer-vision

我手头有一个问题,我需要使用图像处理来检测/预测铰链点或旋转点轴的坐标。图像如下图所示:

image enter image description here

我使用了一种方法,该方法开始于跟踪RoI中围绕配置文件中默认铰链坐标(手动输入)的几个特征点的圆弧运动(弧形)。这些跟踪点的圆周运动围绕通过铰链点的垂直轴发生。现在,我从初始位置开始跟踪这些点,直到连接杆与y轴成特定角度(15°/ 20°),然后在同一点的这些不同位置(起点和终点)之间绘制割线并绘制它的垂直平分线理想地穿过(同心)圆的中心,这是理想的铰接点。

Eg:
y_intercepts calculated for each point
H0 (322, 42)                        
H1 (322, 64) (within tolerance, closest to GT)
H2 (322, 48)
H_avg (322,52)
H_groundtruth (x,y): (322, 61)

我们需要+/- 3像素的精度或公差。 现在,我们在这种理想情况下实际操作所面临的问题是:

不同的跟踪点会产生不同的潜在铰接点(垂直黄线上的不同点)(其中很少几个与地面实况(黄色圆圈)非常接近),但它们的加权/平均值(绿色大圆圈)偏离了标记。坦率地说,这是一个太多的问题,我们确实获得了最接近地面真实性的问题,但是我们不确定这些点中的哪一个是最接近的,因为我们不使用默认的挂钩坐标(手动输入) )从配置文件。

enter image description here

2 个答案:

答案 0 :(得分:0)

一种解决方案是使用已经实现图像注册的框架,例如elastix。如果将其配置为刚性配准,则可以获得变换矩阵,因此可以得到旋转中心。

这里的问题是图像的只有一部分在移动。在进行配准之前,我只是简单地通过从两个图像的相减中计算出一个遮罩来遮盖感兴趣的区域,以仅保留实际移动的部分。

这种方法可以获得亚像素精度。您也可以将其重复多个角度并取平均结果。除了求平均值之外,您还可以使用RANSAC algorithm来了解哪些铰接点不存在(异常值)并排除它们。

Here is an example how to do a simple rigid transformation with elastix.

我希望这会有所帮助!

答案 1 :(得分:0)

我本打算仅作为评论,但最终超出了字符数限制:

从准确性的角度来看(抱歉,无法抗拒),问题似乎是您正在尝试使用平面欧几里得几何技术来解决射影几何问题。

这些特征轨迹仅是3D世界空间中的圆弧。由于投影,它们实际上是2D图像像素空间中的(嘈杂的)椭圆弧。

您的铰链旋转轴也不是单个像素,除非相机的光轴与铰链轴直接对齐。如果不是这种情况(如您所添加的照片中的透视图所示),则您的铰链轴实际上是像素空间中的一条线,而不是一个点,并且模型空间中不同轨迹的不同高度将以“不同”为中心该行上的像素。因此,要求+/- 3像素的铰链“点”精度尚不明确,因此通常以不考虑透视的方式来测量像素空间中的角度。

我仅提及这些细节,因为您似乎专注于精确测量。通常,这类2D逼近对于许多应用程序来说都是很好的选择,但单个摄像机的高精度和高精度(如果确实需要的话)需要对3D场景有更好的了解。 (或者,您可以使用一堆带有标签的地面真实图像来训练一个深层网络,并让它找出映射。)

现在,也许您根本不需要为应用程序提供如此高的准确性。在那种情况下,像其他答案中提到的那样简单的仿射几何技术可能就足够好了。