RANSACアルゴリズム
-
09-10-2019 - |
質問
ransacアルゴリズムを使用して、オーバーラップの特定の部分を持つ2つの画像で共通の特徴ポイントを選択する方法を教えてください。問題は、機能ベースの画像ステッチから発生しました。
解決
数年前にImage Stitcherを実装しました。ウィキペディアのランサックに関する記事では、一般的なアルゴルティフについてよく説明しています。
Feationベースの画像マッチングにRansacを使用する場合、最初の画像を最適な変換で2番目の画像に変換する変換を見つけることです。これは、ウィキペディアの記事で説明されているモデルです。
両方の画像の機能を既に持っていて、2番目の画像で機能する最初の画像のベストマッチでどの機能を見つけた場合、Ransacはこのようなものを使用します。
The input to the algorithm is:
n - the number of random points to pick every iteration in order to create the transform. I chose n = 3 in my implementation.
k - the number of iterations to run
t - the threshold for the square distance for a point to be considered as a match
d - the number of points that need to be matched for the transform to be valid
image1_points and image2_points - two arrays of the same size with points. Assumes that image1_points[x] is best mapped to image2_points[x] accodring to the computed features.
best_model = null
best_error = Inf
for i = 0:k
rand_indices = n random integers from 0:num_points
base_points = image1_points[rand_indices]
input_points = image2_points[rand_indices]
maybe_model = find best transform from input_points -> base_points
consensus_set = 0
total_error = 0
for i = 0:num_points
error = square distance of the difference between image2_points[i] transformed by maybe_model and image1_points[i]
if error < t
consensus_set += 1
total_error += error
if consensus_set > d && total_error < best_error
best_model = maybe_model
best_error = total_error
最終結果は、Image2のポイントをImage1に最適に伝える変換です。これは、ステッチするときに必要なものです。
所属していません StackOverflow