Come rimuovere l'abbagliamento e la luminosità in un'immagine (elaborazione preliminare dell'immagine)?


19

Ho un'immagine

inserisci qui la descrizione dell'immagine

Esiste un modo per rimuovere le macchie bianche luminose? Per favore aiutatemi grazie

Modificare:

Dopo aver operato con gaussian e aver quindi visualizzato usando imagesc ottenere il seguente output che mostra chiaramente i punti rossi luminosi Come posso liberarmene

inserisci qui la descrizione dell'immagine

Canale rosso:

inserisci qui la descrizione dell'immagine

Canale Verde:

inserisci qui la descrizione dell'immagine

Canale blu:

inserisci qui la descrizione dell'immagine

Modifica 2:

Rilevamento dei difetti utilizzando il filtro Gabor

inserisci qui la descrizione dell'immagine

Il suo istogramma:

inserisci qui la descrizione dell'immagine

Come calcolare la soglia appropriata in modo adattivo.?


L'installazione delle luci è nota?
Nav

No in realtà, non c'è modo di rimuoverli in punti attraverso il filtro, ecc?
vini

4
In generale, questo è un problema male posto. Hai troppe incognite e dovrai ricorrere a una soluzione euristica. Buona fortuna a scegliere una risposta.
nav

Risposte:


19

Supponiamo che le porzioni di abbagliamento siano le uniche aree sature nell'immagine. Il rilevamento può essere eseguito limitando l'intensità (codice in Mathematica):

saturated = Binarize[ColorConvert[img, "Grayscale"], .9]

inserisci qui la descrizione dell'immagine

Quindi abbiamo solo bisogno di sostituire le porzioni dell'immagine attorno alla maschera di saturazione (l'ingrandimento della maschera è fatto dalla funzione morfologica Dilation). Inpainting usando la sintesi texture (usando la funzione Inpaint) sembra funzionare bene in questo esempio, anche se non riesco a testarlo come input per il tuo algoritmo di rilevamento dei difetti:

Inpaint[img, Dilation[saturated, DiskMatrix[20]]]

inserisci qui la descrizione dell'immagine


esiste un metodo di inpaint in matlab?
vini,

Scusa, non conosco la risposta a questo.
Matthias Odisio,

Il rilevamento dei difetti è perfetto, tuttavia è necessario implementare la verniciatura in quanto non vi è alcuna funzione integrata in MATLAB
vini,

1
Sono contento che la risposta abbia risolto il problema. Per quanto riguarda la pittura in matlab, probabilmente è adatto per una domanda indipendente su SO. Vedi stackoverflow.com/search?q=matlab+inpainting come inizio.
Matthias Odisio,

2
Inpainting può essere fatto con ciò che è comunemente noto come "Blisson image blending" Tutorial qui , codice Matlab ed esempi qui .
Maurits,

4

Questa potrebbe essere una risposta un po 'semplicistica, ma potresti limitarti? per esempio:

img = imread('daRNS.png');
imflat = img; 
imflat(img>150) = 150; 
imagesc(imflat)

risulta in:

immagine appiattita

Sarebbe ovviamente meglio selezionare la soglia in modo adattivo. Ad esempio potresti guardare l'istogramma dell'immagine:

hist(double(img(:)),0:255)

istogramma

e prova a selezionare una soglia appropriata in base a quella.


per favore controlla la mia modifica 2
vini

@vini Prova a dare un'occhiata al cut-off in cui viene spiegato il 90% del segnale
tdc

potrei solo soglia ma il mio obiettivo finale è il rilevamento dei difetti .. che non aiuta in alcun modo se lo soglia
vini

3
Ma la tua domanda è "Come rimuovere l'abbagliamento e la luminosità in un'immagine (elaborazione preliminare dell'immagine)?" non come rilevare i difetti, che è un'altra (più difficile) domanda. @mrkulk di seguito sembra aver fornito una risposta quasi completa a questa domanda e anche di seguito.
TCD,

sì, la mia domanda è che ora come rilevare i difetti, tuttavia questo bagliore ostacola il risultato
vini

2

inserisci qui la descrizione dell'immagineSenza informazioni sull'illuminazione, è difficile. Tuttavia, se la forma dell'oggetto nell'immagine è nota, è possibile impostare un modello di forma dell'abbagliamento bianco (gaussiano) e fare una finestra scorrevole per trovare il possibile rilevamento dell'abbagliamento (seguito dalla fusione del colore dall'area adiacente). Dal punto di vista percettivo, deduciamo la forma 3D dalle immagini usando l'ombreggiatura. Se la forma dall'ombreggiatura è in grado di dare il gradiente della superficie, potremmo fare una finestra scorrevole e controllare il nostro modello di abbagliamento in ogni posizione.

Dopo il rilevamento del bordo astuto: -

inserisci qui la descrizione dell'immagine

Fondamentalmente, la sovrapposizione (area di sovrapposizione massima) tra l'immagine n. 1 e n. 2 sarà il difetto.


Descrivendo cosa sto cercando di fare: sto applicando un filtro gabor che viene utilizzato principalmente per la segmentazione delle trame per trovare difetti nei frutti, tuttavia l'abbagliamento pone un problema in quanto il filtro mostra i due punti bianchi anche come un potenziale difetto che idealmente non voglio
vini

hai provato a prendere solo i singoli canali (da RGB o YUV) e semplicemente operandoli?
mrkulk,

L'immagine più vivida è quella nel canale verde. Come si fa a funzionare e correggere?
vini

Ho provato a prendere l'immagine del bordo (astuto) con una soglia di 0,5. Come previsto, non ho visto il bagliore nell'immagine. Questo dovrebbe darti un forte precedente per le regioni che NON contengono riflessi.
mrkulk,

come mi aiuterà a produrre un'immagine senza abbagliamento?
vini

0

La mia opinione è che questo è un problema di visione artificiale in cui dovresti controllare l'illuminazione e avere una buona idea della massima luminosità di una luminosità dei pixel non abbagliante nell'immagine. Il rilevamento dei difetti è generalmente un problema di visione artificiale piuttosto che un problema di visione artificiale.

Ciò che vediamo come risultato dell'illuminazione è un'aggiunta di riflessi di luce speculari e diffusi (più un po 'di emittanza ma qui è trascurabile).

Il componente speculare è il bagliore, su una superficie lucida come questa mela, è molto più del riflesso diffuso (> 10x)

Ciò significa che se si imposta illuminazione, guadagno ed esposizione prima di questo, su una superficie diffusa, si può essere certi che nulla sarà nemmeno vicino a saturo. Quindi utilizzare una soglia fissa è in realtà la soluzione preferita qui, a condizione che tu abbia dimostrato con dati sufficienti che "nessun pixel non contenente bagliore" sarebbe superiore alla soglia. In sostanza si stanno impostando le condizioni di illuminazione e i parametri della telecamera in modo tale che la classificazione di un pixel diventi banale, in questo caso eseguita da una semplice soglia, piuttosto che da una più complessa funzione di pixel acquisita dalla macchina attorno ad esso.

Mi piace l'approccio di "vini", non c'è bisogno di mostrare i piani RGB. Solo una semplice soglia di gradazione di grigio funzionerebbe effettivamente qui.

1- progettate le condizioni di illuminazione, non ambientali

2- rendere estremamente banale il lavoro di classificazione (soglia)

3- misurare la funzione

4- confrontare con la tolleranza


0

Convertire prima lo spazio colore di laboratorio, mapminmax, quindi utilizzare il primo canale di luminosità. Ciò riduce i problemi di colore. Quindi usa alcuni limiti sul pixel più luminoso dell'80%. Controllare e testare un tuffo nell'istogramma, la soglia migliore è vicino alla parte inferiore del tuffo. Se non ci sono min locali in questa regione, l'immagine probabilmente avrà riflessi minimi ...... Martin

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.