Red de conocimiento informático - Aprendizaje de programación - El programa del algoritmo kmeans en matlab es el siguiente. Quiero realizar la clasificación de imágenes. Si sabes escribir, escríbelo.

El programa del algoritmo kmeans en matlab es el siguiente. Quiero realizar la clasificación de imágenes. Si sabes escribir, escríbelo.

function [mu,mask]=kmeans(ima,k)%k es el número de categorías especificadas

%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%

%

% kmeans segmentación de imágenes

%

% Introduzca kmeans segmentación de imágenes

%

% Entrada:

% ima: Imagen en escala de grises Imagen en escala de grises

% k: Número de clases: Especifique el número de clases en la imagen

% Salida:

% mu : vector de clase, valor medio de cada clase

% máscara: máscara de imagen de clasificación

%

% Autor: Jose Vicente Manjon: Jose Vicente Manjon Herrera

% Correo electrónico: jmanjon@fis.upv.es

% Fecha: 27-08-2005

%

%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%

% Comprobar imagen

ima=double(ima);

copiar=ima; % hacer una copia

ima=ima(:); % vectorizar ima vectorizar la imagen.

mi=min(ima); % maneja valores negativos

ima=ima- mi+1; % y valores cero

s=length(ima); % Obtener el número de píxeles de la imagen

% Crear un histograma de imagen % Crear un histograma de imagen

m=max(ima)+1;% Valor máximo de píxeles más 1

h=zeros(1,m);% Histograma con m particiones

hc =zeros(1,m);% matriz de marcas, donde el valor de cada píxel es el número de categoría a a cuál pertenece el punto

para i=1: s%s es el número de píxeles de la imagen, es decir, verifique cada píxel

if(ima(i)>0 ) h(ima(i))=h(ima(i))+1;end;% Agrega 1 a la partición correspondiente en el histograma

end

ind=find( h);% Encuentre el número de serie de la partición que no es cero en el histograma.

hl=length(ind);%El número de contenedores distintos de cero en el histograma

%Punto central inicial

mu=(1:k) *m/(k+1);%k es el número de categorías especificadas, mu es el punto de división de diferentes categorías, lo que equivale a un número entero en el eje de coordenadas

%Iniciar procesamiento

mientras (verdadero)

oldmu=mu;

%categoría actual

para i=1:hl

c =abs(ind(i)-mu);% ¡Esto equivale a mirar la distancia entre ind(i) y el punto entero más cercano en el eje! ¿Qué punto entero es el más cercano? Tenga en cuenta que mu siempre es ***solo k

cc=find(c==min(c));%cc conserva el número de secuencia del punto entero más cercano a ind(i), es decir , 1, 2 , 3... .k

Cc=find(c==min(c));%cc conserva el número de secuencia del punto entero más cercano a ind(i), es decir , 1, 2, 3.. . .... .k

hc(ind(i))=cc(1);

fin

%El siguiente programa se utiliza para calcular el promedio Para calcular la posición promedio de cada categoría

para i=1:k,

a=find(hc==i);

mu(i) = sum(a.*h(a))/sum(h(a));%h es histograma

fin

if (mu==oldmu) break;end ;% Condición de fin de bucle

end

% Máscara de cálculo

s=size(copy);

mask=zeros(s );

mask1=mask;% Agregar matriz de visualización

tamaño(mask1)

para i=1:s( 1),

para j=1:s(2),

c=abs(copia(i,j)-mu);

a=find(c= =min(c));

máscara(i,j)=a(1);

fin

fin

mu =mu+mi-1; % restaurar el rango de números reales

para i = 1: k

p=find( mask==i);

máscara1( p)=1/k*i;

fin

figura,imshow(máscara1)