⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kmedia.m

📁 isodata et kmeans algorithm developped for image segmentation
💻 M
字号:
function [Z,Imcluster] = kmedia(image,k)

%%%%%%%%%%%%%%%%
%  Parametros  %
%%%%%%%%%%%%%%%%
data = double(imread(image));
% data=rgb2gray(data);
[a,b] = size(data);
ImVecteur = reshape(data,[a*b 1]);
r = size(ImVecteur);
cluster=zeros(r); % Espacio temporal interno de la funcion.
change=1;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Inicializacion de los centros  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Z= inicializa_centros(ImVecteur, k);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Bucle iterativo de clustering (Programa principal)  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
while change==1,
    change=0;
    
    % Calcula y asigna a cada coordenada {X,Y} su centro mas cercano.
    for i=1:r,
        m=pres(ImVecteur(i), Z, k);
        if  m~=cluster(i),  % Comparamos el valor anterior del centro mas cercano.
            change=1;
        end;
        cluster(i)=m;
    end;
    
    % Si ha cambiado alguna asignacion recalculamos los centros
    if change==0,
        Z=recalcul(cluster, ImVecteur, k,Z);
    end;
end;

Imcluster = reshape(cluster,[a b 1]);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Separamos los puntos en k vectores representativos de los k patrones  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Xcluster=0;
%Ycluster=0;
%for m=1:k
%    inedx=0;
%    index=find(cluster==m);
%    s2=size(index);
%    s2=s2(2);
%    for n=1:s2
%        Xcluster(1,n,m)= X(index(n));
%        Ycluster(1,n,m)= Y(index(n));
%    end;
%end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                     Fin del programa principal                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %              Codigo de las subfunciones utilizadas                 %%  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Funcion para calcular el centro mas cercano a cada punto  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [m] = pres(valeur, Z, k)
    dtemp=0;
    d=0;
    for j=1:k

        d=distancia(Z(j), valeur); % Distancia del centro al punto.
        if j<2,
            m=j;    % La primera distancia siempre es valida.
            dtemp=d;
        elseif d < dtemp,
            m=j;    % Nos quedamos con el centro al que corresponde 
            dtemp=d;  % la menor de las distancias.
        end;
    end;
    
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Funcion para reasignar los centros  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [Zout1] = recalcul(cluster, ImVecteur, k, Z) %Realiza la media de los puntos asigandos a cada clase corersp. a los centros
    Zout1 = zeros(k);
	for m=1:k
        index=find(cluster==m);
        if isempty(index)==0
            sindex=size(index);
            sindex=sindex(2);  
            Zout1(m)=(sum(ImVecteur(index))) / sindex;
       
        else
            Zout1(m)=Z(m);
        end;
	end;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Calcula la distancia entre dos putos  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [dist]=distancia(P1, P2)
    dist=abs(P1-P2);% Distancia entre dos puntos.
    
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Inicializa los centros  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [Z]=inicializa_centros(ImVecteur, k)
    % Distribuye los centros uniformemente
    dx= (max(ImVecteur))-(min(ImVecteur));

    dzx= dx/(k+1);    % distancia entre centros coordenada X.

    for i=1:k,
        Z(i)=min(ImVecteur)+(dzx*i);

    end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -