gco-v3.0使用

%% MyTest
clc;
clear;
%
%%
%
%
%产生待分割图像,大小为64*64
S = [64 64];
Miu = [90,150,190];Sig = [20, 20, 20];
Im = zeros(S(1),S(2));
Im(1:21,:) = random('norm',Miu(1),Sig(1),[21,64]);
Im(22:42,:) = random('norm',Miu(2),Sig(2),[21,64]);
Im(43:64,:) = random('norm',Miu(3),Sig(3),[22,64]);
figure,imshow(Im,[]);title('待分割图像');

Image=reshape(Im,S(1)*S(2),1);

topicNum=3;
temp = eye(topicNum);
temp(temp==0) = 2;
temp(temp==1) = 0;
smooth = temp;

dataCost=zeros(3,S(1)*S(2));
for i=1:S(1)*S(2)
        Pyx=normpdf(Image(i),Miu,Sig);
        dataCost(:,i) = -log( Pyx./sum(Pyx) );
end

Neighbors=zeros(S(1)*S(2),S(1)*S(2));

for i=1:S(1)*S(2)
    if(i+1<=S(1)*S(2))
        Neighbors(i,i+1)=1;
    end
    if(i-1>=1)
        Neighbors(i,i-1)=1;
    end
    if(i+64<=S(1)*S(2))
        Neighbors(i,i+64)=1;
    end
    if(i-64>=1)
        Neighbors(i,i-64)=1;
    end

end

h = GCO_Create(S(1)*S(2),3);             % Create new object with NumSites=4, NumLabels=3
GCO_SetDataCost(h,dataCost);   % Site  3   prefers label 3
GCO_SetSmoothCost(h,temp);   % 
GCO_SetNeighbors(h,Neighbors);
GCO_Expansion(h);                % Compute optimal labeling via alpha-expansion 
Label=GCO_GetLabeling(h);
[E D Smo] = GCO_ComputeEnergy(h)   % Energy = Data Energy + Smooth Energy
GCO_Delete(h);                   % Delete the GCoptimization object when finished
labels=reshape(Label,S(1),S(2));
figure;imshow(labels,[]);



http://en.pudn.com/downloads262/sourcecode/math/detail1206701_en.html



你可能感兴趣的:(gco-v3.0使用)