clear all; close all; clc;
A = double(imread('bird_small.tiff'));% Load small image
% A = double(imread('bird_large.tiff'));% Load large image
dim = size(A,1); % number of pixels in picture's length/width
k = 16; % number of colors to represent
means = zeros(k, 3); % Initialize means to randomly-selected colors in the original photo.
rand_x = ceil(dim*rand(k, 1));
rand_y = ceil(dim*rand(k, 1));
for i = 1:k
means(i,:) = A(rand_x(i), rand_y(i), :);
end
for itr=1:100
s_x=zeros(k,3);
s_ind=zeros(k,1);
for i=1:dim
for j=1:dim
r=A(i,j,1);g=A(i,j,2);b=A(i,j,3);
[val ind]=min(sum((repmat([r,g,b],k,1)-means).^2,2));
s_x(ind,:)=s_x(ind,:)+[r,g,b];
s_ind(ind)=s_ind(ind)+1;
end
end
for ii=1:k
if s_ind(ii)>0
s_x(ii,:)=s_x(ii,:)./s_ind(ii);
end
end
d=sum(sqrt(sum((s_x-means).^2,2)))
if d<1e-5
break
end
means=s_x;
end
means = round(means);
itr
figure; hold on
for i=1:k
col = (1/255).*means(i,:);
rectangle('Position', [i, 0, 1, 1], 'FaceColor', col, 'EdgeColor', col);
end
axis off
% Recalculate the big image and display
large_image = double(imread('bird_large.tiff'));
figure;imshow(uint8(round(large_image)));
large_dim = size(large_image, 1);
for i = 1:large_dim
for j = 1:large_dim
r = large_image(i,j,1); g = large_image(i,j,2); b = large_image(i,j,3);
[val ind]=min(sum((repmat([r,g,b],k,1)-means).^2,2));
large_image(i,j,:) = means(ind,:);
end
end
figure;imshow(uint8(round(large_image))); hold off
imwrite(uint8(round(large_image)), 'bird_kmeans.jpg');% Save image
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
K-means图像处理.zip (3个子文件)
K-means图像处理
bird_large.tiff 848KB
kmeans_my.m 2KB
bird_small.tiff 48KB
共 3 条
- 1
资源评论
- vvitja2015-05-04不能直接运行,但是很有启发性。
- 是江姑娘呀2018-04-19你在逗我么?出来的结果是条纹图,以为是哪个国家的国旗呢!!!
- huantuzi2015-11-30可以运行,设置分类数目,对彩色图像聚类。
黄河沙smile8
- 粉丝: 4
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功