Domanda

Così ho una matrice a 2 dimensioni che rappresenta un piano di coordinate, un'immagine. In quella immagine, sto cercando pixel "rossi" e trovare (si spera) la posizione di un obiettivo LED rosso sulla base di tutti i pixel rossi trovata da mia macchina fotografica. Attualmente, sto semplicemente schiaffi miei mirino sul baricentro di tutti i pixel rossi:

// pseudo-code

for(cycle_through_pixels)
{
   if( is_red(pixel[x][y]) )
   {
      vals++; // total number of red pixels
      cx+=x;  // sum the x's
      cy+=y;  // sum the y's
   }
}
cx/=vals; // divide by total to get average x
cy/=vals; // divide by total to get average y

draw_crosshairs_at(pixel[cx][cy]); // found the centroid

Il problema di questo metodo è che, mentre questo algoritmo, naturalmente, pone il baricentro più vicino al più grande blob (l'area con il maggior numero di pixel rossi), sto ancora vedere il mio mirino saltano fuori bersaglio quando un po 'di guizzi rossi fuori per il lato a causa di abbagliamento o altre interferenze minori.

La mia domanda è questa:

Come faccio a cambiare questo modello per cercare un altro ponderazione baricentro? In parole povere, voglio fare i più grandi macchie di colore rosso molto più importanti di quelli più piccoli, forse anche ignorando far-out piccoli blob del tutto.

È stato utile?

Soluzione

Si potrebbe trovare i componenti collegati a immagine e includono solo quei componenti che hanno una dimensione totale di sopra di una certa soglia nel vostro calcuation baricentro.

Altri suggerimenti

Credo che il modo più semplice (e forse ingenua) risposta sarebbe: invece di contare solo il valore del pixel, contano anche le circostanti 8 pixel (per un totale di 9). Ora, ogni valore può essere preso da 0 a 9, e comprende valori maggiori per blob dello stesso colore. Ora, invece di vals++ sarete incrementare il valore per il numero di pixel nella zona circostante troppo.

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