Está en la página 1de 6

1

Conversión de Imágenes RGB a Escala de


grises.
Daniel Ornelas Barboza
ITESI
Ing. Mecatrónica, Visión Computacional
danielornelas483@gmail.com

Resumen – El presente documento describe métodos,


para convertir imágenes en espacio de color RGB a escala [2] En el modelo RGB, cada color aparece en sus
de grises, con el propósito de tener un menor coste componentes espectrales primarios de rojo, verde y azul. Este
computacional siempre y cuando el color sea una modelo se basa en un sistema de coordenadas cartesiano. El
propiedad que se pueda omitir en alguna tarea de color subespacio de interés es el cubo que se muestra en la
procesamiento digital de imágenes o de visión Figura. 1, en el que los valores primarios RGB están en tres
computacional, por ello se aclara que uno de los métodos esquinas; los colores secundarios cian, magenta, y amarillo
tratados es solo una conversión visual, ya que esta sigue están en otras tres esquinas; el negro está en el origen; y el
manteniéndose en el espacio de color RGB y por ello no blanco está en la esquina más alejada del origen. En este
provocara el ahorro de información que se menciona. modelo, la escala de grises (puntos de valores RGB iguales) se
extiende de negro a blanco a lo largo de la línea diagonal que
I. INTRODUCCIÓN une estos dos puntos.
Se tratarán métodos para convertir imágenes en espacio de
Para implementar los métodos se crearon funciones en
color RGB que por sus siglas significa RED-GREEN-
MATLAB, las cuales quedaron limitadas a convertir imágenes
BLUE(Rojo,Verde,Azul) a una correspondiente en escala de
RGB con 24 bits de profundidad a imágenes en escala de
grises, con la premisa de que en algoritmos de procesamiento
grises con 8 bits de profundidad.
digital de imágenes o de visión computacional se vuelve
conveniente tratar las imágenes en escala de grises para tener
un menor coste computacional, esto solo si es posible omitir el
II. DESARROLLO
color para el proceso que se valla a llevar acabo, ya que por
ejemplo una imagen en escala de grises tiene generalmente 8 A. Conversión mediante formula de luminancia
bits de profundidad y en consecuencia con un rango dinámico
de 0 a 255, pero una en RGB comúnmente tiene 24 bits de Como ya se menciono para el primer método de conversión,
profundidad, esto debido a que cada una de sus componentes, utilizamos la ecuación 1 que corresponde a la fórmula de
ya sea la roja, verde o azul posee 8 bits de profundidad cada luminancia, pero no de la forma en que está escrita, si no de
una con el rango dinámico ya mencionado de 0 a 255. la manera siguiente:
I (i, j ) = 0.3R(i, j ) + 0.59G(i, j ) + 0.11B(i, j ) (2)
[1] El primero de los métodos consta de usar la formula de
luminancia, la cual es una ponderación para cada una de las La ecuación 2 nos dice que la intensidad del pixel para la
componentes, estas ponderaciones son las mismas utilizadas imagen en escala de grises en la posición (i,j) es igual a la
para el calculo de luminancia de la señal Y´ de la suma de las intensidades en las 3 componentes, cada una
representación de color para la transmisión de video YIQ multiplicadas por su respectiva ponderación en el pixel(i,j)
de la imagen que se quiere convertir.
Y´= 0.299R´+0.587G´+0.114B´ . (1) Creamos una función llamada rgb2gray1 tomando en cuenta
que cada píxel de la imagen resultante tendrá una intensidad
El segundo método consiste en usar los valores de intensidad asociada a partir de la formula, entonces solo quedaría
de los pixeles en una sola componente para obtener la imagen asignar estas intensidades de manera correcta a cada píxel.
resultante en escala de grises. La función lleva como argumento de entrada la imagen en
RGB, ejemplo:
El tercer método es una conversión visual, que tiene como Imagen_escala_grises = rgb2gray1(imagen_RGB)
base el cubo de color RGB de 24 bits (Figura. 1 y Figura 2),
en esta se elige una componente de la cual sus intensidades
serán asignadas a las demás, por lo tanto, se tendrán pixeles B. Conversión con intensidades de pixeles una sola
con valores iguales en sus 3 componentes. componente
Para convertir la imagen RGB a escala de grises con este
método, basta con tomar las intensidades de una sola
2

componente de color para la imagen en escala de grises, es


decir, si se decide usar la componente roja, la imagen en
escala de grises tendrá las intensidades idénticas de esta
componente, aunque se dice que la mejor para usar es la
verde (ecuación 3), lo cual será comprobado en nuestros
resultados. Si tomando la componente verde obtenemos una
buena aproximación a los resultados del método anterior,
que es el considerado con el mayor rigor científico,
podremos tener en cuenta este método cuando se requiera
optimizar más un procesamiento.

I (i, j ) G(i, j ) (3)

La función que creamos fue llamada rgb2gray2, pero esta


requiere de 2 argumentos de entrada, la imagen en RGB y la
componente elegida 1,2 o 3, donde el 1 es la roja y así
sucesivamente, ejemplo: Figura. 2 Cubo de color RGB de 24-bits.
Imagen_escala_grises = rgb2gray2(imagen_RGB,2)
III. PRUEBAS Y RESULTADOS
C. Conversión visual
Para probar las funciones usamos una misma imagen para
La conversión visual mantiene la imagen en RGB, que comparar de una manera más objetiva nuestros resultados
convierte de tal forma que las intensidades de una sola (Figura. 3). Como se ve la imagen tiene zonas relativamente
componente serán asignados en las 3 componentes, por lo claras, así como unas muy oscuras, por lo que será fácil
tanto cada pixel tendrá valores de la forma (k,k,k), donde k apreciar que tan efectivos son los métodos de conversión
es un valor de 0 a 255 y los pixeles que tienen valores de
esta forma tienen contenidos colores equivalentes a los de la
escala de grises para imágenes con 8 bits de profundidad, las
Figura. 1 y Figura. 2, muestran gráficamente lo que se quiere
dar a entender. La función creada la llamamos rgb2gray3,
esta tendrá los mismos argumentos de entrada que la
anterior.

Figura. 3 Imagen utilizada para las conversiones.

La imagen de la Figura. 4 se produce usando el método de la


fórmula de luminancia, vemos como esta es muy fiel a los
contrastes que se perciben en la imagen original a color, por
ejemplo, vemos como el frente de la guitarra es la zona donde
predomina el color mas claro y vuelve a apreciarse de esa
forma en la imagen en escala de grises. Es por ello por lo que
la fórmula de luminancia es el método más correcto, incluso la
función original de Matlab hace uso de este, sin embargo,
tiene un coste computacional mas alto respecto al segundo
método.

Figura. 1 Esquema del cubo de color RGB, la diagonal


principal tiene los colores de la escala de grises de negro a
blanco.
3

IV. CONCLUSIÓN
En base a nuestros resultados podemos decir que es
conveniente usar el método 2 tomando la componente verde
para hacer la conversión, ya que este se aproxima bastante a la
imagen generada por el método 1, que es el de mayor de rigor
científico, y además tiene el menor coste computacional,
siendo este factor el mas importante por el que se realizan
conversiones de imágenes en RGB a escala de grises,
aclarando que solo si el color es una propiedad descartable
para el procesamiento que se quiera llevar a cabo. También
hay que tener presente que tener imágenes con rango dinámico
de 0 a 255 es lo más común, pero siempre hay la posibilidad
de tener imágenes con mayor rango dinámico, claro
Figura. 4 Imagen resultante de la primera función dependiente de los bits de profundidad de la imagen y que
(rgb2gray1). además el formato RGB no es el único espacio de color
existente, así que para transformar otro espacio de color habrá
En la Figura. 5 tenemos las imágenes procesadas con el que revisar la teoría detrás de ello para desarrollar un
segundo método, aquí vemos él porque se toma la componente algoritmo y códigos eficientes. En cuanto a la conversión
verde como preferente para convertir las imágenes, esta se visual podríamos descartarla por el hecho de que produce
aproxima bastante a la imagen de la Figura. 4, mientras que la resultados idénticos con el método y no produce el ahorro de
roja es muy clara, la azul se torna más oscura, y ya no coste computacional.
mantienen el mismo contraste.
REFERENCIAS
[1] Szeliski, R. (2010). Computer Vision: Algorithms and
Applications. En R. Szeliski, Computer Vision:
Algorithms and Applications (págs. 80-90). Springer.
[2] Rafael C. Gonzalez, R. E. (2018). Digital Image
Processing. En R. E. Rafael C. Gonzalez, Digital Image
Processing (págs. 407-408). Pearson.

Figura. 5 Imágenes resultantes de la segunda función


(rgb2gray2), a) Componente roja, b) Componente verde,
c)Componente azul.

En la Figura. 6 están dadas a partir del tercer método y se


puede decir que arrojan los mismos resultados de la función 2,
pero teniendo claro que la conversión fue visual, esto pasa
como ya explicamos porque todos los pixeles al tomar los
valores de una sola componente tendrán las intensidades
(k,k,k), y ya se estableció que los colores del espacio de color
RGB que cumplen esto son equivalentes a los colores con
intensidad k de la escala de grises.

Figura. 6 Imágenes resultantes de la tercera función


(rgb2gray3), a) Componente roja, b) Componente verde, c)
Componente azul.
ANEXOS
A1. Código de la función 1 (rgb2gray1).
function [B] = rgb2gray1(I)
%Devuelve la imagen en espacio de color rgb a formato de
%escala de grises, como argumento de entrada se pide solamente la imagen
en
%espacio de color rgb, esta función hace uso de la formula
%I(i,j) = 0.3*R(i,j) + 0.59*G(i,j) + 0.11*B(i,j).
%
%Ejemplo:
%Ig = rgb2gray1(I)
%
%donde Ig será la imagen de salida en escala de grises, e I es la imagen
en
%formato rgb

%Calculamos el tamaño de la imagen r*c, ya que es importante para las


%iteraciones de nuestros bucles
[r,c,~] = size(I);
%Se creo una matriz de ceros donde se almacenarán los valores para crear
la
%nueva imagen
A(r,c) = 0;
%Se anidaron dos ciclos for para hacer el barrido de la imagen y a su vez
%calcular y asignar los valores respectivos a la matriz vacía
for i = 1:r
for j = 1:c
%Se implemento la fórmula de tal forma que se accede a los 3
valores
%de las componentes del píxel correspondiente, posteriormente se
%multiplican por las constantes dadas en la fórmula para
finalmente
%sumarlos y asignar el valor en la posición respectiva de la
nueva
%matriz o imagen
A(i,j)=0.3*I(i,j,1)+0.59*I(i,j,2)+0.11*I(i,j,3);
end
end
B = uint8(A);
end
A2. Código de la función 2 (rgb2gray2).
function [B] = rgb2gray2(I,C)
%Devuelve la imagen en espacio de color rgb a formato de
%escala de grises, como argumento de entrada se pide la imagen en
%espacio de color rgb y la componente de color a usar, es decir usara los
%valores de una sola componente para construir la imagen en escala de
%grises.
%
%Ejemplo:
%Ig = rgb2gray1(I,C)
%
%donde Ig será la imagen de salida en escala de grises, I es la imagen en
%formato rgb y C es la componente para elegir 1 = red, 2 = green, 3 =
blue

[r,c,~] = size(I);
A(r,c) = 0;
%Se crearon los dos bucles for anidados para hacer el barrido de la
imagen
%y a su vez tomar el valor correspondiente de la componente elegida para
%asi asignarlo a la matriz creada que será la nueva imagen.
for i = 1:r
for j = 1:c
A(i,j)=I(i,j,C);
end
end
B = uint8(A);
end
A3. Código de la función 3 (rgb2gray3).
function [B] = rgb2gray3(I,C)
%Esta función transforma una imagen a color en formato rgb a una en
escala
%de grises, pero solo de manera visual, lo hace tomando las intensidades
de
%una componente y asignándolas a las 3, es decir la componente R G y B
%tendrán las mismas intensidades.
%
%
%Ejemplo:
%Ig = rgb2gray1(I,C)
%
%donde Ig será la imagen de salida en escala de grises, I es la imagen en
%formato rgb y C es la componente para elegir 1 = red, 2 = green, 3 =
blue
[r,c,cr] = size(I);
A(r,c,cr)= 0;
%Para hacerlo se hizo un barrido capa por capa para asignar los valores,
%por ello fue necesario añadir un bucle mas que ahora itere las 3
%componentes de la imagen
for k = 1:cr
for i = 1:r
for j = 1:c
%Se accede al valor de la componente en turno y se le asigna el
%valor correspondiente de la componente elegida.
A(i,j,k)=I(i,j,C);
end
end
end
B = uint8(A);
end

También podría gustarte