资源简介
本程序为M文件,运行环境为matlab, 也可通过matlab转化为C++运行。实现功能:可实现医学图像的自动分割!
代码片段和文件信息
%%%%%%%%%%% 基于聚类法的医学图像分割实验 %%%%%%%%%%%%%%%%
% 10.16.2015 AM-08:22
clcclear allclose all;
% tic
% Elapsed time is 0.520028 seconds.
%% 调入原始图像
data=imread(‘D:\123\888.jpg‘ );
data=double(data);
% 第1幅图像
figuresubplot(221)imshow(uint8(data))title(‘原图像‘);
% subplot(231)注解:2*3矩阵中的第1幅图像- 从左到右,由上至下
% 第2幅图像
subplot(222)imhist(uint8(data))title(‘原图像直方图‘);
%% 由随机数产生初始聚类中心
[M N]=size(data);
[countx]=imhist(uint8(data));
mima=find(count~=0); %灰度等级 256*1的矩阵
V1=zeros(2); %产生2个分组
V2=zeros(2);
U1=zeros(length(mima)2); %产生一个n*c的矩阵
V1(1)=mima(round(rand(1)*(length(mima)/4))+1); %产生随机数 产生初始聚类中心
V1(2)=mima(round(length(mima)/2+rand(1)*(length(mima)/4))+1);
%% 黑白聚类中心的寻找与计算并进行图像分割
k=0;
while k==0
for j=1:length(mima)
if abs(mima(j)-V1(2)) U1(j1)=0.0;
U1(j2)=1.0;
else
U1(j1)=1.0;
U1(j2)=0.0;
end
end
tp1=0.0;
tp2=0.0;
tp3=0.0;
tp4=0.0;
for j=1:length(mima)
tp1=tp1+count(mima(j))*(mima(j)-1)*U1(j1);
tp2=tp2+count(mima(j))*U1(j1);
tp3=tp3+count(mima(j))*(mima(j)-1)*U1(j2);
tp4=tp4+count(mima(j))*U1(j2);
end
V2(1)=tp1/tp2;
V2(2)=tp3/tp4;
if (abs(V2(1)-V1(1))+abs(V2(2)-V1(2)))>0.0001
V1(1)=V2(1);
V1(2)=V2(2);
else
k=1;
end
end
subplot(223)
img1=250.*ones(size(data));
for i=1:M
for j=1:N
tp=data(ij);
for l=1:length(mima)
if tp==mima(l)
k=l;
end
end
if U1(k1)>=U1(k2)
img1(ij)=0;
end
end
end
% 第3幅图像
subplot(223)imshow(uint8(img1))title(‘聚类分割图像结果‘);
% 第4幅图像
subplot(224)imhist(uint8(img1))title(‘2D直方图‘)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1933 2015-10-16 09:46 Juleishuiji.m
评论
共有 条评论