domingo, 2 de agosto de 2015

Convertir imagen RGB a sepia en Matlab



El día de hoy tuve la necesidad de transformar una imagen RGB a tono sepia utilizando Matlab. Como no encontré rápidamente un post que me diera la solución, decidí no perder más el tiempo y crear una propia. Aquí dejo el código resultante. Muy posiblemente existan otras formas mejores de hacerlo, pero esta cumplia con mis expectativas. Más adelante dedicaré un post para explicar detalladamente por qué el tono sepia se obtiene de esta manera, pero mientras tanto cuelgo aquí la función.




function result=sepia(X)
    tRGB = [0.393  0.769  0.189;   0.349  0.686  0.168; 0.272  0.534  0.131];
 
    R=double(X(:,:,1));
    G=double(X(:,:,2));
    B=double(X(:,:,3));
 
    %para la capa R
    tr=round(R*tRGB(1,1)+G*tRGB(1,2)+B*tRGB(1,3));
    tr(tr>255)=255;


    %capa G
    tg=round(R*tRGB(2,1)+G*tRGB(2,2)+B*tRGB(2,3));
    tg(tg>255)=255;
 
    %capa B
    tb=round(R*tRGB(3,1)+G*tRGB(3,2)+B*tRGB(3,3));
    tg(tg>255)=255;
 
    result=uint8(cat(3,tr,tg,tb));
end




Cómo usarlo


Es muy sencillo; guarda la función en un archivo con el nombre que desees en tu carpeta de trabajo, por ejemplo, "sepia.m". Después, sólo tienes que escribir en la command window lo siguiente:

imagenSepia=sepia(imagenRGB);


Para mostrar la imagen que acabas de transformar, puedes utilizar el comando imshow:

imshow(imagenSepia);


Espero que te sirva.

2 comentarios: