2012-04-18 26 views
6

He importado una imagen en matlab y antes de mostrarla ¿cómo haría que el fondo de la imagen sea transparente? Por ejemplo, tengo una bola roja sobre fondo blanco, ¿cómo haré que los píxeles blancos de la imagen se vean transparentes para que solo la bola roja sea visible y los píxeles blancos transparentes?Hacer un píxel transparente en Matlab

Respuesta

15

Debe asegurarse de que la imagen se guarde en el formato 'png'. Luego puede usar el 'Alpha' parameter de un archivo png, que es una matriz que especifica la transparencia de cada píxel individualmente. Es esencialmente una matriz booleana que es 1 si el pixel es transparente, y 0 si no. Esto se puede hacer fácilmente con un bucle for siempre que el color que desea ser transparente sea siempre el mismo valor (es decir, 255 para uint8). Si no es siempre el mismo valor, entonces podría definir un umbral, o rango de valores, donde ese pixel sería transparente.

Actualización:

primer lugar generar la matriz alpha por iteración a través de la imagen y (suponiendo que conjunto blanco a ser transparente) siempre que el píxel es blanco, configurar la matriz de alfa a ese píxel como 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 

después utilizar esta matriz alfa recién creado (a) para guardar la imagen como un ".png"

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

Gracias @ ademing2. ¿Tienes un breve ejemplo? – omegaFlame

+0

Edité mi respuesta original con un ejemplo. –

+0

Gracias. Pero, la salida de imagen es solo 1x1 y 87 bytes. ¿Algunas ideas? – omegaFlame

10

La nota para los bucles en MATLAB debe evitarse a toda costa porque son lentos. Reescribir el código para eliminar los bucles se conoce comúnmente como código de "vectorización". En el caso de la respuesta de ademing2, se podría hacer de la siguiente manera:

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