PDA

View Full Version : [.NET]Miglior metodo per confronto Colori da Foto


TheMonzOne
18-01-2021, 10:24
Buongiorno a tutti,
sto progettando un'app desktop, scritta in VB.NET o C#, che possa elaborare delle immagini ( scansioni o foto ) nelle quali sono presenti dei cerchi colorati ( in gradazione di verde ) dei quali dovrei riconoscere in maniera affidabile il colore per poi confrontarlo con dei colori reference ( caricati e memorizzati da un'immagine reference, sfruttando lo stesso algoritmo, in fase di calibrazione ).

L'idea di base è che ad ogni colore reference corrisponda un certo valore numerico ed il programma deve, per ogni immagine elaborata, restituire, per ogni cerchio, il suo corrispettivo valore numerico trovando a quale reference si avvicina maggiormente. Ho quindi pensato ad una sorta di "color difference", ma non so bene quale valore o metodo utilizzare per fare si che il confronto sia il più affidabile possibile.

Cercando su internet ho trovato questo Framework ( AForge.net (http://www.aforgenet.com/framework/) ) che mette a disposizione molti metodi utili ai miei scopi ( trovare i cerchi nell'immagine, restituirne il colore, ecc... ) ma purtroppo non so quale sia il miglior passo successivo. Purtroppo la board di supporto di quel progetto è stata chiusa proprio un anno fa, perciò chiedo se magari qualcuno ha o ha avuto esperienza nell'uso di quel framework o ne conosca magari qualcuno equivalente ed adatto ai miei scopi.

Di mio ho pensato di fare una semplice differenza tra i valori ARGB, ma sarà sufficientemente affidabile? L'elaborazione è eseguita su foto, quindi non immagini disegnate in paint con colori ben definiti e delineati, pertanto servirà un minimo di elaborazione o tolleranza.

Questa, per capirci, potrebbe essere una possibile immagine reference da elaborare.
https://i.postimg.cc/YvdNHdSz/reference.png (https://postimg.cc/YvdNHdSz)

Grazie a tutti!

misterx
18-01-2021, 12:15
se si vogliono risultati precisi meglio affidarsi alle reti neurali

http://www.stor.altervista.org/nn/nn.php

-MiStO-
19-01-2021, 23:19
beh potresti usare OpenCV, o il suo wrapper c# Emgu(mai usato, sempre preferito fare una dll in c++ e chiamarla poi dal codice c#)
in ogni caso ti lascio il link http://www.emgu.com/wiki/index.php/Main_Page

per quanto riguarda il tuo problema, direi a naso ed al volo:
- assicurati di prendere immagini nelle stesse condizioni di luce, o almeno le più stabili e costanti possibili al fine di minimizzare le differenze
- importa l'immagine reference, ripuliscila/filtrala ed estrai i valori nominali dei campioni da ogni cerchio (per esempio, sai che sono verdi, quindi potresti lavorare solamente sul canale G del RGB, potresti anche trovare tutti i cerchi, eliminare il resto e lavorare solo su questi...di possibilità ce ne sono)
- importi la tua nuova immagine, estrai il colore dall'area che ti interessa e lo confronti con le reference trovando il più simile (minimizzi la differenza)

!fazz
20-01-2021, 09:59
come wrapper di opencv esiste anche opencvsharp4