Red de conocimiento informático - Aprendizaje de código fuente - Código fuente de procesamiento de imágenes digitales

Código fuente de procesamiento de imágenes digitales

De hecho, la clave para aprender el procesamiento de imágenes digitales no es el código fuente (esto es 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, él normalmente irá al grano), sino que podrá comprender el concepto y dónde se aplica.

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

%

% 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

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