Questo è un problema estremamente difficile. Facevo parte di un team che ci lavorava da diversi anni e dopo aver sviluppato e supportato altre applicazioni simili per molto tempo, posso dire che il rilevamento delle ammaccature è un problema particolarmente complicato e molto più difficile di quanto sembri inizialmente.
Far funzionare un algoritmo in condizioni di laboratorio o su immagini conosciute è una cosa; lo sviluppo di un sistema accurato e robusto per immagini "naturali" come le auto viste in un parcheggio richiederebbe probabilmente una squadra che lavora per diversi anni. Oltre al problema principale della creazione dell'algoritmo, esistono numerose altre difficoltà ingegneristiche.
Il codice di esempio che hai testato non è un brutto inizio. Se potessi trovare i bordi attorno al lato destro scuro dell'ammaccatura, potresti confrontare la mappa dei bordi della macchina con il ding con una mappa dei bordi di una buona macchina conosciuta ripresa dalla stessa angolazione con la stessa illuminazione. Il controllo dell'illuminazione sarà di grande aiuto.
I problemi da considerare includono:
- Illuminazione (molto più difficile di quanto sembrerebbe inizialmente)
- Superficie 3D prevista del pannello esterno assemblato (ad es. Da dati CAD)
- Criteri che caratterizzano un'ammaccatura: area, profondità, profilo, ecc.
- Criteri per falsi negativi e falsi positivi
- Mezzi per salvare i dati delle ammaccature e / o mappare le ammaccature su un modello dell'auto (o layout a farfalla)
- Metodologia e dispositivo per misurare le caratteristiche "vere" dell'ammaccatura: profondità, area, ecc.
- Ampio database di ammaccature da un campionamento casuale di veicoli
- Trattare con diversi colori e finiture di vernice
1. Illuminazione
Come Martin B ha notato correttamente sopra, l'illuminazione corretta è fondamentale per questo problema. Anche con una buona illuminazione strutturata, avrai grandi difficoltà a rilevare piccole ammaccature vicino a linee caratteristiche, spazi tra pannelli, maniglie e così via.
La voce di Wikipedia per l'illuminazione strutturata è un po 'sottile, ma è un inizio per comprendere il principio:
http://en.wikipedia.org/wiki/Structured_light
Le strisce chiare possono essere utilizzate per rilevare in-dings (ammaccature) e out-dings (brufoli). Per vedere un ding, avrai bisogno di un movimento relativo tra la sorgente luminosa e l'auto. O la luce + la telecamera si muovono insieme rispetto all'auto, oppure l'auto passa oltre la luce + la telecamera.
Sebbene gli in-out e gli out-out abbiano aspetti caratteristici se visti sul bordo di una striscia luminosa, la rilevabilità di una data ammaccatura dipende dalla dimensione e dalla profondità dell'ammaccatura rispetto alla larghezza della striscia luminosa. La curvatura di un'auto è complessa, quindi è abbastanza difficile presentare una striscia di luce coerente a una fotocamera. Man mano che la striscia di luce si sposta attraverso la carrozzeria, la curvatura e persino l'intensità della striscia di luce varieranno.
Una soluzione parziale è quella di garantire che la videocamera e la striscia luminosa siano sempre ad un angolo coerente rispetto alla normale (la perpendicolare 3D) della porzione della superficie da ispezionare. In pratica, sarebbe necessario un robot per spostare la telecamera in modo accurato rispetto alla superficie del corpo. Lo spostamento accurato del robot richiede la conoscenza della posa (posizione e angoli 3D) della carrozzeria, che costituisce di per sé un brutto problema.
Per qualsiasi ispezione per applicazioni automobilistiche, è necessario controllare completamente l'illuminazione. Ciò significa non solo posizionare le luci di tua scelta in luoghi noti, ma anche bloccare tutte le altre luci. Ciò significherà un recinto abbastanza grande. Poiché i pannelli dell'auto sono curvati verso l'esterno (quasi come una superficie sferica), rifletteranno la luce proveniente da fonti che li circondano. Per semplificare notevolmente questo problema, è possibile utilizzare una barra fluorescente ad alta frequenza all'interno di un involucro avvolto in velluto nero. Abbastanza spesso è necessario andare fino a questo punto per le applicazioni di ispezione.
2. Superficie 3D La superficie
esterna di un'auto è composta da curve complesse. Per sapere se un punto sospetto è un ding, devi confrontare quel punto con le caratteristiche note dell'auto. Ciò significa che dovresti abbinare l'immagine 2D da una fotocamera a un modello 3D visualizzato con una certa angolazione. Questo non è un problema risolto rapidamente, ed è abbastanza difficile fare bene che alcune aziende si specializzino in esso.
3. Caratterizzazione dei difetti
Per ricerche accademiche o test di laboratorio può essere sufficiente sviluppare un algoritmo che mostri promessa o migliori un metodo esistente. Per risolvere correttamente questo problema per un reale uso commerciale o industriale, è necessario disporre di una specifica altamente dettagliata per le dimensioni delle ammaccature che si desidera rilevare.
Quando abbiamo affrontato questo problema, non c'erano standard industriali o nazionali ragionevoli per ammaccature (deformazioni 3D). Cioè, non esisteva una tecnica concordata per caratterizzare un'ammaccatura per area, profondità e forma. Abbiamo appena avuto campioni che gli esperti del settore hanno concordato che erano cattivi, non troppo cattivi e marginali in termini di gravità. Anche definire la "profondità" di un ding è complicato, dal momento che un ding è un rientro 3D (in genere) di una superficie 3D che curva verso l'esterno.
Le ammaccature più grandi sono più facili da rilevare, ma sono anche meno comuni. Un lavoratore automobilistico esperto può scansionare rapidamente una carrozzeria - molto più rapidamente di un osservatore non addestrato - e trovare rapidamente dighe superficiali delle dimensioni del tuo mignolo. Per giustificare il costo di un sistema automatizzato, probabilmente dovresti abbinare l'abilità di un osservatore esperto.
4. Criteri per errori di rilevamento
All'inizio è necessario impostare criteri per falsi negativi e falsi positivi accettabili. Anche se stai solo studiando questo problema come progetto di ricerca e sviluppo e non intendi sviluppare un prodotto, prova a definire i criteri di rilevamento.
falso negativo: ammaccatura presente, ma non rilevata falso positivo: area intatta identificata come ammaccatura
Di solito c'è un compromesso: aumenta la sensibilità e troverai più dings (diminuisci falsi negativi), ma troverai anche più dings che non ci sono (aumenta i falsi positivi). È abbastanza facile convincersi che un algoritmo funziona meglio di quanto non faccia realmente: il nostro naturale pregiudizio è notare i difetti rilevati dall'algoritmo e spiegare quelli che non ha rilevato. Effettuare test ciechi e automatizzati. Se possibile, chiedi a qualcun altro di misurare i dings e assegnare la gravità in modo da non sapere quali sono le vere misurazioni.
5. Salvare i dati e / o
mapparli Un'ammaccatura è caratterizzata dalla sua gravità e dalla sua posizione sulla carrozzeria. Per conoscere la sua posizione, è necessario risolvere il problema di corrispondenza da 2D a 3D sopra menzionato.
6. Determinazione della forma "vera" delle ammaccature Le ammaccature
sono difficili da misurare. Un'ammaccatura affilata e un'ammaccatura arrotondata della stessa superficie e profondità appariranno diverse. Misurare le ammaccature con mezzi meccanici porta a giudizi soggettivi ed è anche abbastanza noioso usare misuratori di profondità, righelli, ecc., Quando probabilmente dovrai misurare dozzine se non di più.
Questo è uno dei problemi ingegneristici più difficili da risolvere per qualsiasi progetto di rilevamento dei difetti per la produzione: come si misura un difetto e lo caratterizza? se esiste uno standard per farlo, lo standard è ben correlato a qualcosa che il sistema di ispezione misura? se il sistema di ispezione non trova una risposta "dovrebbe" aver trovato, di chi è la colpa?
Detto questo, se un sistema di ispezione funziona abbastanza bene per un campione di difetti noti, gli utenti possono eventualmente fidarsi di esso e il sistema stesso diventa lo standard per la definizione della gravità del difetto.
7. Ampio database di ammaccature
Idealmente si dovrebbero avere centinaia se non migliaia di immagini di esempio di ammaccature di gravità diversa in posizioni diverse su veicoli di produttori difficili. Se sei interessato a trovare ammaccature causate da incidenti durante il processo di assemblaggio, potrebbe richiedere molto tempo per raccogliere quel tipo di dati. Le ammaccature causate durante il processo di assemblaggio non sono comuni.
Se sei interessato solo a trovare ammaccature causate da incidenti o danni ambientali, allora è una questione diversa. I tipi di ammaccature saranno diversi da quelli causati da urti accidentali all'interno di un impianto di assemblaggio automatico.
8. Trattare con diversi colori di vernice
È vero che i rilevatori di bordi possono essere ragionevolmente robusti nel rilevare bordi in immagini con diversi livelli di contrasto, ma può essere abbastanza scoraggiante vedere cosa significano realmente "diversi livelli di contrasto" per le diverse vernici e finiture automobilistiche . Una striscia di luce che sembra grande su una macchina nera lucida potrebbe essere difficilmente rilevabile su una macchina bianca con vernice vecchia.
La maggior parte delle telecamere ha una gamma dinamica relativamente limitata, quindi è difficile ottenere un buon contrasto sia per le superfici nere lucide che per quelle opache bianche. È molto probabile che dovrai controllare automaticamente l'intensità dell'illuminazione. Anche questo è difficile.