夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

行列を理解する その② 行列の回転 回転行列

本日は昨日に引き続きCGを理解するにあたって重要な概念である行列についての勉強です。

コンピュータ内では多くのデータをテンソルであらわします。

テンソルとは、多次元配列を意味し、例えば画像データを見てみると、RGBAの四次元であらわされる色チャンネルの集まり(ピクセル)が縦横の配列に並んで一つの画像が構成されています。

このように多次元の配列をテンソルと呼びます。

テンソルの中で0次元配列をスカラー、1次元配列をベクトル、2次元配列を行列と呼びます。

redhologerbera.hatenablog.com

〇行列の回転

今回は行列の回転についてみていきます。

前回の例を引き続き使用し、画像の回転の例を見ていきます。

ある画像データAを回転させる場合は回転行列を使用して求めることができます。

まずは簡単な例としてAを次のように定義します。

 \displaystyle
A = 
\begin{pmatrix}
\ a & b \\
\ c & d\\
\end{pmatrix}  \

回転行列は次のようになります。

 \displaystyle
R(\theta) = 
\begin{pmatrix}
\cos(\theta) & -\sin(\theta)  \\
\sin(\theta) & \cos(\theta) \\
\end{pmatrix}  \

回転行列に関しては過去の記事を参考にしてください。

redhologerbera.hatenablog.com

これを用いて回転した画像データA'を求めるには次のように計算できます。

 \displaystyle
 A' = R(\theta) × A
 \

行列の乗算を行います。

 \displaystyle
 A' = \begin{pmatrix}
\cos(\theta) & -\sin(\theta)  \\
\sin(\theta) & \cos(\theta) \\
\end{pmatrix} × \begin{pmatrix}
a & b \\
c & d \\
\end{pmatrix} \\
= \begin{pmatrix}\
cos(\theta) ・ a - sin(\theta) ・ c  &  cos(\theta) ・ b - sin(\theta) ・ d   \\
sin(\theta) ・ a - cos(\theta) ・ c  &  sin(\theta) ・ b - cos(\theta) ・ d   \\
\end{pmatrix}
 \

これが回転した画像のデータになります。

では、90°画像を回転した例を見てみます。

これによって三角関数部は次のようになります。

 \displaystyle
sin(90°) = 1\\
cos(90°) = 0\\
 \

よって先ほどの式に代入すると次のようになります。

 \displaystyle
 A' = \begin{pmatrix}
\cos(\theta) & -\sin(\theta)  \\
\sin(\theta) & \cos(\theta) \\
\end{pmatrix} × \begin{pmatrix}
a & b \\
c & d \\
\end{pmatrix} \\
= \begin{pmatrix}\
0 ・ a -  1 ・ c  &   0 ・ b - 1 ・ d   \\
1 ・ a - 0 ・ c  &  1 ・ b - 0 ・ d   \\
\end{pmatrix}\\
=\begin{pmatrix}
-c & -d \\
a & b \\
\end{pmatrix} \\
 \

これが90度回転した画像データの行列になります。

本日は以上です。