画像処理におけるFTの応用

上記の続き:離散フーリエ変換 (DFT)

4、2 次元フーリエ変換

これ以前は、この記事は FT の理論的部分の一般的な科学的派生であり、実用化にはまだほど遠いものでした。

前に関数の時間領域について言及したとき、デフォルトで時間 t を独立変数として使用しましたが、実際には独立変数は距離 x などの他の意味を持つこともあり、より多くの次元に拡張することもできます。離散的な二次元関数 f(x, y) と見なすことができ、独立変数 (x, y) は平面位置と理解でき、その値 f(x, y) は画像度値の対応する座標のチャネル強度またはグレー値

多くの場合、画像関数は正確な式を持っていませんが、フィルタリングすることはできます. 多くのよく知られている画像処理方法: ぼかし、エッジのシャープ化、歪み、およびいくつかの特別な様式化された操作などは、本質的には画像の取り扱い

前に何度も言及したチュートリアルに戻ります: Games101 の第 6 章:ラスタライズ (深度テストとアンチエイリアシング) には、元の画像 (時間領域) を周波数領域に変換する例があります。

FT の概念がない場合は、右の画像の特定のソースについて混乱する可能性があります. 周波数ドメイン画像のコンテンツの一部を後で「消去」すると、元の画像がぼやける可能性があることしかわかりませんが、知ることができるのは、右側の画像は元の画像をフーリエ変換して得られたものです。

1 次元フーリエ変換の場合: F(w)=\int_{-\infty}^{+\infty} f(x) e^{-i 2\pi fx} dx 2 次元への拡張形式は

F(u, v)=\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x, y) e^{-i 2 \pi(u x+vy )} dxdy

ただし、コンピュータは一般にデジタル信号を処理し、限られた数の離散計算しか実行できません. したがって、この制限の下での実際の計算は、2 次元の離散フーリエ変換です。

F(u, v)=\sum_{x=0}^{M-1}\sum_{x=0}^{N-1} f(x, y) e^{-i 2 \pi\left( \frac{ux}{M}+\frac{vy}{N}\right)}u=0,1,2, \cdots , M-1 \quad v=0,1,2, \cdots , N-1

f(x, y)上記のDFT後に得られた周波数領域の画像 に元の画像を代入したもの F(u, v) が右の画像

ただし、ここではまだ直感的ではありません. 結局のところ、私たちが見ているのは白黒の画像であり、周波数領域関数自体ではありません.

4.1 平面正弦波と 2 次元周波数領域 (K 空間)

1 次元の場合: 任意の関数を、f(x) 異なる周波数と異なる振幅の無数のサイン信号とコサイン信号の重ね合わせに分解できます。この特性は 2 次元にも拡張できます。つまり、任意の 2 次元画像を平面波 e^{-i 2 \pi(u x+vy)} の無数の複雑な重ね合わせ

各ベース平面波について、それをベクトル (u, v) で表すことができます。その単位ベクトルは波の方向に対応し、その大きさは周波数に対応します (これは本の写真への参照です\sqrt{x^2 + y^2})

これまでのところ、波の周波数と方向が得られており、違いは振幅と位相です.この2つは正確に結果に含まれていますが、それでも同じです.F(u, v)当面F(u, v) 振幅. , v によって得られる 2 次元行列で、振幅がさらにグレー値で表される場合、2 次元行列は別の画像として表すことができます。これは、まさに周波数領域の画像です (前の PPT の右側)

4.2 ローパスフィルタリングの意味

名前が示すように、ローパス フィルターは低周波数帯域のみを通過させ (高周波数情報を除去)、その逆も同様です。

このセクションの主な問題は、次のとおりです。対応する周波数ドメイン イメージを中心から消去し (ローパス フィルター処理)、復元された時間ドメイン イメージが元のイメージのぼやけたバージョンであると言うのはなぜですか? (逆に、中央部分を消去すると、画像コンテンツの境界を抽出するのと同様の効果が得られます)

まず、ベクトル (u, v) は、中心から離れるほど\sqrt{x^2 + y^2} 射影長が長くなり、高周波情報に対応します. 次に、画像が限られた範囲内にある場合、階調変化が大きくなります.レート、対応する高周波情報が多いほど(分解された帯域の周波数が高いほど、これは理解しやすく、1次元の状況について考えてください)、画像がぼやけているほど、隣接する色が滑らかになることを知っておく必要があります画像内の高周波情報を除外する必然的な結果です。

次の古典的な画像の時間領域図と周波数領域図を参照すると、前述の内容をよりよく理解できることがよくあります。

4.3 畳み込みカーネル (kernel) とフィルター演算子

フィルタリングは、特定の周波数の情報を除去することと理解できます. 同様に、フィルタリングは畳み込みと同等です.

レンダリングをある程度理解していれば、実際のゲーム開発でテクスチャをぼかす(高周波情報を取り除く)方法を知っているはずです. もちろん、何も考えずに FFT を使用することはなく、逆に非常に単純な方法を使用します. 、これは各ピクセルとその周囲のピクセルを平均化することであり、多くの場合パフォーマンスを考慮して、3x3 の平均を実行するだけで良好なぼかし効果を実現できます

つまり、元の画像でぼかす領域ごとにf(x, y)、次の計算を実行します。

f'(x, y)= \frac{1}{9}\left[\begin{配列}{lll} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{配列}\right] \cdot \left[\begin{array}{lll} f(x-1, y-1) & f(x, y-1) & f(x+1, y-1) \\ f (x-1, y) & f(x, y) & f(x+1, y) \\ f(x-1, y+1) & f(x, y+1) & f(x+1 , y+1) \end{配列}\right]

最後に、ぼやけた効果である新しい画像が得られます.このプロセスは、2 次元画像の畳み込みと呼ばれます。

\frac{1}{9}\left[\begin{配列}{lll} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{配列}\right] この行列形式は、畳み込みカーネル (カーネル) と呼ばれます. 異なるタイプの畳み込みカーネルは、異なるフィルタリング プロセスに対応し、最終的な効果も異なります. ほとんどのフィルター効果はこれに基づいています.

PhotoShop は、実際にはカスタム カーネル マトリックスであるカスタム フィルターをサポートしています。

Floodlight のような少し高度なフィルター効果の場合、畳み込みカーネル (カーネル) は比較的複雑なことがよくあります.古典的なケースとして,ガウスぼかしは本質的に 2 次元の正規分布画像を畳み込むことです. このとき, 畳み込みカーネルとサイズもちろん、効果を確保しながらリアルタイムレンダリングのパフォーマンスを確保するために、追加の最適化方法とアルゴリズムが使用されることがよくあります。

しかし、畳み込み操作を行うことがフィルタリングと同等なのはなぜですか? おそらく、2 つを直接リンクすることはできません。

畳み込みカーネル (kernel) の拡張を考慮すると、たとえば、256x256 の画像に対して上記の単純なぼかし操作を実行したい場合、畳み込みカーネル (kernel) マトリックス\frac{1}{9}\left[\begin{配列}{lll} 1 & 1 & 1 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \end{配列}\right] 以外のすべての部分でゼロ フィリング操作を実行できます。補完された行列のサイズは元の画像と同じ 256x256 です. このとき, 畳み込み行列自体は別の時間領域画像で表すことができます. その画像は次のようになります: 中央の白い四角が想像できます、それは前のマトリックスの中心です 1 である部分

したがって、前の操作は基本的に 2 つの画像を畳み込むことであり、Games101 でも説明されています。

この PPT は、前の章で述べた畳み込みの性質を確認するだけでもあります。時間領域の畳み込みは周波数領域の積に変換でき、その逆も同様です。このプロパティは、画像の FT でも真でなければなりません。

さて、畳み込みとフィルタリングがうまく一致したことは明らかです。フィルタリングの効果を達成するためのドメインの一部

4.4 テクスチャのサンプリングとアンチエイリアシング

ぐるぐる回ってやっとGames101: Rasterization (depth testing and antialiasing)の第6章の話題に戻ってきました. これらの記事はこのビデオの完全な説明と言えます.非常によく説明しました。ここで詳細に説明する必要はありません。一般化としての簡単な例です

エイリアシングであろうとモアレであろうと、サンプリング ポイントの数が不十分であるか、連続画像を離散的にサンプリングする場合の間隔が大きすぎることが原因です. 直接的な原因は、画像内の高周波情報の損失/エイリアシングです。

非常に簡単な例を挙げると、00112233445566 は一連の数値です.2 つの数値ごとにサンプリングすると、結果は 0123456.2 つの形式は非常に似ているため、これは成功であると言えます.サンプリング/データ圧縮、しかし、デジタル文字列 01020305030201 の同じサンプリング方法では、完全に間違った結果 0000000 がサンプリングされ、回復できない情報損失が発生します。

関数イメージのサンプリングもまったく同じです。

青が実際の画像、黒が実際にサンプリング後に線形フィルタリングを行って私たちに見せた画像ですが、大きな歪み(モアレ発生の原理)、つまり周波数情報が高いほど歪んでいることが分かります。 、より高い周波数でサンプリングする必要があるほど

まあ、それはそれと同じくらい簡単です

コースウェアにも質問がありました。なぜ、アンチエイリアシングは、サンプリングしてからぼかすのではなく、最初にぼかしてからサンプリングする必要があるのですか?

回答: 画像をフィルタリングせずにサンプリングすると、失われた高周波情報は二度と戻ってきません。

4.4.1 周波数ドメインのエイリアシング現象

以上の内容も、前章の知識を使って数学の言葉で説明できますが、ここで、第 2 章の第 1 節に戻り、サンプリングに関する部分を説明します。

この写真は再びここにあります:

左の時間領域の図からわかるように:①サンプリングは連続インパルス関数による元の関数の積であり、それが何度も繰り返される性質です:②時間領域の畳み込みは次の積に変換できます。周波数領域,そしてその逆, 最後に、最初の章の最後に伏線を植えました. 3 、妖精の結論を得ることができます (PPT の右側):サンプリングは元の信号のスペクトルを繰り返すことであり、その計算された推論:サンプリング間隔が大きいほど、元の期間延長間隔は小さくなりますスペクトル上の信号、およびその逆も同様です

この時点で、エイリアシングという新しい概念が導入されます。

元のスペクトル画像がインパルス関数画像でない限り、畳み込み後のスペクトル上で元の信号の周期的な延長間隔が小さくなると、ある瞬間に必然的に重なり合うことが考えられます(サンプリング周波数は信号周波数の 2 倍未満)、これはエイリアシングと呼ばれ、エイリアシングが発生している限り、スペクトル画像から正確な時間領域画像を復元することはできません。

したがって、とにかく高周波情報を正常に復元することはできません. サンプリングの直前に高周波情報をフィルタリングする, つまり、画像をぼかして再サンプリングする方が良い. これは、の主なアイデアでもありますアンチエイリアシング

4.4.2 ナイキスト周波数

もちろん, ここにはまだ明確に説明されていない問題があります. エイリアシングとフィルタリングが発生すると, 最終結果は高周波情報の損失であるように思われます. では, なぜ事前にフィルタリングできるのにできないのでしょうか.最終信号のエイリアシングを無視しますか?

一文の説明:信号エイリアシングは、高周波信号損失の問題であるだけでなく、高周波信号が低周波信号の形で誤って表示される .これは、取り除かなければならず、許容できない病気の細胞のようなものです.開発する

この写真でも、サンプリング周波数が信号周波数の 2 倍よりも低い限り、元の高周波信号が低周波信号としてサンプリングされることがわかります。速度が速ければ速いほど、キャリッジ ホイールは移動しているように見えます。どんどん遅くなって、反対方向に走ったり、子供の頃の教室の天井の扇風機も、どんどん速度が速くなると、最初は時計回りに回転し、次に停止し、次に反時計回りに回転するという現象が発生します。時針は回転します、そうです、人間の目は実際には特定のサンプリング周波数を持っています

ナイキスト周波数(ナイキスト周波数)は、信号のエイリアシングを防ぐために定義する必要がある最小のサンプリング周波数です. 一般的に言えば、周波数は信号周波数の2倍です. しかし、コンピュータレンダリングの分野では、サンプリング密度を上げる頭脳はありません. (オーバーサンプリング、より高解像度の電子画面に変更するためのゲーム設定のサポート) はほとんどの場合非現実的であるため、問題を解決するために他の手段を使用することがよくあります。

ここではサンプリングについては詳しく説明しません. 興味のある友達は「信号とシステム」と「デジタル画像処理」を直接学ぶことができます. ここでは一般的な科学として言及します.

4.5 付録 1: ShadowMapping ソフト シャドウにおけるフィルタリング技術の適用

ルーチン操作, 別のアプリケーションについて話しましょう. その前に, 私は ESM シャドウに関する記事を公開しました: UnityShader17.1: ESM シャドウ技術は フィルタリングの概念と機能についても言及しました. もちろん, この部分についてはここで議論できます. コンテンツさらに紹介・解説

ソフト シャドウを実現するには、ローパス フィルタリングが不可欠な操作ですが、前の操作とは異なり、最終的なシャドウを計算するプロセスでは、実際には 2 つのフィルタリングの機会がありますf(d,z) 。 d は光源の深度、z はシャドウマップのサンプリング結果)、シャドウマップを直接フィルタリングします (つまり、z 値)。数学言語での説明は次のとおりです。

d この点から光源までの距離とし、Z P) 点 p でシャドウマップをサンプリングした結果を とすると、f(d,z(p)) 最終的な光の寄与になります (1 は完全に照らされ、0 は完全に影になります)。

滑らかさを実現するために、2 つの畳み込みフィルタリング方法を使用できます。

  1. 結果をフィルタリングします f'(d,z) = [w * f(d(x), z)](p)(PCFの主なアイデア)
  2. シャドウマップの事前フィルタリング: f'(d,z) = f(d(x),(w * z)(p))(ESM の主なアイデア)

パフォーマンスの観点から: 解決策①は、フラグメントのカラーリング中にシャドウマップの複数のサンプリングを回避することはできません.サンプリングのオーバーヘッドが小さくないことを知っておく必要があります.これはアルゴリズムの複雑さを考慮していません.したがって、解決策②の方が優れていることがよくあります.さらに、静的オブジェクトによってキャストされる影については、シャドウマップをオフラインで処理することもできます


ただし、 f(d, z) 最も基本的な形式の場合、画像によっては事前フィルタリング (事前フィルタリング) が常に可能であるとは限らないため、多くの場合、物事はそれほど単純ではありません。

f(d, z) =\left\{\begin{array}{l} 1, d<z \\ 0, d \geq z \end{array}\right.

それは不満足でなけれf(d(x),(w * z)(p))=[w * f(d(x), z)](p)ばならず、ステップ関数の結果は 0 または 1 のいずれかでなければならないため、z に対していくらフィルタリングしても、正しいぼかしの効果はありません。

では、どの場合に z をフィルタリングできますか?

ESM は古典的な例でf(d, z)=e^{-cd} e^{cz}、ステップ関数を指数乗算に置き換え、d > z の場合、画像構造があまり変わらないことも保証します。

\begin{aligned} s_f(x)=w * f(d(x), z) =w * (e^{-cd(x)} e^{cz}) =e^{-cd(x)} w * e^{cz} \end{aligned}上式を満たす

 さらに、前のステップ関数のフィッティングを達成するために、直接フーリエ展開の後に最初の k 項目を取得するなど、f(d, z) 本質的にうるさい Convolution Shadow Maps などの他のアルゴリズムがありますが、いずれにせよ、最終的な影の柔らかさは基本的にf(d, z)事前フィルタリングによって達成

 

おすすめ

転載: blog.csdn.net/Jaihk662/article/details/128018395