6

Utilizzando le immagini di articoli di abbigliamento preso su uno sfondo coerente, vorrei fare tutti i pixel dell'immagine trasparente, fatta eccezione per l'abbigliamento. Qual è il modo migliore per farlo? Ho ricercato gli algoritmi che sono comuni per questo e la libreria open source opencv. A parte il rollover o l'uso di opencv c'è un modo semplice per farlo? Sono aperto a qualsiasi lingua o piattaforma.e trasparenza

Grazie

+0

quale tipo di immagine si utilizza: 8 bit, 16 bit, monocromatico, colore? di che colore sono i vestiti? sono in contrasto con lo sfondo? dici di voler rendere lo sfondo trasparente: dicci qualcosa di più sul tuo obiettivo, hai intenzione di sovrapporre i vestiti a un'altra immagine? (hai una foto di esempio che possiamo guardare?) –

+0

Qual è lo sfondo "coerente"? È un colore? – Jacob

+0

ho anche dimenticato: sembra che tu abbia molte immagini, lo sfondo dello stesso colore su tutte le immagini o il colore dello sfondo cambia a seconda dell'immagine? –

risposta

6

Se lo sfondo è consistend in un'immagine, ma in maniera non omogenea immagini potrebbe diventare difficile, ma qui è quello che vorrei fare:

  1. separare l'immagine in una certa intensità forma/colore come il YUV o Lab.
  2. Crea un istogramma sulla parte colorata. Trova il colore più occidente, questo è (molto probabilmente) il tuo sfondo (aggiornamento) forse un trucco migliore sarebbe quello di trovare il colore più occulto di tutti i pixel entro uno o due pixel dal bordo dell'immagine.
  3. A partire dai bordi dell'immagine, impostare tutti i pixel con quel colore e collegati al bordo tramite i pixel di quel colore a trasparente.
  4. Il bordo del capo di abbigliamento ora sembrerà un po 'brutto perché è composto da pixel che ottengono il loro colore sia dallo sfondo che dal capo di abbigliamento. Per contrastare questo devi fare un po 'di lavoro in più:

    1. Trova il bordo del capo attraverso il meccanismo edge detection.
    2. Sostituire il colore dei pixel del bordo con una fusione del colore solo "all'interno" del pixel del bordo (ovvero il colore degli indumenti in quella regione) e trasparente (se il formato dell'immagine in uscita supporta quello).
    3. Se vuoi essere davvero elegante, aumenta la trasparenza a seconda di quanto "mi piace" il colore di sfondo del colore di quel pixel.
+0

qualcosa mi dice che, se qualcuno scatta una foto di un capo di abbigliamento, sistemerà la sua foto in modo che riempia maggiormente l'immagine. il colore più presente non sarà quindi lo sfondo. anche con questo algoritmo, se per caso, la vestizione sta toccando il bordo, si rimuoverà l'intero pezzo di vestire dall'immagine ... –

+0

Questo è un buon punto. Quindi dovresti probabilmente guardare il colore più diffuso vicino al bordo dell'immagine. –

0

se si conosce l'intensità esatto colore dello sfondo e non potrà mai cambiare e gli articoli di abbigliamento non potrà mai coincidere con questo colore, allora questa è una semplice applicazione di sottrazione dello sfondo, che è tutto ciò che non è una particolare intensità del colore è considerato un pixel "on", uno di interesse. È quindi possibile utilizzare l'etichettatura dei componenti collegati (http://en.wikipedia.org/wiki/Connected_Component_Labeling) per individuare gruppi separati di oggetti.

+0

Grazie per il consiglio. Le immagini saranno prese dall'utente però. Quindi non posso sapere il colore esatto. –

0

per un'immagine a colori, con lo stesso sfondo su ogni foto:

  • convertire l'immagine in HSV o HSL
  • determinare il valore tonalità dello sfondo (+/- 10): fare questo passo una volta, usando Photoshop ad esempio, quindi usa lo stesso valore su tutte le tue foto.
  • eseguire una soglia di colore: sul canale di tonalità escludere la tonalità dello sfondo ([0, tonalità [+] tonalità, 255] in genere), per tutti gli altri canali include l'intero intervallo di valori (da 0 a 255 in genere). questo selezionerà i pixel che NON sono lo sfondo.
  • eseguire un'operazione di "riempire i buchi" (che normalmente si trovano lungo le funzioni di analisi blob o etichettatura) per completare la parte dei vestiti che possono essere stati dello stesso colore dello sfondo.
  • ora si dispone di un'immagine che è una "maschera" dei vestiti: pixel non zero rappresenta i vestiti, 0 pixel rappresenta lo sfondo.
  • questo passaggio dell'elaborazione dipende da come si desidera rendere i pixel trasparenti: in genere, se si salva l'immagine come PNG con un canale alfa (trasparenza), utilizzare un'operazione AND (detta anche "mascheratura") logica tra l'alfa canale dell'immagine originale e la maschera costruita nel passaggio precedente.
  • voilà, lo sfondo è scomparso, salvare l'immagine risultante.
+0

bene, ho appena letto il commento sullo sfondo tutto bianco o tutto scuro ...questo algoritmo non si adatta poiché lo sfondo non sarà lo stesso su tutte le immagini. –

2

Fondamentalmente, trovare il colore dello sfondo e sottrarlo, ma credo che tu lo sapessi. È un po 'complicato fare tutto questo automaticamente, ma sembra possibile.

Per prima cosa, dai un'occhiata a blob detection con OpenCV e vedi se questo è praticamente fatto per te.

di farlo da soli:

trovare lo sfondo: Ci sono diverse opzioni. Probabilmente il modo più semplice è quello di istogramma dell'immagine, e il grande numero di pixel con valori simili sono lo sfondo, e se ci sono due grandi collezioni, lo sfondo sarà quello con un grande buco nel mezzo. Un altro approccio è quello di portare una fascia attorno al perimetro come colore di sfondo, ma questo sembra inferiore poiché, ad esempio, il riflesso di un flash potrebbe illuminare in modo drammatico i pixel di sfondo in posizione centrale.

rimuovere lo sfondo: un primo take a questo sarebbe di soglia l'immagine in base al colore di sfondo, e quindi eseguire gli algoritmi "aperti" o "vicino" a questa, e quindi utilizzare questo come maschera per seleziona il tuo articolo di abbigliamento. (Il punto di apertura/chiusura è di non rimuovere piccoli oggetti colorati sullo sfondo dei vestiti, come i bottoni neri su una camicetta bianca, o, per esempio, i riflessi luminosi sugli indumenti neri.)

OpenCV è un ottimo strumento per questo.

La parte più difficile di questo sarà probabilmente all'ombra intorno all'oggetto (ad esempio una giacca nera su uno sfondo bianco avrà un'ombra grigia continua ad alcuni bordi e dove fare questo taglio?), Ma se si arrivare così lontano, posta un'altra domanda.