ウェーブレット領域の隠れマルコフツリーモデルに基づく画像ノイズ除去法

1.問題の説明:

         ウェーブレット領域の隠れマルコフツリーモデルに基づく画像ノイズ除去法。隠れマルコフモデル(HMM)は、隠れマルコフ連鎖から観測シーケンスをランダムに生成するプロセスを記述し、生成モデルに属します。HMMは、時系列に関する確率モデルであり、隠れマルコフ連鎖から観測不可能な状態の乱数列(状態シーケンス)をランダムに生成し、各状態から観測の乱数列(観測シーケンス)を生成するプロセスを記述します。

2.プログラムの一部:

 

M =サイズ(ES、1);
P =サイズ(w、1);
level = log2(P);
BE = zeros(M、P、P);
BEP = zeros(M、P、P);
BER = zeros(M、P、P);
 
AL = zeros(M、P、P);
P1 = zeros(M、P、P);
P2 = zeros(M、M、P、P);

%UPステップ
wtmp = repmat(w、[1 1 M]);
wtmp = shiftdim(wtmp、2);
si = 2 ^(レベル-1)+1; ei = P; sj = 2 ^(レベル-1)+1; ej = P;
gtmp = gauss(wtmp、MU、SI);
scale = repmat(mean(gtmp、1)、[M 1 1]);
BE(:、si:ei、sj:ej)= gtmp(:、si:ei、sj:ej)./ scale(:、si:ei、sj:ej);

%clear MUtmp SItmp;

k =レベルの場合:-1:2
 J = 2 ^(k-1); J2 = J * J; si = J + 1; ei = 2 * J; sj = J + 1; ej = 2 * J;

 EStmp = reshape(ES(:、:、si:ei、sj:ej)、M、M * J2);

 M == 2の場合
  %%%%%% M = 2の場合、以下の方が高速です
  BEtmp = zeros(M、M * J2);
  BEtmp(:、1:M:(M * J2))= reshape(BE(:、si:ei、sj:ej)、M、J2);
  BEtmp(:、2:M:(M * J2))= BEtmp(:、1:M:(M * J2)); 
 else
  %一般的なM(2に等しくない)の場合、次を使用します
  %
  BEtmp = zeros(M、M * 4 ^(k-1));
  m = 1:Mの場合
   BEtmp(:、m:M:(M * 4 ^(k-1)))= reshape(BE(:、si:ei、sj:ej、:)、M、4 ^(k -1));
  終わり;
 終わり;

 BEtmp = reshape(EStmp。* BEtmp、[MMJJ]);
 BEP(:、si:ei、sj:ej)= squeeze(sum(BEtmp、1));
 
 sni = J / 2 + 1; eni = si-1; snj = J / 2 + 1; enj = sj-1;

%ベータ子行列の
 構築BCtmp = BEP(:、si:2:ei、sj:2:ej);
 BCtmp = BCtmp。* BEP(:、si + 1:2:ei、sj:2:ej);
 BCtmp = BCtmp。* BEP(:、si:2:ei、sj + 1:2:ej);
 BCtmp = BCtmp。* BEP(:、si + 1:2:ei、sj + 1:2:ej); 
 scaletmp = repmat(mean(BCtmp、1)、[M 1 1]);
 scale(:、sni:eni、snj:enj)= scale(:、sni:eni、snj:enj)。* scaletmp;
 BE(:、sni:eni、snj:enj)= gtmp(:、sni:eni、snj:enj)./ scale(:、sni:eni、snj:enj)。* BCtmp;

%構成BE(:、pai(i)、paj(j)、dindex)行列
 Btmp =ゼロ(M、J、J);
 Btmp(:、1:2:J、1:2:J)= BE(:、sni:eni、snj:engine);
 Btmp(:、2:2:J、1:2:J)= BE(:、sni:eni、snj:engine);
 Btmp(:、1:2:J、2:2:J)= BE(:、sni:eni、snj:engine);
 Btmp(:、2:2:J、2:2:J)= BE(:、sni:eni、snj:engine);
 BER(:、si:ei、sj:ej)= Btmp。/ BEP(:、si:ei、sj:ej);
終わり;

EStmp BEtmp BCtmpBtmpをクリアします。

%DOWNステップ
 %initialize
 AL(:、2,2)= PS(:、2,2);

 k = 2の場合:レベル
  J = 2 ^(k-1); J2 = J * J;
  si = J + 1; ei = 2 * J; sj = J + 1; ej = 2 * J;
  sni = J / 2 + 1; eni = si-1; snj = J / 2 + 1; エンジン= sj-1;
  Atmp =ゼロ(M、J、J);
  Atmp(:、1:2:J、1:2:J)= AL(:、sni:eni、snj:エンジン);
  Atmp(:、2:2:J、1:2:J)= AL(:、sni:eni、snj:エンジン);
  Atmp(:、1:2:J、2:2:J)= AL(:、sni:eni、snj:エンジン);
  Atmp(:、2:2:J、2:2:J)= AL(:、sni:eni、snj:エンジン);

  Atmp = repmat(reshape(Atmp。* BER(:、si:ei、sj:ej)、1、M * J2)、[M 1]);
  EStmp = reshape(ES(:、:、si:ei、sj:ej)、M、M * J2);
  ALtmp = reshape(EStmp。* Atmp、[MMJJ]);
  AL(:、si:ei、sj:ej)= squeeze(sum(ALtmp、2));
 終わり;

 クリアAtmpEStmp ALtmp;


k = 2の確率計算します:レベル
J = 2 ^(k-1); J2 = J * J;
 si = J + 1; ei = 2 * J; sj = J + 1; ej = 2 * J;
 sni = J / 2 + 1; eni = si-1; snj = J / 2 + 1; エンジン= sj-1;

 temp = repmat(sum(AL(:、si:ei、sj:ej)。* BE(:、si:ei、sj:ej)、1)、[M 1]);
 P1(:、si:ei、sj:ej)= AL(:、si:ei、sj:ej)。* BE(:、si:ei、sj:ej)./ temp;
  
 %計算P2

 M == 2 
  %の場合M = 2の場合、以下の方が速い可能性があります
  BEtmp = zeros(M、M * J2);
  BEtmp(:、1:M:(M * J2))= reshape(BE(:、si:ei、sj:ej)、M、J2);
  BEtmp(:、2:M:(M * J2))= BEtmp(:、1:M:(M * J2));
 else
  %一般的なM(2に等しくない)の場合、次の
   BEtmp = zeros(M、M * J2);を使用します。
  m = 1:Mの場合
   BEtmp(:、m:M:(M * J2))= reshape(BE(:、si:ei、sj:ej、:)、M、J2);
  終わり;
 終わり;

 BEtmp = reshape(BEtmp、[MMJJ]);

 EStmp = ES(:、:、si:ei、sj:ej);
 Atmp = zeros(M、J、J);
 Atmp(:、1:2:J、1:2:J)= AL(:、sni:eni、snj:enj);
 Atmp(:、2:2:J、1:2:J)= AL(:、sni:eni、snj:enj);
 Atmp(:、1:2:J、2:2:J)= AL(:、sni:eni、snj:enj);
 Atmp(:、2:2:J、2:2:J)= AL(:、sni:eni、snj:enj);
 Atmp = repmat(reshape(Atmp、1、M * J2)、[M 1]);
 Atmp = reshape(Atmp、[MMJJ]);
 BERtmp = repmat(reshape(BER(:、si:ei、sj:ej)、1、M * J2)、[M 1]);
 BERtmp = reshape(BERtmp、[MMJJ]);
 temp = repmat(reshape(temp、1、M * J2)、[M 1]);
 temp = reshape(temp、[MMJJ]);
 P2(:、:、si:ei、sj:ej)= BEtmp。* EStmp。* Atmp。* BERtmp。/ temp;
終わり;
P1(:、2,2)= AL(:、2,2)。* BE(:、2,2)./ repmat(sum(AL(:、2,2)。* BE(:、2,2 )、1)、[M 1 1]);

clear temp BEtmp EStmp Atmp BERtmp;

%Mステップ
PS(:、2,2)= P1(:、2,2);

k = 2の場合:レベル
 J = 2 ^(k-1); J2 = J * J;
 si = J + 1; ei = 2 * J; sj = J + 1; ej = 2 * J;
 sni = J / 2 + 1; eni = si-1; snj = J / 2 + 1; エンジン= sj-1;

 pstmp = sum(sum(P1(:、si:ei、sj:ej)、3)、2)/ J2;
 pstmp = pstmp。*(pstmp> 1st-4)+ 1st-4 *(pstmp <= 1st-4);
 PS(:、si:ei、sj:ej)= repmat(pstmp、[1 JJ]);

 if zm == 0
  %平均密度がゼロの場合はMUを更新しない
  mutmp = sum(sum(wtmp(:、si:ei、sj:ej)。* P1(:、si:ei、sj:ej)、3)、 2)/ J2;
  MU(:、si:ei、sj:ej)= repmat(mutmp、[1 JJ])./ PS(:、si:ei、sj:ej);
 終わり;

 sitmp = sum(sum((wtmp(:、si:ei、sj:ej))-MU(:、si:ei、sj:ej))。^ 2. * P1(:、si:ei、sj:ej )、3)、2)/ J2;

 SI(:、si:ei、sj:ej)= repmat(sitmp、[1 JJ])./ PS(:、si:ei、sj:ej);

 estmp = sum(sum(P2(:、:、si:ei、sj:ej)、4)、3)/ J2;
 ptmp = [PS(:、sni、snj) '; PS(:、sni、snj) '];
 ES(:、:、si:ei、sj:ej)= repmat(estmp、[1 1 JJ])./ repmat(ptmp、[1 1 JJ]);
終わり; %k

ESN = ES; PSN = PS; MUN = MU; INS = SI;


 

3.シミュレーションの結論:

D-13

おすすめ

転載: blog.csdn.net/ccsss22/article/details/115019710