永发信息网

如何将在MATLAB中将处理后的聚类后的灰度值再用图像呈现出来

答案:2  悬赏:10  手机版
解决时间 2021-03-03 02:35
  • 提问者网友:疯子也有疯子的情调
  • 2021-03-02 02:40
clc;
clear;
k=4;%定义聚类个数
% 读入图像
A=imread('1.jpg','jpg');
% 转为灰度图像
B=rgb2gray(A);
% 保存至22.jpg
imwrite(B,'22.jpg','jpg');
ima=double(B); % 转为double类型
copy=ima; % 保留副本
ima=ima(:); % 向量化
mi=min(ima); % 最小值为0
ima=ima-mi+1; % 转换灰度范围 原[0,255] 现[1,256] 去除0值
s=length(ima); % s=m*n
% 计算图像灰度直方图
m=max(ima)+1; % m=257
h=zeros(1,m); % h 1*257
hc=zeros(1,m); % hc 1*257
for i=1:s % 遍历向量
if ima(i)>0
h(ima(i))=h(ima(i))+1;
end
end
ind=find(h); % 返回h中非零元素所在位置
hl=length(ind); % 计算h中非零元素个数 hl=256
% 初始化质心
mu=(1:k)*m/(k+1);
% 开始
while(true)
oldmu=mu;
% 当前的分类
for i=1:hl
c=abs(ind(i)-mu); % 计算每个值到中心的距离
cc=find(c==min(c));% 找出距离最小的点
hc(ind(i))=cc(1);
end
%重新计算均值
for i=1:k,
a=find(hc==i);
mu(i)=sum(a.*h(a))/sum(h(a));
end
if mu==oldmu
break;
end;
end求补全显现出聚类后的图像,尽量不用自带的kmeans源码
最佳答案
  • 五星知识达人网友:迟山
  • 2021-03-02 03:06
Truth is the daughter of time.
全部回答
  • 1楼网友:杯酒困英雄
  • 2021-03-02 04:04
不明白啊 = =!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯