📄 kmeans1.m
字号:
function [ obraz, C ] = KMeans1( C, img, war_stopu )
k = size(C,2);
iter = 0; % ilosc iteracji
ilosc_pix = 1:1:k; % tablica ilosci pikseli nalezacych do poszczegolnych klastrow
C_new(3,k) = 0; % zerowanie wektora centroidow
odleglosci = 200; % wartosc poczatkowa dla war. stopu
while max(odleglosci) > war_stopu
for i=1:1:size(img,1)
for j = 1:1:size(img,2)
for a = 1:1:k
% sprawdzanie odleglosci piksela od poszczegolnych klastrow
d(a) = ((double(img(i,j,1))-C(1,a))^2+(double(img(i,j,2))-C(2,a))^2+(double(img(i,j,3))-C(3,a))^2)^0.5;
end
[Y(i,j) V] = min(d); % pobierz index minimum (numer klastra)
etykiety(i,j) = V; % zapisz index w tablicy etykiet
ilosc_pix(V) = ilosc_pix(V)+1; % powieksz liczbe pixeli nalezacych do klastra
obraz(i,j,:) = uint8(C(:,etykiety(i,j)));
end
end
[tmp row] = max(Y); % znajdowanie piksela o najwiekszej odleglosci
[tmp1 col] = max(tmp); % od przypisanego mu klastra
row = row(col);
for i=1:1:size(img,1) % liczenie nowych srodkow klastrow
for j = 1:1:size(img,2)
C_new(1,etykiety(i,j)) = double(C_new(1,etykiety(i,j)) + double(img(i,j,1))/ilosc_pix(etykiety(i,j)));
C_new(2,etykiety(i,j)) = double(C_new(2,etykiety(i,j)) + double(img(i,j,2))/ilosc_pix(etykiety(i,j)));
C_new(3,etykiety(i,j)) = double(C_new(3,etykiety(i,j)) + double(img(i,j,3))/ilosc_pix(etykiety(i,j)));
end
end
for i = 1:1:k
if ilosc_pix(i) == 0 % jesli brak pixeli dla danego klastra
C_new(:,i) = 0; % wykluczenie klastra
C_new(:,i) = img(row,col,:); % przypisanie do klastra punktu znajdujacego sie najdalej od obecnego (niepustego) centroidu
end
end
for i=1:1:k
odleglosci(i) = distance3D(C(:,i), C_new(:,i));
end
odlegl_max = max(odleglosci);
C = C_new; % przyjecie nowych srodkow klastrow
C_new(:,:) = 0; % zerowanie wektorow
ilosc_pix(:) = 0;
iter = iter+1;
disp(['W iteracji ',num2str(iter), ' odleglosc max: ',num2str(odlegl_max)]);
figure();
imshow(obraz);
title(['Obraz po ' num2str(iter) ' iteracji K-means']);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -