RANSAC算法

vie*_*iew 13 image-processing detect homography ransac corner-detection

任何人都可以告诉我如何使用RANSAC算法在两个具有一定重叠部分的图像中选择共同的特征点吗?问题来自基于特征的图像拼接.
替代文字 替代文字

eri*_*rik 22

几年前我实施了一个图像拼接器.关于维基百科上的RANSAC的文章很好地描述了一般的算法.

当使用RANSAC进行基于特征的图像匹配时,您需要的是找到最佳将第一个图像转换为第二个图像的变换.这将是维基百科文章中描述的模型.

如果您已经获得了两个图像的功能,并且发现第一个图像中的哪些功能与第二个图像中的哪些功能最匹配,则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
Run Code Online (Sandbox Code Playgroud)

最终结果是最好将image2中的点转换为image1的转换,这在拼接时非常符合您的要求.