情報工学系の大学二年で学ぶ画像処理演習

大学で画像処理の演習があり、それについての概要をまとめるために本記事を作成しました。（画像処理の概要に絞るため数学的な話や具体的なコードについては省略）

## 基本概念
モノクロ画像は二次元配列、カラー画像は三次元配列（三次元方向にRGBの色情報を格納）している
配列のサイズ例
モノクロ画像　486×640
カラー画像　486×640×3(RGB)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/d7ba094d-1e45-2eba-cb05-62fd7e800b2f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/9a9fbe80-870c-5980-875e-03f1497abe03.png)


色は0から255のRGBで256^3個によって白から黒まで表される。

配列に格納することで、好きな部分を切り取ったり、しきい値を設定してそれの前後で処理するといったことが可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/86a74ef6-7cbe-8c34-de12-e45116aac881.png)

## この授業で学んだこと（全体像）
この授業で学んだことをまとめると、以下のようになります。
### 画像処理の基礎
**画像のデジタル表現**: 画像は、数値の集まりとしてコンピュータ上で表現される。
**画素**: 画像の最小単位。各画素には、色情報などが割り当てられる。
**画像の演算**: 画像に対して様々な演算を行うことで、画像の加工や特徴抽出が可能。
### フーリエ変換
**周波数領域への変換**: 画像を構成する周波数成分を分析するために用いられる。
**フィルタリング**: 周波数成分を調整することで、ノイズ除去やエッジ強調などの処理を行う。
**特徴抽出**: 画像の特徴的な周波数成分を抽出することで、画像認識などに利用できる。
### ウェーブレット変換
**多解像度解析**: 画像を異なる解像度で表現することで、局所的な特徴を抽出する。
**ノイズ除去**: ノイズ成分を特定し、除去することで画像の品質を向上させる。
**画像圧縮**: 冗長な情報を削減し、画像データを圧縮する。


以下は各テーマごとの概念の詳細になります。

## 二次元フーリエ変換とフーリエ領域でのフィルタリング
ディジタル信号を周波数領域へ変換するために **離散フーリエ変換（DFT）** がよく用いられる。

MATLABではfft2という２次元信号に対してDFTを高速に行う関数が利用できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/029c8b5a-56fd-e0c8-d219-3f9aec3a8bfa.png)
上の画像をインプットとする。
フーリエ変換は線形の操作なので行列で変換が表現でき、低周波数成分だけを通すフィルタ（低域通過フィルタ）を適用数して、画像を復元（逆フーリエ変換）すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/a830db0b-c5e3-0c68-f69c-220ce2d20613.png)

このように高周波数の部分（色が強い部分）がなくなり、画像がなめらかになっている（ぼやけている）ことがわかる。

こういったフーリエ領域でのフィルタリングは信号の **線形近似** と呼ばれ、保持するインデックスを事前に（低周波数成分などに）固定し、その係数だけからなる信号を再構成することでフィルタリングを行う手法。

それに対し、DFTやDCT(離散コサイン変換)の係数の振幅の大きさは信号に含まれる周波数成分がどの程度原信号に寄与しているかを表しているため、変換係数を振幅の大きい順に残し、再構成することで、より良い信号の近似が得られる。これを **非線形近似** とよぶ。
実際、画像圧縮などの応用においては非線形近似が利用されることが多い。
以下では線形近似と非線形近似によってフィルタリングしたものを比べる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/3df6298c-42a3-ca63-e226-250e88ec68f2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/4acd6c02-2219-e3b2-12ae-5a50c8ba4428.png)

たしかに、非線形近似で得た画像の方が画質の良いことがわかる。（視覚的にわかるのに加え、PSNRが高い）

離散フーリエ変換や離散コサイン変換は信号を、周波数を基準として分解する手法だが、どの周波数の成分がどの（時間的・空間的）位置に存在するかはわからない

## ウェーブレット変換
そこで、ウェーブレット変換というものがある。
haarウェーブレット変換（HWT）を使用する。
HWTにおける概念としてレベルとスケールという概念がある。
### レベル
低周波数成分から高周波数成分への順序: レベルは、ウェーブレット変換を繰り返す回数に相当する。レベルが上がるにつれて、より細かい部分、つまり高周波数成分が抽出される。
画像の粗い部分から細かい部分への対応: レベル1は画像全体の粗い特徴を捉え、レベル2ではさらに細かい特徴を、というように、レベルが上がるにつれて、画像のより細かい部分に対応する。
### スケール
高周波数成分から低周波数成分への順序: スケールは、ウェーブレット基底関数のサイズを表す。スケールが大きくなるにつれて、より広範囲の特徴、つまり低周波数成分が抽出される。
画像の細かい部分から粗い部分への対応: スケール1は画像の細かい特徴を捉え、スケール2ではより広い範囲の特徴を、というように、スケールが上がるにつれて、画像のより粗い部分に対応する。
まとめると
レベルは、変換を繰り返す回数で、高周波数成分から抽出。
スケールは、基底関数のサイズで、低周波数成分から抽出。

WHTでは指定スケール（しきい値）（カットオフスケールと呼ぶ）より大きいスケールの係数を0とし（つまり、高周波数成分を取り除き）、逆HWTを行うことでHWTによる線形近似画像が得られる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/d0229aa6-88e1-c922-6d09-fea3b3017781.png)
このように、カットオフスケールより大きい係数を0にしたものを使用して以下の再構成画像（HWT線形近似画像）を得る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/4e257411-0170-bbc4-a548-8f3184e5dd5e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/fedf6435-7347-93e3-839b-0194090749fd.png)
線形近似とは異なり、ウェーブレット係数を絶対値の大きい順に残すことで非線形ウェーブレット近似が得られる。
非線形ウェーブレット近似によって得た復元画像の画質の方が線形ウェーブレット近似のものよりよいことが確認できる（psnrが大きい）。

## ノイズ除去
以下ではノイズ除去について述べる
ノイズ除去には、
**空間領域** での線形フィルタを適応する線形ガウシアンフィルタによるものと、
**周波数領域** でのノイズ除去をするウェーブレットしきい値処理によるものがあり、その中にも**ハードしきい値処理** と**ソフトしきい値処理** がある。
ハードしきい値処理はしきい値を境に係数を0かそのままにする、デジタルな処理なのに対して、ソフトしきい値処理は、しきい値を境に係数を連続的に変化させる、アナログ的な処理である。
一般的に、ソフトしきい値処理の方が自然な画像を得られる一方、計算量が増えるというデメリットがある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/aa254a45-b78f-e311-13b3-cc18929dc81d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3921190/8e64613e-2b35-07a8-ca98-715709ab8fbd.png)
ノイズ時除去をハードしきい値処理とソフトしきい値処理によっておこなったものを比較すると、たしかにソフトしきい値処理によるノイズ除去のほうが画質のよいことがわかる。

## まとめ
おもにグレースケールの画像に対する画像処理（フィルタや線形近似、ノイズ除去など）の演習をおこないました。

実際の画像に表示することで画像の色を周波数、画像のサイズを行列で扱うことの概念の直感的な理解はできましたが、数学的な部分の理解はまだまだだと感じました。

今後の信号処理の授業や解析学を学ぶひとつのモチベーションにしたいと思います。