概率图模型PFM——无向图
2013-08-20 15:10 Loull 阅读(1764) 评论(0) 编辑 收藏 举报
马尔科夫随机场MRF联合概率分解,用到clique的概念,翻译“团”,是图上的连接子图。
两个最大团(x1,x2,xx3)和(x2,x3,x4)
MRF联合概率分解的另一个概念是potential function(势函数),联合概率分解成一系列potential函数的乘积。
Xc是最大团的所有结点。
一个potential function,是最大团的一个函数。
换一种理解方式,定义将potential function表示成指数函数
这样p(x)就可以表示成一系列E(Xc)的和的指数形式。
E(Xc)叫做能力函数,转化之后,可以将图理解为一个能力的集合,他的值等于各个最大团的能量的和。
优缺点:
无向图模型中势函数设计不受概率分布约束,设计灵活,但全局归一代价高。
有向图模型无需全局归一、训练相对高效
实验:
下面附上,上述实验的matlab代码。
% PRML image de-noising clc; clear; close all; A=imread('a.jpg');%读入名字为a.jpg的图片 imshow(A); M=400; N=300;%把图片处理一下大小 A=imresize(A,[M,N]); X = rgb2gray(A); for i=1:M%%二值化图像,要根据实验图像来改天阈值,本实验阈值为200 for j=1:N if(X(i,j)<200)%200为阈值,请您根据实际实验图片改变 X(i,j)=0; else X(i,j)=255; end end end Y=X%把原图X保存在Y里 imshow(X)%显示X for i=1:M%这两个for循环是改变二值化图像10%点的值。 for j=1:N if(rand()<0.1)%以百分之10的概率进行改变 if(Y(i,j)==0) % Y(i,j)=250; Y(i,j)=255; else Y(i,j)=0; end end end end figure; imshow(Y);%显示带有噪声的图像 YY=zeros(M,N) for i=1:M%把{0,255}转换为{-1,+1} for j=1:N if Y(i,j)==255 YY(i,j)=1; else YY(i,j)=-1; end end end %参数设置 beta=1.0; yita=2.1; h=0; %step1 R=YY; %R是要逼近X的图像,YY是噪声图像 %step2 Change=1 while Change %系统扫描法,可以试试随机选点法的效果 Change=0; for i=2:M-1 for j=2:N-1 temp=R(i,j); %若这个点状态为+1,计算这一点的能量。 %解释一下为什么是2*beta..因为这个点不仅影响自己的能量函数,也影响了周围四个点的能量函数。 %所以-2*beta=-beat*(..)-beat*(...).第一项相当于它自己的能量函数,第二项相当于周围能量函数的一部分。 %R(i,j)不会对其他点的能量造成影响,所以只考虑(i,j)点的能量与其组成团的点的部分能量函数即可。 R(i,j)=1; Epos=h*R(i,j)-2*beta*(R(i+1,j)*R(i,j)+R(i-1,j)*R(i,j)+R(i,j+1)*R(i,j)+R(i,j-1)*R(i,j))-yita*R(i,j)*YY(i,j); R(i,j)=-1; Eneg=h*R(i,j)-2*beta*(R(i+1,j)*R(i,j)+R(i-1,j)*R(i,j)+R(i,j+1)*R(i,j)+R(i,j-1)*R(i,j))-yita*R(i,j)*YY(i,j); if Epos~=Eneg R(i,j)=1.0*(Epos<Eneg)+(Epos>Eneg)*-1.0; else R(i,j)=temp; end if temp~=R(i,j) Change=1;%若有变化则继续while1的系统扫描,若每个点都没有改变则结束程序 end end end end for i=1:M for j=1:N if(R(i,j)==1) Y(i,j)=255; else Y(i,j)=0; end end end figure; imshow(Y) %错误的概率 disp( ['error rate is %d ' num2str(sum(sum(Y~=X))/(M*N))])