Come rimuovere un determinato sfondo dall'immagine?


11

arancia

Questa era l'immagine ottenuta dopo il filtraggio di Gabor ... Esiste un modo per rimuovere le linee all'interno dell'immagine tranne il difetto arrotondato bianco brillante.

Ho provato un altro orientamento del filtro gabor andare il seguente risultato:

inserisci qui la descrizione dell'immagine

Dopo il limite: che è abbastanza ok ma non eccezionale

inserisci qui la descrizione dell'immagine

Dopo il filtro mediano:

inserisci qui la descrizione dell'immagine

Grazie in anticipo


2
Ottimo lavoro con il filtro mediano. Sei sulla buona strada.
Ripensare il

Questo sembra un buon scenario per l'applicazione di un filtro di diffusione. Inoltre, provate a chiedere in: <br/> dsp.stackexchange.com/ <br> photo.stackexchange.com/ <br>
Danny Varod

Hai applicato il filtro mediano dopo la soglia? In tal caso, provalo senza la soglia.
Danny Varod,

Sì, l'ho provato dopo il limite e ho ottenuto quasi lo stesso risultato anche quando l'ho fatto prima
vini

Risposte:


12

Se l'output del tuo filtro Gábor è affidabile e la variazione dei dati dell'immagine non è così elevata che il risultato appare completamente diverso, puoi utilizzare il seguente approccio (parti di esso dove già menzionato):

  1. Binarizza la tua seconda immagine con qualsiasi algoritmo di soglia automatica. L'intervallo di soglie che funzionerà è ampio come vedrai.

  2. Utilizzare un algoritmo di etichettatura dei componenti per etichettare ogni regione collegata di pixel con un valore univoco.

  3. Calcola per ogni componente della tua immagine una proprietà che descrive, quanto è vicino il tuo oggetto a un cerchio pieno. Per questo, è possibile utilizzare ad esempio la compattezza . Ho usato sotto la frazione di pixel entro il raggio equivalente del disco . Questo raggio è il raggio che avrebbe un disco con la stessa area dell'oggetto.

    1. L'area sta semplicemente contando il numero di pixel del tuo oggetto
    2. Anche il calcolo del raggio di un cerchio data la sua area dovrebbe essere gestibile
    3. Per il pixel all'interno di questo raggio, è necessario il centro di ciascun oggetto immagine, ma questa è solo la media di tutte le posizioni dei pixel dell'oggetto. Se sei un fisico allora conosci il centro di massa di diverse masse puntiformi. Questo è equivalente.
    4. Ora si calcola per ogni pixel di ciascun oggetto la distanza dal suo centro e si controlla se è più piccolo del raggio del cerchio. Dividendo i due numeri e ottieni la frazione di pixel interno ed esterno.
  4. Prendi l'oggetto con la frazione più alta. Nota: gli oggetti con un solo pixel avranno un valore di 1. Quindi dovresti impostare una soglia di dimensione e prendere solo oggetti più grandi, diciamo 10 pixel.

Per vedere che una binarizzazione automatica dovrebbe funzionare, ecco i risultati per una soglia molto bassa e molto alta:

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Aggiorna etichetta componente

La scelta dell'etichettatura dei componenti non è fondamentale per l'applicazione. Suggerirei, se devi implementarlo da solo, di utilizzare un metodo molto semplice. La versione one pass dal sito Wikipedia è molto semplice. Fondamentalmente si esegue l'iterazione dell'immagine binaria e quando si incontra un pixel bianco e non già etichettato, si utilizza una nuova etichetta per questo oggetto e si inizia con questo pixel.

Il processo di etichettatura di questo oggetto con un'etichetta è sostanzialmente simile a un riempimento. Questo è sul sito di Wikipedia i passaggi interni 1-4 dell'algoritmo. Inizi con questo pixel etichettato e metti tutti i suoi vicini in pila (hanno usato un vettore ). Per un pixel nello stack, controlla se è in primo piano e non è già etichettato. Se devi etichettarlo, rimetti in pila tutti i suoi vicini. Fallo finché il tuo stack non è vuoto.

Quindi continua la scansione attraverso l'immagine. A differenza della descrizione sul sito Wiki, non è necessario rimuovere un pixel dall'immagine originale, si salta semplicemente quando si ha un valore diverso da 0 nell'immagine dell'etichetta.


a quale algoritmo di etichettatura conforme ti riferisci qui?
vini,

1
@vini, ho aggiornato il mio post. Phonon, grazie. Usiamo molte misure morfologiche e soprattutto la compattezza è stata molto utile qualche tempo fa.

yup great got it :)
vini

6

Alcune idee:

  1. Filtra i bordi in base alla densità dei punti di forza. Usando un'approssimazione di un kernel circolare, trova la forza media del bordo (o qualche altra misura). Passa attraverso gli spigoli al di sopra o al di sopra del valore di soglia, imposta in nero eventuali spigoli al di sotto della soglia.
  2. Utilizzare un'operazione di "chiusura" morfologica (dilatazione seguita da erosione) per ripulire l'immagine, quindi utilizzare un algoritmo di etichettatura della regione (noto anche come componente collegato, BLOB) per trovare tutti i BLOB. Filtra i dati del BLOB in base alle dimensioni, al rapporto tra assi maggiori e minori, ecc.
  3. Prova la sfocatura gaussiana, trova una soglia di binarizzazione per segmentare la luce dall'oscurità, quindi filtra le bolle come descritto al passaggio 2 sopra. (Per una rapida approssimazione di una sfocatura gaussiana, stringi le palpebre per lo più chiudendole e strizzando gli occhi all'immagine.)
  4. Prova alcuni filtri in Photoshop o GIMP.

EDIT: dopo il tuo passaggio di filtraggio mediano, sei quasi arrivato. Buon lavoro! L'articolo 2 che ho suggerito sopra (chiudi, quindi etichettatura della regione) è una tecnica che ti accompagna per il resto.


cercherò di farti sapere cosa succede
vini,

1

Puoi provare i contorni attivi. Anche se forse è lento, può gestire casi complicati come questo.

Oppure puoi usare alcune conoscenze precedenti per elaborare questa immagine. Ad esempio, sai che la cosa BLOB è "grande" e "connessa". Pertanto, quando conti il ​​numero di ciascuna regione connessa, puoi trovarlo.

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.