【问题标题】:how do I fit a grid of points on a random point cloud如何在随机点云上拟合点网格
【发布时间】:2017-10-04 05:20:18
【问题描述】:

我有一个带点的二进制图像,我使用 OpenCV 的 goodFeaturesToTrack 获得,如 Image1 所示。

Image1 : Cloud of points

我想在其上放置一个 4*25 点的网格,例如 Image2 上显示的 on(并非所有点都在图像上可见,但它是一个常规的 4*25 点矩形)。

Image2 : Model grid of points

我的 4*25 点模型网格参数化为: 1 - 左上角的位置 2 - 矩形与地平线的倾角 下面的代码展示了一个构建这样一个模型的函数。

这个问题似乎接近棋盘角问题。

我想知道如何将我的模型点云拟合到输入图像并获取云的位置和角度。 我可以轻松测量两个图像之间的距离(输入图像和模型网格),但我想避免检查图像上的每个像素和角度以找到该距离的最小值。

def ModelGrid(pos, angle, shape):

    # Initialization of output image of size shape
    table = np.zeros(shape)

    # Parameters 
    size_pan = [32, 20]# Pixels
    nb_corners= [4, 25]
    index = np.ndarray([nb_corners[0], nb_corners[1], 2],dtype=np.dtype('int16'))
    angle = angle*np.pi/180

    # Creation of the table
    for i in range(nb_corners[0]):
        for j in range(nb_corners[1]):
            index[i,j,0] = pos[0] + j*int(size_pan[1]*np.sin(angle)) + i*int(size_pan[0]*np.cos(angle))
            index[i,j,1] = pos[1] + j*int(size_pan[1]*np.cos(angle)) - i*int(size_pan[0]*np.sin(angle))

            if 0 < index[i,j,0] < table.shape[0]:
                if 0 < index[i,j,1] < table.shape[1]:
                    table[index[i,j,0], index[i,j,1]] = 1

    return table

【问题讨论】:

    标签: python opencv image-processing optimization model-fitting


    【解决方案1】:

    我找到的一个比较有效的解决方案如下:

    首先,我创建一个所有正像素位置的索引,只是遍历图像。我将这些像素称为角点。

    然后我使用这个指数来计算平均倾斜角: 对于每个角落,我都会寻找在某些区域足够接近的其他角落,以定义十字。我管理,为每个像素找到直接位于其左侧、右侧、顶部和底部的像素。 我使用这个十字来计算倾斜角,然后使用所有获得的倾斜角的中值作为我的模型点网格的角度。

    一旦我有了这个角度,我只需使用这个角度和每个角的位置构建一个表格。 优化函数测量两个图像上的重合像素数,并返回最佳位置。

    这种方式适用于大多数示例,但返回的“最佳位置”必须是角点之一,这并不意味着它对应于最佳位置...主要是如果网格的左上角在角落的云不见了。

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 2023-03-19
      • 2016-04-07
      • 1970-01-01
      • 2021-11-19
      相关资源
      最近更新 更多