Acceder

Ver la Versión Completa : [ CONSULTA ] Histogramas RGB


Thatiro
23/10/11, 19:59:13
Hola a todos!!
Estoy haciendo una aplicación que coja la imagen directamente de la cámara y pueda detectar de que color es. Esto más o menos lo tengo pero, resulta que tengo que calcular los histogramas de las tres capas RGB y hasta hace poco lo hacía simple:

public void calculateHistograms()
{
int[] pix = new int[width * height];
bmp.getPixels(pix, 0, width, 0, 0, width, height);
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int index = y * width + x;

// int A =(pix[index] >> 24) & 0xff; //A
int r = (pix[index] >> 16) & 0xff; // R
int g = (pix[index] >> 8) & 0xff; // G
int b = pix[index] & 0xff; // B

histogramR[r]++;
histogramG[g]++;
histogramB[b]++;
}
}
Este código me llena los histogramas, creía que bien, pero creo que me devuelve valores muy dispersos y además distancias parecidas los unos de otros, del estilo:

[0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 0, 659, 0, 0, 0, 0, 0, 0, 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, 953, 0, 0, 0, 0, 0, 0, 0, 975, 0, 0, 0, 0, 0, 0, 0, 953, 0, 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 1262, 0, 0, 0, 0, 0, 0, 0, 1538, 0, 0, 0, 0, 0, 0, 0, 1626, 0, 0, 0, 0, 0, 0, 0, 0, 1430, 0, 0, 0, 0, 0, 0, 0, 1613, 0, 0, 0, 0, 0, 0, 0, 2096, 0, 0, 0, 0, 0, 0, 0, 1531, 0, 0, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
No se si esto es normal, o hago algo raro ya que me gustaría que el histograma fuese más "continuo" y no tan disperso.

Gracias!!!

pmaicas
24/10/11, 11:06:31
Yo el código lo veo bien. En cuanto al resultado, será que la imagen no tiene 8 bits de resolucion por color, si por ejemplo cada color tiene una resolucion de 5 bits el resultado sería ese que te da.