查看: 1124  |  回复: 3

cjy0803

新虫 (初入文坛)

[求助] 求解kmeans图像分割程序中的一些问题 已有2人参与

1 计算灰度直方图之前为什么要去除图像灰度值中的0值?
2 计算灰度直方图那一块代码没理解 h与hc这两个矩阵是什么作用
3 程序中的cc应该是一个值,为什么要写成cc(1)这种形式?
下面是部分代码
谢谢解答
CODE:
clc;
clear;

k=4;%定义聚类个数

% 读入图像
A=imread('C:\Documents and Settings\Administrator\桌面\wonder\2.jpg','jpg');
% 转为灰度图像
B=rgb2gray(A);
% 保存至22.jpg
imwrite(B,'C:\Documents and Settings\Administrator\桌面\wonder\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

回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gorgan

木虫之王 (文学泰斗)

无意苦争春

【答案】应助回帖

感谢参与,应助指数 +1
1 计算灰度直方图之前为什么要去除图像灰度值中的0值?
答:本来灰度范围是0到255,但是要转化为1到256,才能建立一个长度为256的数组
因为matlab里数组不能是从0开始的,比如m是一个数组,m[0]是非法的,m的第一个元素是m[1]
3 程序中的cc应该是一个值,为什么要写成cc(1)这种形式?
答:等于最小值的可能不是一个元素,比如最小值为1,等于1的可能有好几个,cc(1)就是从相等的里面取出一个
无我相,无人相,无众生相,无寿者相
2楼2014-06-09 14:07:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

仙木映月

金虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
cjy0803: 金币+7, ★★★很有帮助 2014-06-17 09:06:02
问题1:
这步的主要目的并不是为了要去掉灰度为0的值,而是要确定图像中灰度值的范围。比如一个图像的灰度只有:12,13,14,15.则得到的s=4,ima为:1,2,3,4. 这省去了不必要的循环运算。
问题2:
h是为了统计处于灰度值区间ima内的各个灰度值上像素点的个数,用这个做均一化就可以求出灰度的直方图了。
hc是为了给离Kmeans的k个中心最近的点做标记,这样就可以利用这样的分类迭代更新中心值mu了。
问题3:
楼上说可能不止一个是从范围的角度讲的。其实这里的小循环的目的就是要找到当前点距离哪个分累中心最近,并用这个分类重心的标号为这个点做标记。cc中的第一个元素就是那个距离某中心最近的该中心的标号,所以用来更新hc。
Hardtosay.
3楼2014-06-10 09:14:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cjy0803

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by gorgan at 2014-06-09 14:07:45
1 计算灰度直方图之前为什么要去除图像灰度值中的0值?
答:本来灰度范围是0到255,但是要转化为1到256,才能建立一个长度为256的数组
因为matlab里数组不能是从0开始的,比如m是一个数组,m是非法的,m的第一个元 ...

谢谢
4楼2014-06-17 09:06:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 cjy0803 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 帮忙看看fileCode +4 wwncly 2026-08-10 8/400 2026-08-10 22:07 by demonstreets
[基金申请] 小木虫上这么多卖论文的,真有人买论文么?感觉没必要啊 +3 Tide man 2026-08-10 3/150 2026-08-10 21:48 by GZUZM
[基金申请] FileCode能看出啥? +7 要乐观耀哥 2026-08-10 15/750 2026-08-10 19:29 by 要乐观耀哥
[基金申请] 综述论文作为代表作会不会影响评审专家的印象分? +10 yufeiwaner 2026-08-09 11/550 2026-08-10 18:47 by yufeiwaner
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +8 家与远方 2026-08-10 11/550 2026-08-10 17:09 by 六两废铜
[基金申请] 关于Filecode分析方法 +3 majunge000 2026-08-10 3/150 2026-08-10 15:46 by lch2012
[基金申请] 好奇怪的filecode +4 布布和一二 2026-08-08 5/250 2026-08-10 14:20 by 冰心玉壶晴
[基金申请] 据悉今年马上要出结果了 +7 瞬息宇宙 2026-08-10 8/400 2026-08-10 12:42 by Vivilian
[基金申请] 这样的filecode谁见过 +11 布布和一二 2026-08-08 22/1100 2026-08-10 11:10 by wmfsnow
[基金申请] 面上项目filecode邪修 +5 西山十月 2026-08-09 7/350 2026-08-10 07:32 by 仁砚薪传
[基金申请] filecode与中标关系的预测 +5 布布和一二 2026-08-07 5/250 2026-08-09 16:15 by 袁向阳007
[基金申请] fileCode有新解读? +10 Tide man 2026-08-08 18/900 2026-08-09 12:55 by 仁砚薪传
[基金申请] 关于豆爷回答的JTJC与%2F数量 +5 yang182083 2026-08-06 7/350 2026-08-08 18:29 by zhanghaozhu
[基金申请] 关于filecode +4 布布和一二 2026-08-07 7/350 2026-08-07 22:55 by zhanghaozhu
[基金申请] 化学口download_prp&fileCode的固定段好像这几天一直没变,有变的大神么? +3 Tide man 2026-08-07 4/200 2026-08-07 22:39 by Tide man
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] filecode变化情况 +6 布布和一二 2026-08-07 22/1100 2026-08-07 14:45 by 且听虎啸
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
[基金申请] 求各位大神看下 100+6 hpkpkpkp 2026-08-05 33/1650 2026-08-06 14:49 by zhiyanjiang
[基金申请] 好消息?这个有何含义??? +8 Tide man 2026-08-05 10/500 2026-08-05 16:14 by xmuxiaoyu
信息提示
请填处理意见