私はOpenCVのgoodFeaturesToTrackを使って取得したドットを持つ2値画像をImage1に示しています。ランダムな点群に点のグリッドを合わせるには
画像2に示すように、私はそのように上の4×25ドットのグリッドに合わせたい(必ずしもすべての点が画像上に表示されますが、それは通常の4つの* 25ポイントです矩形)。
4×25ドットのマイモデルグリッドによってパラメータ化される: 1 - 左上隅 2の位置を - 地平線 以下のコードを有する矩形の傾きは、その機能を示しますそのようなモデルを構築する。
この問題は、チェス盤の角の問題に近いようです。
モデルクラウドを入力画像に合わせてクラウドの位置と角度を取得する方法を知りたいと思います。 2つの画像の間の距離を簡単に測定できますが(入力1とモデルグリッドのオン)、この距離の最小値を見つけるために画像上のすべてのピクセルと角度を確認する必要はありません。
まず、私はイメージを通過する、すべての正の画素の位置のインデックスを作成します。
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