Oppure

Loading
16/07/10 13:08
oretovalley
Ciao a tutti, stavo provando a riconoscere se due immagini sono uguali, nel mio caso sto scansionando la tessera sanitaria. Tengo una copia nel pc che all'apertura del software vado a caricare in una picturebox, successivamente scansiono nello scanner la tessera inserita e la carico in un'altra picturebox, e quindi faccio un confronto di tutti i pixel delle due picturebox. Però il metodo non funziona molto bene a volte mi dice che ci sono ben 90 pixel diversi nonostante l'immagine sia posizionata nella stessa posizione di quella salvata, a volte solo 20 ecc... Vorrei capire il metodo che sto usando è errato?? Voi come fareste?
aaa
16/07/10 13:44
HeDo
purtroppo a causa del rumore termico due immagini dello stesso soggetto non saranno mai identiche pixel a pixel. Nel caso dello scanner non si presentano fenomeni di luminosità diversa in quanto è un ambiente di scansione controllato, ma nel caso di fotografie bisognerebbe anche equalizzare i livelli.

Tornando al tuo problema, una soluzione banale quanto efficace sarebbe fissare una soglia di somiglianza, sopra la quale le due immagini corrispondono.
Ovviamente questo coefficiente va calcolato sul numero di pixel dell'immagine, ad esempio se metti 95% e l'immagine è 800x600 = 480000 pixel, due immagini possono differire al max di 24000 pixel :)

questo metodo è molto rozzo, non considera ad esempio se la seconda scansione è venuta leggermente ruotata rispetto alla prima, questo sballerebbe completamente queste stime :)

il problema è più complesso di quanto sembra, e ha anche delle implicazioni sulla visione robotica niente male... ma se punti ad un sistema semplice e non troppo sofisticato, il metodo della soglia va bene.
Ultima modifica effettuata da HeDo 16/07/10 13:46
aaa
16/07/10 20:21
walker93
forse sto per dire una cavolata...ma non mi sentirei a posto con la coscienza se potessi darti una mano e non l'ho fatto.

io proverei a convertire le due immagini in due array di byte e poi controllare byte per byte se sono uguali. dovrebbe essere molto preciso come metodo in quanto basta che differiscano solo per un bit e tu lo sapresti; forse il tempo di elaborazione è molto alto
se sono solo:
800x600 = 480000 pixel
ogni pixel vale 4 byte quindi 480000 x 4= 1'920'000 byte
non so in quanto tempo riesce a controllarli tutti...
aaa
16/07/10 20:31
HeDo
Postato originariamente da walker93:

io proverei a convertire le due immagini in due array di byte e poi controllare byte per byte se sono uguali. dovrebbe essere molto preciso come metodo in quanto basta che differiscano solo per un bit e tu lo sapresti; forse il tempo di elaborazione è molto alto
se sono solo:
800x600 = 480000 pixel
ogni pixel vale 4 byte quindi 480000 x 4= 1'920'000 byte
non so in quanto tempo riesce a controllarli tutti...


ma questo non era in dubbio, infatti lui fa così ora e io gli ho proposto solo una piccola variazione di questo sistema.

la domanda era "come fare un sistema affidabile?" non come implementarlo :)
aaa
16/07/10 22:30
walker93
allora consiglio anch'io la soglia:rofl:
aaa
17/07/10 7:11
Il Totem
Io posso consigliarti un metodo simile, ma la soglia dovrebbe essere su un singolo pixel, ossia, ad esempio, se due colori sono al 95% "simili", allora li considera uguali. Puoi utilizzae la conversione da RGB a HSL per questa tecnica. Mi sembra di aver postato qualcosa di simile in passato...
aaa
17/07/10 9:13
HeDo
Postato originariamente da Il Totem:

Io posso consigliarti un metodo simile, ma la soglia dovrebbe essere su un singolo pixel, ossia, ad esempio, se due colori sono al 95% "simili", allora li considera uguali. Puoi utilizzae la conversione da RGB a HSL per questa tecnica. Mi sembra di aver postato qualcosa di simile in passato...


ottima idea, quindi due soglie: una sul pixel e una sul totale di pixel "simili" :)
aaa