MATLAB Answers

Why this program by Jose Vicente Manjon-Herrera isn´t working for my image?

1 view (last 30 days)
Veronika
Veronika on 23 Mar 2017
Commented: Veronika on 23 Mar 2017
Dear all,
I would like to use this code by Jose Vicente Manjon-Herrera:
function [mu,mask]=kmeans(ima,k)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% kmeans image segmentation
%
% Input:
% ima: grey color image
% k: Number of classes
% Output:
% mu: vector of class means
% mask: clasification image mask
%
% Author: Jose Vicente Manjon Herrera
% Email: jmanjon@fis.upv.es
% Date: 27-08-2005
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% check image
ima = 'thorax-mdl.jpg';
ima=double(ima);
copy=ima; % make a copy
ima=ima(:); % vectorize ima
mi=min(ima); % deal with negative
ima=ima-mi+1; % and zero values
s=length(ima);
% create image histogram
m=max(ima)+1;
h=zeros(1,m);
hc=zeros(1,m);
for i=1:s
if(ima(i)>0) h(ima(i))=h(ima(i))+1;end;
end
ind=find(h);
hl=length(ind);
% initiate centroids
mu=(1:k)*m/(k+1);
% start process
while(true)
oldmu=mu;
% current classification
for i=1:hl
c=abs(ind(i)-mu);
cc=find(c==min(c));
hc(ind(i))=cc(1);
end
%recalculation of means
for i=1:k,
a=find(hc==i);
mu(i)=sum(a.*h(a))/sum(h(a));
end
if(mu==oldmu) break;end;
end
% calculate mask
s=size(copy);
mask=zeros(s);
for i=1:s(1),
for j=1:s(2),
c=abs(copy(i,j)-mu);
a=find(c==min(c));
mask(i,j)=a(1);
end
end
mu=mu+mi-1; % recover real range
but still I have this error:
Not enough input arguments.
Error in kmeans (line 43)
mu=(1:k)*m/(k+1);
I attach my original image. Can you advise me? Thank you for your answers.

  2 Comments

Adam
Adam on 23 Mar 2017
What do you mean by 'this' code? All you have shown is an error that implies you are calling kmeans somewhere and with too few arguments. Attaching your image is not so helpful to solving an error, the code would be more useful. If the algorithm doesn't do what you want then maybe the image is useful, but for purely fixing an error we need code.

Sign in to comment.

Answers (0)


Translated by