kmeans 第乙個matlab演算法

2021-07-28 12:12:47 字數 2928 閱讀 5608

%k均值演算法

km = 32; %最終聚類的大小

%影象的大小

rgbsize = size(immatrix); %陣列下標從1開始

%imshow(immatrix); %顯示

%immatrix(1,1,1:end)

%for i=1:1:rgbsize(1)

%    for j=1:1:rgbsize(2)

%        immatrix(i,j,1) = 0; %為了方便顯示

%        immatrix(i,j,2) = 0;

%    end

%end

%演算法開始

%原始的切分點(轉置)

repeat_max_count = 50;

sp = [zeros(1,km);zeros(1,km);linspace(1,255,km)]';

sp_res = cell(repeat_max_count);

sp_res = sp;

all_sp_dis = 100000000;

repeat_count = 1;

while 1

sp_point_sum = zeros(km,3); %收集到的點的各個維度的畫素和

sp_sum = zeros(km,1); %收集到的畫素點在切分點之和

sp_cnt = zeros(km,1); %收集到的畫素點在切分點的個數

%im2sp immatrix歸屬於哪個切分點(陣列下標)

%im2sp=zeros(rgbsize(1), rgbsize(2));

for i=1:1:rgbsize(1)

for j=1:1:rgbsize(2)

dis = 100000;

selectp = 1;

for k=1:1:km %選出最近的那個點

ss=sp(k,1:end,1:end)';

tp = [immatrix(i,j,1) immatrix(i,j,2) immatrix(i,j,3)]';

dis_p = ss-double(tp);  

dis2 = norm(dis_p,3);

if dis2 < dis

dis = dis2;

selectp = k;

endend

tt = sp_point_sum(selectp,1:end);

tp = double([immatrix(i,j,1) immatrix(i,j,2) immatrix(i,j,3)]);

sp_point_sum(selectp,1:end) = tt + tp;

sp_sum = sp_sum + dis;

sp_cnt(selectp) = sp_cnt(selectp) + 1;

endend

sp_new = zeros(km,3);

sp_all_change = 0; %兩次計算的原始點之間的變化率,判斷結束的條件

for ii=1:1:km

if sp_cnt(ii) == 0

sp_new(ii) = sp(ii);

else

sp_new(ii,1:end) = sp_point_sum(ii,1:end)/sp_cnt(ii);

sp_all_change = sp_all_change + norm(sp_new(1:end)-sp(1:end), 3);

endend

repeat_count = repeat_count + 1

if repeat_count >= repeat_max_count

break

endsp = sp_new;

%sp_res = [sp_res;sp];

sp_res = sp;

if all_sp_dis - sp_all_change < 1

break

endall_sp_dis = sp_all_change;

%length(x1)-length(unique(x1))

endy_count = 5;

x_count = double(int8((repeat_count + y_count - 1 + 1) / y_count));

subplot(x_count,y_count,1);

imshow(immatrix);

for ii=1:1:repeat_count

immatrixtmp = immatrix;

ssp = cell2mat(sp_res(ii));

for i=1:1:rgbsize(1)

for j=1:1:rgbsize(2)

dis = 100000;

selectp = 1;

for k=1:1:km %選出最近的那個點

ss=ssp(k,1:end,1:end)';

tp = [immatrixtmp(i,j,1) immatrixtmp(i,j,2) immatrixtmp(i,j,3)]';

dis_p = ss-double(tp);  

dis2 = norm(dis_p,3);

if dis2 < dis

dis = dis2;

selectp = k;

endend

immatrixtmp(i,j,1:end) = uint8(ssp(selectp,1:end));

endend

[x_count y_count ii]

subplot(x_count,y_count,ii+1);

imshow(immatrixtmp);

end

python第乙個程式設計 第乙個 Python 程式

簡述 安裝完 python 後,windows 中 開始選單或安裝目錄下就會有 idle 開發 python 程式的基本 ide 整合開發環境 幫助手冊 模組文件等。linux 中 只需要在命令列中輸入 python 命令即可啟動互動式程式設計。互動式程式設計 互動式程式設計不需要建立指令碼檔案,是...

第乙個部落格

我不知道為什麼 我在csdn上創了乙個賬號,又開通了部落格。也許我不是名人,也許幻想著成為名人。在這裡 我不會給任何人許諾,這個部落格可能有乙個博文 有兩個博文 或者會有很多 很多 很多。不過讓我有個大膽的猜想,如果這個部落格在今後有很多很多自己寫的博文,說明我成功了 在自己眼裡 也說明這個方法時正...

第乙個爬蟲

很多人學習python的目的就是為了學習能夠實現爬蟲的功能,這裡,我使用了scrapy框架來實現了乙個簡單的爬蟲功能,這裡我簡單的介紹一下scrapy專案的建立,和執行。1,第一步是安裝scrapy,我相信到了這一步,大多數人都已經會安裝第三方庫檔案了,這裡主要是使用命令pip install sc...