OpenCVのチュートリアルをやる -その3 -

#前書き
OpenCVの開発環境は作ったので、実際になにか動かしてみます。
今回はOpenCV-Pythonのチュートリアル、[OpenCV-Python Tutorials](https://opencv-python-tutroals.readthedocs.io/en/latest/)の**[日本語版](http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/index.html)**をやっていきます。
多少アレンジすると思う。

OpenCVを使った画像処理、特徴量検出と特徴量記述、機械学習、Computational Photographyこのあたりをやっていきたいのですけど、時間がないのでちゃちゃっとまとめて次の記事で必要なところをピックアップしてやっていくことにします。

# シリーズ
* [pythonでOpenCV使うための環境づくり](https://qiita.com/Ryo87/items/939b370c06c60c9d63c8)
* [OpenCVのチュートリアルをやる](https://qiita.com/Ryo87/items/c20be948d261f1be2f22)
* [OpenCVのチュートリアルをやる -その2 変換系-](https://qiita.com/Ryo87/items/6f367bf1eb69c4f3c80e)
* [OpenCVのチュートリアルをやる -その3 -](https://qiita.com/Ryo87/items/0ffc633fb918cb704566)

#開発環境
機種名 : MacBook Pro
OS : Mojave 10.14.2
プロセッサ名 : Intel Core i5 2.6 GHz
メモリ : 16 GB
グラフィック : Intel Iris 1536MB

## python系
```
% pip freeze
numpy==1.15.4
opencv-python==4.0.0.21
```

## 画像データ
神奈川大学から画像データをお借りしてやります。
[神奈川工科大学 情報学部 情報工学科 信号処理応用研究室](http://www.ess.ic.kanagawa-it.ac.jp/app_images_j.html#image)

#本題
あとで辞書的に使うために、C,R,SR,SSR,LRくらいに用途を分けておく。
(個人的感想なので、深く追求しないでください(^p^))

* C:コモン 多分たくさん使う、通常技位の感覚
* R:レア 強攻撃くらい
* SR:スーパーレア 使い勝手のいい必殺技
* SSR:スペシャルスーパーレア 大抵のものに使える決め技
* LR:レジェンドレア 発動に手間が掛かるが、それなりの結果が得られる必殺技

## OpenCVを使った画像処理
### 画像のしきい値処理:C
しきい値:基準となる値

しきい値処理では、しきい値を境界として別の値を割り当てる。
写真で撮った紙の文字をはっきりさせるためにしきい値処理を施して、黒と白の2値化させるようなこと。
例えば、[128]というしきい値を基準にそれ以上が白、それ未満が黒のように。

OpenCVの`threshold `メソッドを使うと2値化や、グラデーションで変化させたりができる。

この項で「大津の二値化」というものが出ているが、この「大津」は[大津　展之教授](https://home.hiroshima-u.ac.jp/tkurita/spr/member/otsu.html)のことを指している。

### 画像の平滑化:R
【平滑】でこぼこがないこと。なめらか。
ノイズを取り除いたり、画像をぼかしたりする処理のこと。

### モルフォロジー変換:SSR
> 【モルフォロジー】形態学（けいたいがく、morphology）とは、最初は生物学における形態学（Morphologie, ゲーテの造語）の意味で用いられたが、現在は様々な分野で用いられる。

モルフォロジー変換は、もともと鉱石の解析に使われていた手法？

膨張収縮を使用して、ノイズ除去や、輪郭抽出ができる。

### 画像の勾配:SR
画像の勾配・エッジ検出をする手法。
* Sobel:ソーベル
* Scharr:シャール 
* Laplacian:ラプラシアン 

参考:[【画像処理】ソーベルフィルタの原理・特徴・計算式](https://algorithm.joho.info/image-processing/sobel-filter/)

### Canny法によるエッジ検出:SR
これもエッジ検出、、、、違いがわからん。

### 画像ピラミッド:R
画像に画像を重ねる方法。
多分、クソコラとかに使われる技法なのだろう、、、、

### OpenCVにおける輪郭(領域):C
ここ、細項目がこの下にあるので多分深い、、、。

### OpenCVでのヒストグラム:C
ここ、細項目がこの下にあるので多分深い、、、。

### OpenCVの基底を使った画像の変換:LR
[フーリエ変換:wiki](https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B)についてが書かれている。

フーリエ変換は、複雑な波形を単純な波形に分割して、それぞれSin波の振幅を角周波数ごとに分ける処理。
[参考:【画像45枚あり】フーリエ変換を宇宙一わかりやすく解説してみる](https://www.yukisako.xyz/entry/fourier-transform)

画像の中に含まれる、周波数の分布を出すことができる。
周波数の分布から、画像の特徴を引っ張り出せる？？

### テンプレートマッチング:SR
画像の中に、特定の画像が含まれていることを検出する。

### ハフ変換による直線検出:R
ハフ:[ポール ハフ:wiki](https://en.wikipedia.org/wiki/Paul_Hough)

画像の中に含まれる、直線を検出する。

### ハフ変換による円検出:R
画像の中に含まれる円形を検出する。

### Watershedアルゴリズムを使った画像の領域分割:SSR
watershed:分水界

2値化して、画像の切り分けをして対象物体選び出す。

### GrabCutを使った対話的前景領域抽出:LR
ユーザー入力によって画像処理を手助けする。
アプリケーションを作るときに、このような機能があればたしかに便利。

## 特徴量検出と特徴量記述
### 特徴の理解:C
平坦、水平/垂直、角といった特徴の中で、[角]の特徴が重要。

### Harrisコーナー検出:R
[角]の特徴量を検出する方法

### Shi-Tomasiのコーナー検出とGood Features to Track(追跡に向いた特徴):SR
[角]の特徴量を検出する方法
この方法は物体の追跡に向いた特徴を検出する

### SIFT (Scale-Invariant Feature Transform)の導入:SR
拡大縮小した場合に角が検出できなくなってしまう。
そのような場合に使える検出手法。
※SIFTは特許申請されています．

### SURF (Speeded-Up Robust Features)の導入:SR
SIFTの処理速度が遅いので、高速版
※SURFは特許申請されています．

### コーナー検出のためのFASTアルゴリズム:SR
まだまだ速度が足りないから、もっと速度を上げたバージョン

### BRIEF (Binary Robust Independent Elementary Features):SR
省メモリかつ高速版

### ORB (Oriented FAST and Rotated BRIEF):SSR
SIFTとSURFは優秀だが、特許申請されているため、使うためにお金がかかる。
OpenCVはORBというフリーの特徴量記述子を提供しています．

### 特徴点のマッチング:R
総当たりマッチング手法。

### 特徴点のマッチングとHomographyによる物体検出
>マッチングの際に，結果に影響を及ぼす可能性がある潜在的なエラーが起こりうることを学んできました．この問題を解決するために，RANSACもしくはLEAST_MEDIANと呼ばれるアルゴリズムを(フラグによって指定して)使います．

## 機械学習
### k近傍法:R
分類アルゴリズムの一つ

### サポートベクターマシン(SVM: Support Vector Machines):R
直線を使って分割する、分類する。

### K-Meansクラスタリング:R
特定のグループの重心を作って分類していく

## Computational Photography(ノイズ除去)
### 画像のノイズ除去:C
ノイズ除去の方法

### 画像のInpainting:R
画像の修復をする方法？
ひっかき傷や折れ目の入った写真を復元する

#感想
たくさん手法があって、どこから手を出していいかますますわからなくなった。。。。