Programación de matrices de colores
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) p>
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
p>
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) p>
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; p>
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