簡體   English   中英

如何在隨機點雲上擬合點網格

[英]how do I fit a grid of points on a random point cloud

我有一個帶點的二進制圖像,我使用OpenCV的goodFeaturesToTrack獲得,如Image1所示。

Image1:積分之雲

我想在它上面放一個4 * 25點的網格,例如Image2上顯示的網格(並非所有點都在圖像上可見,但它是一個常規的4 * 25點矩形)。

Image2:點的模型網格

我的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

我找到的解決方案相對較好,如下所示:

首先,我創建一個所有正像素的位置索引,只是通過圖像。 我會稱這些像素為角落。

然后我使用這個指數計算平均傾斜角度:對於每個角落,我尋找在某些區域足夠接近的其他角落,以定義一個十字架。 我管理,為每個像素找到直接位於其左側,右側,頂部和底部的像素。 我使用這個十字來計算傾斜角度,然后使用所有獲得的傾斜角度的中值作為我的模型網格點的角度。

一旦我有這個角度,我只需使用這個角度和每個角落的位置建立一個桌子。 優化功能測量兩個圖像上的重合像素數,並返回最佳位置。

這種方式適用於大多數示例,但返回的“最佳位置”必須是其中一個角,這並不意味着它對應於最佳位置...主要是如果網格的左上角在雲中角落不見了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM