Red de conocimiento informático - Consumibles informáticos - Programación de matrices de colores

Programación de matrices de colores

De hecho, la clave para aprender el procesamiento de imágenes digitales no es el código fuente (esto sigue siendo diferente de la programación general. Es una experiencia. De hecho, es posible que el supervisor de doctorado promedio no necesariamente sepa programación, pero si le cuenta su método, normalmente irá al grano), sino que podrá comprender el concepto y dónde se aplica.

Las características de bajo nivel basadas en el color, la textura y la forma son suficientes para que las comprendas. La clave es qué método es adecuado para mapear su tema con semántica de alto nivel, como identificar el contorno de un objeto, y luego la forma puede ser más adecuada.

La razón por la que escribí el párrafo anterior es principalmente porque siento que no tienes requisitos claros y específicos para el código, es decir, la dirección no es clara.

Actualmente existen muchos algoritmos de extracción de características de color, como histogramas de color, momentos de color, conjuntos de colores, vectores de agregación de colores, diagramas de correlación de colores, etc. Como no lo mencionaste, te daré un artículo sobre el método de histograma de color de IEEE CSVT 2001 (los derechos de autor del código fuente pertenecen al autor):

Función colorhist = colorhist(rgb)

CBIR _Cálculo del histograma de color

Entrada: datos de imagen MxNx3, formato RGB

Salida: 1x histograma de 256 colores = =(HxSxV = 16x4x 4)

Como descriptor de histograma de color universal MPEG-7

Manjunath, B.A.; Ohm, J.-R; Yamada, "Descriptores de color y textura"

IEEE Trans. CSVT, Volumen: 11 Edición: 6, Páginas: 703-715, junio de 2006 5438 0 (Sección 3.b)

Compruebe la entrada

if tamaño(rgb, 3 )~= 3

Error("el histograma requiere 3 componentes");

Fin

Global

h _ BITS = 4 s _ BITS; = 2; v _ BITS = 2;

rgb2hsv puede ser reemplazado por rgb2hsi, dependiendo de tu pregunta anterior.

HSV = uint 8(255 * RGB 2 HSV(RGB));

img size = size(HSV);

Deshacerse de los límites irrelevantes

i0 = redondo(0.05 * tamaño img(1)); I 1 = redondo(0.95 * tamaño img(1));

j0 = redondo(0.05 * tamaño img(2) ) )); j 1 = round(0.95 * img size(2));

hsv = hsv(i0:i1,j0:j1,);

Histograma

Para i = 1: 2^H_BITS

Para j = 1: 2^S_BITS

Para k = 1: 2^V_BITS

colorhist (i, j, k) = suma(suma(...

bitshift(hsv(:,:,1),-(8-H_BITS))= = I-1 amp;. ..

bitshift(hsv(:,:,2),-(8-S_BITS))= = j-1 amp;...

bitshift(hsv( :, :, 3), -(8-V_BITS))= = k-1);

Fin

Fin

Fin

hist de color = forma(hist de color, 1, 2^(h_bits s_bits v_bits));

Normalización

hist de color = hist de color/sum(hist de color);

Según las características de la textura, extraiga la escala de grises * * * para generar una matriz para juzgar la textura.

Calcule la matriz de coocurrencia

Para la dirección y distancia dadas

out = coocurrencia(entrada, dirección, distancia, simetría) ;

Porcentaje de entrada:

Porcentaje de entrada: matriz de entrada de cualquier tamaño

dir : evaluación Dirección

Valor de "dirección" ángulo

0 0

1 -45

2 -90

3 -135

4 -180

5 135

6 90

7 45

dist: distancia entre píxeles

Simetría: 1 para la versión simétrica

0 para la versión asimétrica

por ejemplo: out = coocurrencia (entrada, 0, 1, 1

Autor: Balan Edogan (15.07.2006)

RGI, Universidad de Tampere; Tecnología

baran.aydogan@tut.fi

Función fuera = coocurrencia (entrada, dir, dist, simétrica);

entrada = ronda (entrada);

[r c] = tamaño (entrada);

min_intensity = min(min(entrada));

max _ intensidad = max( max(entrada)); );

out = cero (max_intensity-min_intensity 1);

if (dir == 0)

dir_ x = 0 dir _ y = 1;

Fin

if (dir == 1)

dir _ x = 1; dir _ y = 1 ;

Fin

if (dir == 2)

dir _ x = 1; dir _ y = 0

Fin

if ( dir == 3)

dir_x = 1; dir_y =-1

Fin

if (dir == 4)

dir_x = 0; dir_y =-1

Fin

if (dir == 5)

dir_x =; -1; dir_y =-1;

Fin

if (dir == 6)

dir_x =-1; 0;

Fin

si (dir == 7)

dir _ x =-1; >Fin

dir _ x = dir _ x * dist

dir _ y = dir _ y * dist

out _ ind _ x = 0; /p>

out _ ind _ y = 0;

Para intensidad 1 = intensidad mínima: intensidad máxima

out _ ind _ x = out _ index 1;

out _ ind _ y = 0;

[ind _ x 1 ind _ y 1]= buscar(entrada =

= intensidad 1);

ind _ x 1 = ind _ x 1 dir _ x

ind _ y 1 = ind _ y 1 dir _ y

Para intensidad 2 = intensidad mínima: intensidad máxima

out _ ind _ y = out _ ind _ y 1

[ind _ x2 ind _ y2] = find(input; = = intensidad 2);

cuenta = 0;

Para i = 1: tamaño(ind_x1, 1)

Para j = 1: tamaño(ind_x2 , 1)

if((ind _ x 1(I)= = ind _ x2(j)) amp; amp(ind_y1(i) == ind_y2(j)))

cuenta = cuenta 1;

Fin

Fin

Fin

out(out_ind_x,out_ind_y)= cuenta;

Fin

Fin

si (simétrico)

if (dir lt; 4)

dir = dir 4;

Otro

dir = mod(dir, 4);

Fin

out = out coocurrencia (entrada, dir, dist, 0);

Fin