El programa del algoritmo kmeans en matlab es el siguiente. Quiero realizar la clasificación de imágenes. Si sabes escribir, escríbelo.
%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
% 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 p>
% 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 p>
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)