function [iter, mask, P1, P2, P3] = EMGMM(I, k, m, n)
ma = min(max(I)); % 取最大值
P1 = (1:k)*200/(k+1); % 初始化平均值数组
P2 = ones(1,k)*100; % 初始化方差数组
p3 = ones(m,n)/k;
P3 = cell(1,k); % 初始化先验系数 k维矩阵
for i = 1:k
P3{i} = p3;
end
iter = 0; % 迭代次数
% LOG = []; % 似然函数值
% loglik_p = -inf; % 初始似然函数值
% EM算法更新参数
while(1)
iter = iter + 1;
% E步
B = gaussian(I, P1, P2, k); % 高斯分布
for i = 1:k
C{i} = cell2mat(P3(i)).*cell2mat(B(i));
end
D = zeros(m,n);
for i = 1:k
D = D + cell2mat(C(i));
end
for i = 1:k % 后验概率Z (t)
Z{i} = cell2mat(C(i))./(D+eps);
end
% M步
for j = 1:k % 更新均值
E1 = cell2mat(Z(j)).*I;
E2 = sum(sum(E1));
E3 = sum(sum(cell2mat(Z(j))));
P1(j) = E2/(E3+eps);
end
for j = 1:k % 更新方差
F1 = (I - P1(j)).*(I - P1(j));
F2 = cell2mat(Z(j)).*F1;
F3 = sum(sum(F2));
F4 = sum(sum(cell2mat(Z(j))));
P2(j) = F3/(F4+eps);
end
G = zeros(m,n);
for j = 1:k
G = G + cell2mat(Z(j));
end
for j = 1:k
H1 = cell2mat(Z(j));
H2 = G;
P3{j} = H1./(H2+eps);
end
% P1 = P11;
% P2 = P22;
% P3 = P33;
if iter == 20
break;
end
end
BB = gaussian(I, P1, P2, k);
for i = 1:k
CC{i} = cell2mat(P3(i)).*cell2mat(BB(i));
end
DD = zeros(m,n);
for i = 1:k
DD = DD + cell2mat(CC(i));
end
for i = 1:k
ZZ{i} = cell2mat(CC(i))./(DD+eps);
end
% 计算每个点的归类
for i = 1:k
ZZZ(:,:,i) = cell2mat(ZZ(i));
end
mask = zeros(m,n); % 生成I大小的mask
for i = 1:m
for j = 1:n
for t = 1:k
M(t)= ZZZ(i,j,t); % 生成(i,j)位置的数组
end
MA = find(M == max(M)); % 找到数组最大值的索引
mask(i,j) = MA(1);
end
end
GMM.zip_GMM_Gaussian Mixture_image segmentation_mixture_高斯混合模型
版权申诉
35 浏览量
2022-07-15
02:14:38
上传
评论
收藏 2KB ZIP 举报
局外狗
- 粉丝: 70
- 资源: 1万+
最新资源
- 基于SSM开发的旅游信息管理系统程序.zip
- 医学图像分割数据:covid-19肺部感染区域分割【包含3个切面的切片数据、标签文件、可视化代码】
- 基于jsp+servlet实现的图书管理系统(源码+数据库 )
- 大河网servlet+jsp+jdbc的java原生小项目,包含了servlet过滤器和监听器的简单应用
- 链表-基于Java的单链表基本操作之链表相交.zip
- 链表-基于Java的单链表基本操作之删除操作.zip
- 链表-基于Java的单链表基本操作之逆向输出.zip
- 链表-基于Java的单链表基本操作之链表排序.zip
- 链表-基于Java的单链表基本操作之回文链表判断.zip
- 链表-基于Java的单链表基本操作之查找操作.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0