【入門】アフィン変換まだら模様対策【数値計算】

【入門】アフィン変換まだら模様対策【数値計算】 数値計算
【入門】アフィン変換まだら模様対策【数値計算】

MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/

はじめに

の、

MATLAB,Python,Scilab,Julia比較 第3章 その67【アフィン変換⑪】
MATLAB,Python,Scilab,Julia比較 第3章 その68【アフィン変換⑫】

を書き直したもの。

アフィン変換の続き。
以前言った、まだら模様問題の対策について。
まだら模様問題の対策としてシンプルな手法について。

まだら模様問題

以前言ったが、変換後にまだら模様になる問題が残っている。

アフィン変換でまだら模様

これについて対策をする必要がある。

まだら模様が発生する原因

対策の前に原因。
原因が分からければ対策もできない。

原因は、
座標変換元より座標変換先の空間の方が広いため。

画像で説明すると以下になる。
縦横を2倍に伸長する場合を例としている。

アフィン変換まだら模様の原因、変換元、変換先、変換先として算出されてない部分が白色の部分で、マダラ模様の原因

赤のところは変換元のピクセルからコピーされてるけど、白い部分へコピーするのがない。

これは、扱ってるデータが標本化されているから起きる事象。
アナログ的なものであれば、微小な座標変化を大きな座標変化にすればよい。

まだら模様問題の対策

原因がわかったところで対策の話になる。
一般的には以下の補間アルゴリズムを適用する。

  • 最近傍補間(近傍のピクセルをコピー)
  • バイリニア補間(線形補間の平面版)
  • バイキュービック補間(周囲16点を3次式で同定して、その式を元に補間)

全体的結構めんどくさい。
よって、ここではもうちょいシンプルな手法を使うことにする。

まだら模様対策のシンプルなやつ

シンプルは手法を画像で示すとこんな感じになる。

アフィン変換まだら模様対策、変換元、変換先

矢印の方向が、
変換元から変換先
じゃなくて、
変換先から変換元
になってる。

変換元から変換先にコピーするとピクセルが足りなくなるから、
だったら、変換先の全ピクセル位置から変換元を参照する方式にすれば、
ピクセルが足りないという事象は起きない。

これだったら全ピクセルが埋まるから、まだら模様が発生しない。

で、具体的にはどうするのか?

具体的にはどうすれば良いだろうか?
変換元から変換先にコピーするのがアフィン変換で、
それを逆向きにするのってできるのか?

いわゆるアフィン逆変換を用いることで可能になる。

アフィン逆変換

まず、アフィン変換の数式を再掲しよう。

\(
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}=
\begin{bmatrix}
a & b & T_x\\
c & d & T_y\\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}
\)

これを逆変換するということは、
以下のようなことをすればOK。

\(
\begin{eqnarray}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}&=&
\begin{bmatrix}
a & b & T_x\\
c & d & T_y\\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}\\
\begin{bmatrix}
a & b & T_x\\
c & d & T_y\\
0 & 0 & 1
\end{bmatrix}^{-1}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}&=&
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}\\
\begin{bmatrix}
x\\
y\\
1
\end{bmatrix}&=&
\begin{bmatrix}
a & b & T_x\\
c & d & T_y\\
0 & 0 & 1
\end{bmatrix}^{-1}
\begin{bmatrix}
x\prime\\
y\prime\\
1
\end{bmatrix}\\
\end{eqnarray}
\)

つまり、逆行列を使えばOK。

まとめ

  • アフィン変換後にまだら模様になる問題がある。
  • まだら模様対策のシンプルなやつを確認。
    • アフィン逆変換を使う。
  • アフィン逆変換は、アフィン変換の式を変形しただけ。
    • アフィン行列が逆行列になる。

MATLAB、Python、Scilab、Julia比較ページはこちら

コメント

タイトルとURLをコピーしました