Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET]Riconoscimento scansione immagine
Forum - C# / VB.NET - [VB.NET]Riconoscimento scansione immagine

Avatar
oretovalley (Normal User)
Pro


Messaggi: 109
Iscritto: 12/04/2009

Segnala al moderatore
Postato alle 15:08
Venerdì, 16/07/2010
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?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 15:44
Venerdì, 16/07/2010
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 il 16/07/2010 alle 15:46


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 22:21
Venerdì, 16/07/2010
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...


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 22:31
Venerdì, 16/07/2010
Testo quotato

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 :)


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 0:30
Sabato, 17/07/2010
allora consiglio anch'io la soglia:rofl:


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:11
Sabato, 17/07/2010
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...


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 11:13
Sabato, 17/07/2010
Testo quotato

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" :)


Ingegnere Informatico
https://ldlagency.it
PM Quote