Quindi ho una matrice bidimensionale che rappresenta un piano di coordinate, un'immagine. Su quell'immagine, cerco pixel "rossi" e trovo (si spera) la posizione di un target LED rosso basato su tutti i pixel rossi trovati dalla mia fotocamera. Attualmente, sto semplicemente schiaffi miei mirino sul baricentro di tutti i pixel rossi:Centroide ponderato di una matrice
// 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 la maggior parte dei pixel rossi), sto ancora vedendo il mio mirino saltare fuori dal bersaglio quando un po 'di luce rossa lampeggia lateralmente a causa di bagliori o altre interferenze minori.
mia domanda è questa:
Come faccio a cambiare questo modello di cercare una più ponderata baricentro? In parole povere, voglio rendere i grossi blob di rosso molto più importanti di quelli più piccoli, forse anche ignorando del tutto i piccoli blob.
Se si dovessero "identici" punti rossi sulla sinistra e sulla destra del proprio aereo. L'algoritmo del centroide non disegnerebbe il mirino nel centro dell'immagine dove non c'è il rosso? Il problema persisterà ancora se si aggiungesse peso all'equazione anche se sarebbe meno probabile. – aLevelOfIndirection
Sì, questo è un caso in cui l'algoritmo si comporta in modo abbastanza orribile. Tuttavia, tutto questo riguarda una dimostrazione che ho intenzione di dare che coinvolge il tracciamento di un obiettivo specifico, e l'idea è che mentre ci saranno delle interferenze, non dovrebbe mai esserci nulla di simile al bersaglio sul campo (è un obiettivo molto distinto). L'idea qui è di fare in modo che l'algoritmo presti più attenzione alla mia più grande fonte di rosso, mantenendo comunque una certa capacità di mantenerlo "bloccato" se diventa più lontano o leggermente ostacolato. – Andrew