Domanda

Ho un'immagine RGB in MATLAB e voglio fare il giro di ogni pixel e controllare se è colorato (ish) [probabilmente lo farò nello spazio HSV in un secondo momento per negare gli effetti dell'illuminazione ecc.]

Qualcuno conosce il modo migliore per farlo? La strana sintassi di MATLAB mi sta confondendo un po '!

Al momento ho:

for x = 1:size(I,1)
    for y = 1:size(I,2)
            %Get the value from this x,y coordinate and check the colour.
    end
end

Ma penso che sia terribilmente sbagliato.

Come si accede correttamente alle diverse parti della matrice?

È stato utile?

Soluzione

Ed,

Non è necessario eseguire il ciclo:

>> a  = magic(5)

a =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9


>> vi = (a > 5) & (a < 10)

vi =

     0     0     0     1     0
     0     0     1     0     0
     0     1     0     0     0
     0     0     0     0     0
     0     0     0     0     1

Puoi vedere come questa affermazione potrebbe essere espansa per RGB e simili. Vorrei fare una funzione


function out = isFlesh (in)

%% inserisci qui il codice di controllo della carne


Sospetto che vorrai una gamma di questi (isCaucasian, isAsian, ecc ...) Il problema sarà che esiste una vasta gamma di colori carne, quindi vorrai verificare la vicinanza ai vicini di una gamma di colori simile.

Questa parte del problema è semplice, ma il problema più grande è irto di pericoli.

-Doug

Altri suggerimenti

Una cosa da tenere a mente è che le immagini RGB sono matrici 3D. La prima "pagina" (ovvero A (:,:, 1) ) è rosso, il secondo è verde e il terzo è blu. A volte trovo più facile operare su matrici RGB rimodellandole in matrici N-by-3 in cui tutti i pixel rossi sono nella colonna 1, il verde nella colonna 2 e il blu nella colonna 3. Ecco come farlo:

A = (a 3-D RGB image);
matSize = size(A);
A = reshape(A,prod(matSize(1:2)),3);
...
% Modify or extract data from reshaped matrix
...
A = reshape(A,matSize);  % Return A to original dimensions

Non sono sicuro se questo ti aiuterà specificamente con quello che vuoi fare, ma lo trovo spesso utile.

Soglia di ogni canale non è un modo molto efficace per eseguire il rilevamento del colore della pelle. Una semplice tabella di ricerca funziona molto meglio. La tabella di ricerca registra un valore per ciascun colore della probabilità che si tratti di skin. Esistono vari set di dati sul colore della pelle che è possibile utilizzare per ottenere tali valori. Quindi puoi confrontare il colore del pixel con il valore nella tabella e prendere una decisione in base a una soglia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top