1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
function [ clusterimage ] = kmean_cluster_seg(image, k)
% K-mean cluster
%
% Init
colors = 255*rand(k,1);
clusterimage = zeros(size(image));
image = cast(image, 'double');
%
Errors = inf;
% (1%) allow
while (Errors > 0.01*size(image,1)*size(image,2))
kSize = zeros(k,1);
kSum = zeros(k,1);
Errors = 0;
% Set Colors
for i=1:size(image,1)
% Init
for j=1:size(image,2)
% Min
MatDiff = abs(colors-image(i,j));
[colorDiff colorMin] = min(MatDiff);
% Diff with Older
if colorMin ~= clusterimage(i,j)
Errors = Errors +1;
end
% Set Map
clusterimage(i,j) = colorMin;
% Add Result
kSize(colorMin) = kSize(colorMin) + 1;
kSum(colorMin) = kSum(colorMin) + image(i,j);
end
end
% Compute colors Means
colors = kSum./kSize;
end
clusterimage = cast(round(clusterimage*255/k),'uint8'); |
Partager