各ステップでD4ウェーブレット変換を「正規化」すると、最終的な画質が低下します


7

元の画像:

変換およびフィルタリング前の元の画像

(含まれている画像は.png画像であるため、表示用の保存/アップロードに追加の歪みは追加されていません)

私は「数学の波紋」の 20ページからD4変換を使用しました。これは基本的に次の5つのステップです。

フォワードd4:

c1 = √3 / 4.0 ;
c2 = (√3 - 2) / 4.0 ;
s[ IEVEN ] += √3 * s[ IODD ] ;
s[ IODD ] -= c1*s[ IEVEN ] + c2*s[ IPREVEVEN ] ;
s[ IEVEN ] -= s[ INEXTODD ] ;
s[ IEVEN ] *= ( √3 - 1 ) / √2 ;
s[ IODD ] *= ( √3 + 1 ) / √2 ;

逆:

c1 = √3 / 4.0 ;
c2 = (√3 - 2) / 4.0 ;
s[ IODD ] *= ( √3 - 1 ) / √2 ;
s[ IEVEN ] *= ( √3 + 1 ) / √2  ;
s[ IEVEN ] += s[INEXTODD] ;
s[ IODD ] += c1*s[ IEVEN ] + c2*s[IPREVEVEN] ;
s[ IEVEN ] -= √3 * s[ IODD ] ;

doubleC ++の精度値を使用して、これをコンパイルして実行しています。これを画像の行で実行し、次に列で実行します。粗いフィルターアルゴリズムを使用して、画像の差分係数の最低90%を削除します。

フィルタリングアルゴリズムは次のとおりです。

  • 変換された画像全体を(一連の数値として)実行します
  • 最大の差分係数(maxVal)を見つける(2D画像全体で
  • minValToSurvive1%として選択しmaxValます。
  • 差分係数の大きさが未満の場合はminValToSurvive、ゼロになります。

これが私の問題です。最も低い差分係数の83%のみを画像から削除すると(minValToSurvive = 0.01 * maxVal)、次のようになります。

正規化された

d4 83%削減を正規化

正規化手順を削除した場合:

s[ IEVEN ] *= ( √3 - 1 ) / √2 ; // REMOVE
s[ IODD ] *= ( √3 + 1 ) / √2 ;

(fwd変換とreverse変換の両方で)、コンポーネントの90%を削除した後の結果ははるかに優れてます(はるかに少ないノイズ)

90%削減、正規化されていません

だから私は2つの問題の1つを考えることができます:

  • (√3-1)/√2の係数で画像を正規化すると精度が落ちる
  • 正しくフィルタリングしていません

それとも私は間違っていますか?フィルタリング(重要でないコンポーネントの削除)を誤って行っている場合、フィルタリングするためのより良い方法は何ですか?浮動小数点精度の場合、すべてのステップで変換を正規化しないでください

回答:


3

正しい答えは、次の更新/予測を行う前に、入力信号に対して更新/予測の各ステップを完全に実行する必要があるということです。私がやっていたことは、信号を歩きながら、それぞれの更新/予測を実行することでした。

「リップル」の158ページに、参照実装があります。

// s is the signal
#define IEVEN (2*j)
#define IODD (2*j + i)
for( int i = 1 ; i <= n/2 ; i *= 2 )
{
  for( int j = 0 ; j <= n/2 - i ; j += i ) // Must do this Predict step COMPLETLEY
    s[ IEVEN ] += √3 * s[ IODD ] ;

  for( int j = 0 ; j <= n/2 - i ; j += i ) // Then this one..
  {
    int prevEvenIndex = IPREVEVEN ;
    s[ IODD ] -= d4c1*s[ IEVEN ] + d4c2*SAFE_PREV(s,prevEvenIndex) ;
  }

  for( int j = 0 ; j <= n/2 - i ; j += i )
  {
    int nextOddIndex = INEXTODD ;
    s[ IEVEN ] -= SAFE_NEXT(s,nextOddIndex) ;
  }

  for( int j = 0 ; j <= n/2 - i ; j += i )
  {
    s[ IEVEN ] *= d4normEvens ;
    s[ IODD ] *= d4normOdds ;
  }
}

98%0のD4変換:

d4 98%


あなたの研究にアップデートを投稿してくれてありがとう!このサイトにはまだ多種多様な専門家が集まっているわけではないため、すべての質問に回答できるわけではありませんが、戻って調査結果を共有したことは素晴らしいことです。同様の情報を探している他の人にも役立つと思います。
フォノン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.