2012-04-18 6 views
6

Ho importato un'immagine in MATLAB e prima di visualizzarla, come renderei lo sfondo dell'immagine trasparente? Per esempio ho una palla rossa su uno sfondo bianco, come faccio a rendere i pixel bianchi dell'immagine in modo che solo la palla rossa sia visibile ei pixel bianchi siano trasparenti?Trasforma un pixel trasparente in Matlab

risposta

15

È necessario assicurarsi che l'immagine sia salvata nel formato 'png'. Quindi è possibile utilizzare 'Alpha' parameter di un file png, che è una matrice che specifica la trasparenza di ciascun pixel singolarmente. È essenzialmente una matrice booleana che è 1 se il pixel è trasparente e 0 se non lo è. Questo può essere fatto facilmente con un ciclo for fintanto che il colore che si desidera rendere trasparente è sempre lo stesso valore (vale a dire 255 per uint8). Se non è sempre lo stesso valore, è possibile definire una soglia, o intervallo di valori, in cui tale pixel sarebbe trasparente.

Aggiornamento:

Prima generare la matrice alfa scorrendo l'immagine e (supponendo imposta bianco di essere trasparente) quando il pixel è bianco, impostare la matrice alfa in quel pixel come 1.

# X is your image 
[M,N] = size(X); 
# Assign A as zero 
A = zeros(M,N); 
# Iterate through X, to assign A 
for i=1:M 
    for j=1:N 
     if(X(i,j) == 255) # Assuming uint8, 255 would be white 
     A(i,j) = 1;  # Assign 1 to transparent color(white) 
     end 
    end 
end 

quindi utilizzare questa matrice alfa appena creato (a) per salvare l'immagine come ".png"

imwrite(X,'your_image.png','Alpha',A); 
+0

Grazie @ ademing2. Hai un breve esempio? – omegaFlame

+0

Ho modificato la mia risposta originale con un esempio. –

+0

Grazie. Ma l'output dell'immagine è solo 1x1 e 87 byte. Qualche idea? – omegaFlame

10

Nota per i loop in MATLAB dovrebbe essere evitato a tutti i costi perché sono lenti. Il codice di riscrittura per rimuovere i loop viene comunemente chiamato codice di "vettorizzazione". Nel caso della risposta di ademing2, si potrebbe fare come segue:

A = zeros(size(X)); 
A(X == 255) = 1;