[英]how do I fit a grid of points on a random point cloud
我有一個帶點的二進制圖像,我使用OpenCV的goodFeaturesToTrack獲得,如Image1所示。
我想在它上面放一個4 * 25點的網格,例如Image2上顯示的網格(並非所有點都在圖像上可見,但它是一個常規的4 * 25點矩形)。
我的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.