画像処理100本ノック!!
English is here >> https://github.com/KuKuXia/Image_Processing_100_Questions KuKuXia translates into English, so I appreciate his greate effort https://github.com/KuKuXia
画像処理の初学者のための問題100問が完成しましたぁぁぁぁぁ(´;ω;`)
これはイモリと一緒に画像処理の基本的処理の知識を身に着け、アルゴリズムを理解するための100本ノックです。ここに載っている問題はOpenCVでAPIが用意されているものが殆どですが、あえてそれを自分の手で実装してください。解答も載っけてますが、それはあくまで解答です。自分で考えながら実装して下さい。
- 問題の難易度の順番はめちゃくちゃです。なるべくポピュラーなものを採用していますが、ネタ切れであんまり聞かないものもあります笑
- 内容はいろいろな文献を調べて載っけてるので正しくないものもあるかもしれないので注意して下さい まちがいがあったらプルリクもらえるととても助かります!!
- 【注意】このページを利用して、または関して生じた事に関しては、私は一切責任を負いません。すべて自己責任でお願い致します。
ディープラーニングのノックはこっち >> https://github.com/yoyoyo-yo/DeepLearningMugenKnock
Recent
- 2019.3.7 TutorialにC++用を加えた そろそろC++用の答えもつくろっかなーと
- 2019.3.5 各Questionの答えをanswersディレクトリに収納
- 2019.3.3 Q.18-22. 一部修正
- 2019.2.26 Q.10. メディアンフィルタの解答を一部修正
- 2019.2.25 Q.9. ガウシアンフィルタの解答を一部修正
- 2019.2.23 Q.6. 減色処理のREADMEを修正
- 2019.1.29 HSVを修正
環境設定
Python-3.6でやって下さい。(解答はPython-3.6で用意してます)
1. Minicondaのインストール
https://conda.io/miniconda.html のサイトからMinicondaをインストールします。これはWindowでもMacOSでも可能です。Minicondaがインストールできたら、端末(Windowでは端末、MacOSではターミナル)を開き、以下コマンドで仮想環境を作成します。
$ conda create python=3.6 -n gasyori100
作成できたら、以下コマンドで仮想環境を動作します。
$ source activate gasyori100
するとこうなります。
(gasyori100) :~/work_space/Gasyori100knock/ :$
2. gitのインストール
gitをインストールします。そして、端末を開いて、以下のコマンドを実行します。このコマンドでこのディレクトリを丸ごと自分のパソコンにコピーできます。
$ git clone https://github.com/yoyoyo-yo/Gasyori100knock.git
3. パッケージのインストール
以下のコマンドで必要なパッケージをインストールします。
$ pip install -r requirement.txt
4. 画像処理チュートリアル
以下のファイルを作成し sample.py という名前で保存し、実行します。
import cv2
img = cv2.imread("assets/imori.jpg")
cv2.imshow("imori", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
$ python sample.py
これで以下の画像が表示されれば成功です! 何かボタンを押せば消えます。
もし上記の設定ができなかったという人はこちらが参考になると思います。 https://qiita.com/karaage0703/items/e0b57b63dbebed908b2f
次に画像処理に関するnumpyの扱い方のためにTutorialフォルダを見てみて下さい。(もう知ってるという人はスキップして下さい。)
あとは問題を解いていってください。それぞれのフォルダに問題内容が入っています。問題では assets/imori.jpg を使用して下さい。各フォルダのREADME.mdに問題、解答プログラムがあります。python answers/answer_@@.py
とすると解答が出ます。
C++用OpenCVのインストール
C++用のopencvのインストール方法 >> https://github.com/yoyoyo-yo/Gasyori100knock/tree/master/Tutorial/README_opencv_c_install.md
問題
詳細な問題内容は各ディレクトリのREADMEにあります。(ディレクトリで下にスクロールすればあります)
- 解答は簡易化のため、main()などは使用しません。
- numpy中心ですが、numpyの基本知識は自分で調べて下さい。
チュートリアル
内容 | 内容 | |||
---|---|---|---|---|
1 | 画像読み込み・表示 | 6 | C++でのOpenCVの使い方 | |
2 | 画素をいじる | |||
3 | 画像のコピー | |||
4 | 画像の保存 | |||
5 | 練習問題 |
問題1 - 10
番号 | 問題 | 番号 | 問題 | |
---|---|---|---|---|
1 | チャネル入れ替え | 6 | 減色処理 | |
2 | グレースケール化 | 7 | 平均プーリング | |
3 | 二値化 | 8 | Maxプーリング | |
4 | 大津の二値化 | 9 | ガウシアンフィルタ | |
5 | HSV変換 | 10 | メディアンフィルタ |
問題11 - 20
番号 | 問題 | 番号 | 問題 | |
---|---|---|---|---|
11 | 平滑化フィルタ | 16 | Prewittフィルタ | |
12 | モーションフィルタ | 17 | Laplacianフィルタ | |
13 | MAX-MINフィルタ | 18 | Embossフィルタ | |
14 | 微分フィルタ | 19 | LoGフィルタ | |
15 | Sobelフィルタ | 20 | ヒストグラム表示 |
問題21 - 30
番号 | 問題 | 番号 | 問題 | |
---|---|---|---|---|
21 | ヒストグラム正規化 | 26 | Bi-linear補間 | |
22 | ヒストグラム操作 | 27 | Bi-cubic補間 | |
23 | ヒストグラム平坦化 | 28 | アフィン変換(平行移動) | |
24 | ガンマ補正 | 29 | アフィン変換(拡大縮小) | |
25 | 最近傍補間 | 30 | アフィン変換(回転) |
問題31 - 40
番号 | 問題 | 番号 | 問題 | |
---|---|---|---|---|
31 | アフィン変換(スキュー) | 36 | JPEG圧縮 (Step.1)離散コサイン変換 | |
32 | フーリエ変換 | 37 | PSNR | |
33 | フーリエ変換 ローパスフィルタ | 38 | JPEG圧縮 (Step.2)DCT+量子化 | |
34 | フーリエ変換 ハイパスフィルタ | 39 | JPEG圧縮 (Step.3)YCbCr表色系 | |
35 | フーリエ変換 バンドパスフィルタ | 40 | JPEG圧縮 (Step.4)YCbCr+DCT+量子化 |
問題41 - 50
番号 | 問題 | 番号 | 問題 | |
---|---|---|---|---|
41 | Cannyエッジ検出 (Step.1) エッジ強度 | 46 | Hough変換・直線検出 (Step.3) Hough逆変換 | |
42 | Cannyエッジ検出 (Step.2) 細線化 | 47 | モルフォロジー処理(膨張) | |
43 | Cannyエッジ検出 (Step.3) ヒステリシス閾処理 | 48 | モルフォロジー処理(収縮) | |
44 | Hough変換・直線検出 (Step.1) Hough変換 | 49 | オープニング処理 | |
45 | Hough変換・直線検出 (Step.2) NMS | 50 | クロージング処理 |
問題51 - 60
番号 | 問題 | 番号 | 問題 | |
---|---|---|---|---|
51 | モルフォロジー勾配 | 56 | テンプレートマッチング NCC | |
52 | トップハット変換 | 57 | テンプレートマッチング ZNCC | |
53 | ブラックハット変換 | 58 | ラベリング 4近傍 | |
54 | テンプレートマッチング SSD | 59 | ラベリング 8近傍 | |
55 | テンプレートマッチング SAD | 60 | アルファブレンド |
問題61 - 70
番号 | 問題 | 番号 | 問題 | |
---|---|---|---|---|
61 | 4-連結数 | 66 | HOG (Step.1) 勾配強度・勾配角度 | |
62 | 8-連結数 | 67 | HOG (Step.2) 勾配ヒストグラム | |
63 | 細線化 | 68 | HOG (Step.3) ヒストグラム正規化 | |
64未 | ヒルディッチの細線化 | 69 | HOG (Step.4) 特徴量の描画 | |
65 | Zhang-Suenの細線化 | 70 | カラートラッキング |
問題71 - 80
番号 | 問題 | 番号 | 問題 | |
---|---|---|---|---|
71 | マスキング | 76 | 顕著性マップ | |
72 | マスキング(カラートラッキングとモルフォロジー) | 77 | ガボールフィルタ | |
73 | 縮小と拡大 | 78 | ガボールフィルタの回転 | |
74 | ピラミッド差分による高周波成分の抽出 | 79 | ガボールフィルタによるエッジ抽出 | |
75 | ガウシアンピラミッド | 80 | ガボールフィルタによる特徴抽出 |
問題81 - 90
問題91 - 100
TODO
adaptivebinalizatino, poison image blending
Citation
@article{yoyoyo-yoGasyori100knock,
Author = {yoyoyo-yo},
Title = {Gasyori100knock},
Journal = {https://github.com/yoyoyo-yo/Gasyori100knock},
Year = {2019}
}