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
È 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);
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;
Grazie @ ademing2. Hai un breve esempio? – omegaFlame
Ho modificato la mia risposta originale con un esempio. –
Grazie. Ma l'output dell'immagine è solo 1x1 e 87 byte. Qualche idea? – omegaFlame