Código fuente de procesamiento de imágenes digitales
Las funciones 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)
% check input
if size(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);
% Elimina 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< / p>
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));
% de normalización
hist de color = hist de color/suma(hist de color );
% Según las características de la textura, extraiga la escala de grises * * * para generar una matriz para juzgar la textura.
%Calcular 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
% p>
% dir: dirección de evaluación
% ángulo del valor de "dirección"
% 0 0
% 1 -45
% 2 -90
% 3 -135
% 4 -180
% 5 +135
% 6 +90
% 7 +45
%
% dist: distancia entre píxeles
%
% symmetry: simetría La versión es 1
La versión asimétrica es % 0
%
% por ejemplo: out = coocurrencia (entrada, 0, 1, 1
);% Autor: Baran Aydogan (15.07.2006)
% RGI, Universidad Tecnológica de Tampere
% baran.aydogan@tut.fi p>
Función salida = coocurrencia (entrada, dir, dist, simétrica);
entrada = ronda(entrada);
[r c] = tamaño(entrada);
min_intensity = min(min(entrada));
max _ intensidad = max(max(entrada));
salida = cero(max _ intensidad- min _ intensidad+1) ;
si (dir == 0)
dir _ x = 0; dir _ y = 1;
Fin
p >
if (dir == 1)
dir _ x = 1; dir _ y = 1
Fin
if (dir = =; 2)
dir_x = 1; dir_y = 0
Fin
si (dir == 3)
dir_x = 1; dir_y =-1;
Fin
if (dir == 4)
dir_x = 0; y =-1;
Fin
if (dir == 5)
dir _ x =-1; dir _ y =-1;
Fin
if (dir == 5)
dir _ x =-1; p>
Fin
if (dir == 6)
dir _ x =-1; dir _ y = 0
Fin
p>if (dir == 7)
dir_x =-1; dir_y = 1
Fin
dir_x; = dir _ x * dist
dir _ y = dir _ y * dist
out _ ind _ x = 0;
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; p>[ind_x2 ind_y2]= buscar(entrada = = 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
p>out(out_ind_x, out_ind_y)= recuento;
Fin
Fin
if (simétrico)
if(dir & lt; 4)
dir = dir+4;
Otro
dir = mod(dir, 4);
Fin
salida = salida + coocurrencia (entrada, dir, dist, 0);
Fin