Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Análisis de color con histograma bivariante

Este ejemplo muestra cómo ajustar la escala de color de una gráfica de histograma bivariante para mostrar detalles adicionales sobre los bins.

Cargue la imagen peppers.png, una fotografía a color de diferentes tipos de pimientos y otras verduras. El arreglo de enteros de 8 bits sin signo rgb contiene los datos de imagen.

rgb = imread('peppers.png');
imshow(rgb)

Represente un histograma bivariante de los valores RGB rojo y verde de cada píxel para visualizar la distribución de los colores.

r = rgb(:,:,1);
g = rgb(:,:,2);
b = rgb(:,:,3);
histogram2(r,g,'DisplayStyle','tile','ShowEmptyBins','on', ...
    'XBinLimits',[0 255],'YBinLimits',[0 255]);
axis equal
colorbar
xlabel('Red Values')
ylabel('Green Values')
title('Green vs. Red Pixel Components')

El histograma está inclinado en gran medida hacia la parte inferior de la escala de color porque algunos bins tienen cantidades importantes. Esto hace que la mayoría de bins aparezca como el primer color en el mapa de colores (azul). Sin detalles adicionales resulta difícil llegar a una conclusión sobre cuál es el color predominante.

Para verlo de una forma más detallada, vuelva a escalar la escala de color del histograma configurando la propiedad CLim de los ejes para que tenga un rango de entre 0 y 500. El resultado es que los bins del histograma cuyo recuento es 500 o superior aparecen como el último color del mapa de colores (amarillo). Dado que la mayoría de los recuentos de bin se encuentran dentro de este pequeño rango, hay una variación mayor en el color de los bins que aparecen.

ax = gca;
ax.CLim = [0 500];

Utilice un método similar para comparar el dominio del rojo frente al azul y del verde frente al azul.

histogram2(r,b,'DisplayStyle','tile','ShowEmptyBins','on',...
    'XBinLimits',[0 255],'YBinLimits',[0 255]);
axis equal
colorbar
xlabel('Red Values')
ylabel('Blue Values')
title('Blue vs. Red Pixel Components')
ax = gca;
ax.CLim = [0 500];

histogram2(g,b,'DisplayStyle','tile','ShowEmptyBins','on',...
    'XBinLimits',[0 255],'YBinLimits',[0 255]);
axis equal
colorbar
xlabel('Green Values')
ylabel('Blue Values')
title('Green vs. Blue Pixel Components')
ax = gca;
ax.CLim = [0 500];

En cada caso, el azul es la señal de color menos predominante. Al observar los tres histogramas, el rojo parece ser el color predominante.

Confirme los resultados creando un histograma de color en el espacio de color RGB. Los tres componentes de color presentan picos de pequeños valores RGB. Sin embargo, los valores superiores a 100 se producen con más frecuencia en el componente rojo que en cualquier otro.

histogram(r,'BinMethod','integers','FaceColor','r','EdgeAlpha',0,'FaceAlpha',1)
hold on
histogram(g,'BinMethod','integers','FaceColor','g','EdgeAlpha',0,'FaceAlpha',0.7)
histogram(b,'BinMethod','integers','FaceColor','b','EdgeAlpha',0,'FaceAlpha',0.7)
xlabel('RGB value')
ylabel('Frequency')
title('Color histogram in RGB color space')
xlim([0 257])

Consulte también

|