2011-01-11 16 views
11

¿Alguien puede mostrarme cómo usar el algoritmo RANSAC para seleccionar puntos comunes en dos imágenes que tienen una cierta porción de superposición? El problema surgió de las costuras de imágenes basadas en características.
alt text alt textAlgoritmo RANSAC

+0

Su pregunta es demasiado vaga. ¿Qué quieres decir con la superposición de las esquinas? – koan

+0

Gracias por señalar eso. Modifiqué la pregunta. – view

Respuesta

20

he implementado una grapadora imagen de un par de años atrás. El artículo sobre RANSAC en Wikipedia describe bien el algortihm general.

Al utilizar RANSAC para la coincidencia de imágenes basada en características, lo que desea es encontrar la transformación que mejor transforme la primera imagen en la segunda. Este sería el modelo descrito en el artículo de wikipedia.

Si ya tiene sus características para ambas imágenes y ha encontrado qué características de la primera imagen coinciden mejor con las características de la segunda imagen, RANSAC se usará de la siguiente manera.

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 

El resultado final es la transformación que mejor tranforms los puntos en imagen2 a image1, que es lo que quiere exacly al coser.