Domanda

Qualcuno può per favore mi mostrano come utilizzare RANSAC per selezionare i punti caratteristica comune nelle due immagini che hanno una certa porzione di sovrapposizione? Il problema è venuto fuori dalla caratteristica basata immagine cuciture.
alt text alt text

È stato utile?

Soluzione

I implementata un'immagine cucitrice un paio di anni fa. L'articolo sulla RANSAC su Wikipedia descrive bene l'algoritmo desiderato generale.

Quando si utilizza RANSAC per la corrispondenza dell'immagine caratteristica basata, ciò che si vuole è quello di trovare la trasformazione che meglio si trasforma la prima immagine per la seconda immagine. Questo sarebbe il modello descritto in questo articolo di Wikipedia.

Se avete già ottenuto le vostre caratteristiche per entrambe le immagini e hanno trovato che presenta nella prima immagine migliori partite che presenta nella seconda immagine, RANSAC sarebbe qualcosa di usato come questo.

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

Il risultato finale è la trasformazione che meglio TRANFORMS i punti in image2 image1 a, che è exacly quello che vuoi quando cuciture.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top