【图像分割】基于马尔科夫随机场实现图像分割matlab代码

355 阅读3分钟

1 简介

图像分割问题是图像处理和计算机视觉领域内的基本问题之一, 也是模式识别学科中特别令人 关注的一项特征提取技术.然而,由于图像分割的特点和计算机自身的局限性,图像分割却一直是上述领域的经典难题.自七十年代起,众多的学者一直在研究更高质量的图像分割方法.到目前为止,虽然 说在图像分割领域中已经呈现出了众多的研究成果,但是,很多方法都带有局限性,缺乏通用性的图 像分割方法和策略,也没有评价分割方法是否成功的客观标准.近年来,有人在现有的图像分割方法中引入数据驱动与模型驱动等分类概念,使图像分割技术能统一在目标函数优化的框架之下. 作为图像分割方法的一种,基于马尔可夫随机场模型的方法占据了十分重要的位置.本文的工作就是围绕基于马尔可夫随机场的图像分割技术中的一类新的模型———基于条件随机场的技术展开, 并设计实验进行论证.基于马尔可夫随机场模型的图像分割方法,属于基于统计的图像分割方法范 畴. 该方法作为图像处理领域一个有效的数学工具始于 1984 年 S.German 和 D.German 发表了文献[1]中提到的那篇有关随机场的著名论文. 马尔可夫随机场(Markov Random Field)包含着两层意思:马尔可夫和随机场.随机场可以看作为 对应于同一个样本空间的一组随机变量的集合.当然,这些随机变量之间可能有着某种依赖关系,也只有当这些变量之间存在依赖关系时,我们将其单独拿来看成一个随机场才有实际的意义.Markov 随机 场(MRF)就是加了 Markov 性质限制的随机场.所谓马尔可夫性质就是一个随机变量序列当按时间先后关系依次排序时,第 N 时刻的分布特性,与 N-1 时刻以前的随机变量的取值无关.

2 部分代码

% testMRF.m
% test the MRF functions.

%%% initPaths;
clc
clear all
close all
N=7; M=7;  K_states = 2; prop_mat_beta = 0.2; pFlip = 0.2;

[nodes] = initMRF(N, M, K_states, prop_mat_beta);

image = ones(N,M); image(:,1:round(M/2)) = zeros(N,round(M/2));
noisyImage = addNoise(image, pFlip)
figure;showIm(image); title('original image');
figure;showIm(noisyImage); title('noisy image');
figure; showIm(nodes{1}.links{1}.propMat, [0, 1]); 
title(['MRF compatibility matrix: ' num2str(1-prop_mat_beta) '   ' num2str(prop_mat_beta) ]);


% initialize local evidence: 
[nodes] = initLocalEvidence(nodes, noisyImage, pFlip);
[nodes] = initBPMessages(nodes, K_states);
figure;
nIter = 40;  maxProductFlag = 0;
for i = 1:nIter
   nodes = oneIterBP(nodes, maxProductFlag);
   nodes = computeBeliefs(nodes);
   im = marginals2image(nodes, 1, N, M);
   showIm(im); title(['after BP MMSE iteration ' num2str(i)]);
end
figure;showIm(im>0.5); title('BP max of the marginals');
%% bpmmLogProb = getLogProb(nodes,N,M,round(real(im>0.5)));

% now do the same thing, but with max product
maxProductFlag = 1;
% re-initialize
[nodes] = initBPMessages(nodes, K_states);
figure;
for i = 1:nIter
   nodes = oneIterBP(nodes, maxProductFlag);
   nodes = computeBeliefs(nodes);
   im = marginals2image(nodes, 1, N, M);
   showIm(im); title(['after BP MAP iteration ' num2str(i)]);
end
figure;showIm(im>0.5); title('BP max product');
%% bpmpLogProb = getLogProb(nodes,N,M,round(real(im>0.5)));

%% % run gbp
%% [gbp] = runGBP(nodes, N, M, K_states, prop_mat_beta, noisyImage);

%% figure;showIm(gbp{1}>0.5); title('gbp max of marginals solution');
%% gbpLogProb = getLogProb(nodes,N,M,round(real(gbp{1}>0.5)));

%% ------------------------------------------------------
%% ICM
nodes = initICM(nodes); figure;
for i = 1:nIter
   nodes = ICM(nodes);
   im = states2image(nodes, 1, N, M);
   showIm(im); title(['after ICM iteration ' num2str(i)]);
end
%% icmLogProb = getLogProb(nodes,N,M,im);
%% ------------------------------------------------------
%% % compare log likelihoods
%% fprintf(1,'BP max marginal: %g BP MAP: %g GBP max marginal: %g ICM: %g\n', ...
%%     bpmmLogProb, bpmpLogProb, gbpLogProb, icmLogProb);

3 仿真结果

4 参考文献

[1]胡阳涟. 基于马尔可夫随机场的图像分割研究. Diss. 西安理工大学.

部分理论引用网络文献,若有侵权联系博主删除。