%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...