Matlab - Algoritmo Popularidad

 
Vista:
sin imagen de perfil

Algoritmo Popularidad

Publicado por Toni (2 intervenciones) el 14/12/2012 18:21:31
Hola,
estoy diseñando el algoritmo de popularidad para el procesamiento de imagen digital.
Nos han recomendado cuantificar uniformemente (64 niveles/componente) la imagen y calcular el histograma RGB.

El caso es que nosotros calculamos el histograma en una matriz h de tres dimensiones cuyos tres indices corresponden con los colores R, G y B. Mientras que el valor en esa posición es el número de veces que aparece ese color.

Por ejemplo:

h (1,1,1)

ans = 64

La terna RGB (1,1,1) sale 64 veces en la imagen.

Ahora necesitariamos quedarnos con los 256 colores más utilizado, esto quiere decir, quedarnos con los índices de las componentes R G y B y el valor de estas. Por ejemplo:



h(130,131,100) = 500
h(257,120 , 2)= 600
h(145,240 ,3)= 800

Y nos interesaría guardar en otra matriz las tres componentes de h y sus valores. De tal manera que quede una matriz del siguiente estilo:

130 131 100 500
257 120 2 600
145 240 3 800

Esta matriz debe tener tamaño 256, que corresponde con los 256 colores más importantes.

¿Alguna sugerencia de código?


NOTA: Los indices val del 1 al 257, donde 1 es el color negro y 257 el color blanco.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Algoritmo Popularidad

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 15/12/2012 02:44:46
Cual es tu avance de tu código?.
De repente viendo tu avance de tu código, podamos ayudarte con mas exactitud.
No todos los que visitan este foro, conocen todos temas donde se aplica matlab, pero viendo tu código quizás podamos darte una sugerencia adecuada.




Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Algoritmo Popularidad

Publicado por Toni (2 intervenciones) el 15/12/2012 09:30:08
Gracias por tu respuesta Jose, te paso mi código a pesar de que está incompleto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
imgcuant=Read_ColorImage();
img=Cuantificador_Uniforme(imgcuant, 256);
h=zeros(257,257,257);
LUT = zeros(1,4); % Matriz donde almacenaremos los valores de la siguiente forma: R G B num
 
 n_r=6; % Le pasamos 6 porque queremos cuantificar a 64 niveles en este algoritmo.
 n_g=6;
 n_b=6;
 
 img_sal = cuantificolor(img, n_r, n_g, n_b); % Cuantificamos la imagen a color
 
 for i=1:size(img_sal,1)
     for j=1:size(img_sal,2)
 
         R = img_sal(i,j,1);
         G = img_sal(i,j,2);
         B = img_sal(i,j,3);
 
         Rh = round(256*R+1); % Normalizamos el histograma de la imagen
         Gh = round(256*G+1);
         Bh = round(256*B+1);
 
          h(Rh,Gh,Bh)=h(Rh,Gh,Bh)+1; % Aqui calculamos el valor del píxe Rh, Gh, Bh
 
     end
 end
 
Cabe destacar que la función cuantificolor es la siguiente:
 
function Io=cuantificolor(I, n_r, n_g, n_b)
 
I_R=I(:,:,1);
I_G=I(:,:,2);
I_B=I(:,:,3);
 
N_r=2^n_r;
N_g=2^n_g;
N_b=2^n_b;
 
Io_R= round((N_r-1)*I_R)/(N_r-1);
Io_G= round((N_g-1)*I_G)/(N_g-1);
Io_B= round((N_b-1)*I_B)/(N_b-1);
 
 
Io(:,:,1)=Io_R;
Io(:,:,2)=Io_G;
Io(:,:,3)=Io_B;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar