画像処理 100 本ノックを全問 Jupyter Notebook で解きましたので公開しています。リポジトリ内は最低限のものが入るよう、主に以下を入れています。
- 本家 Markdown ファイル (テキストの役目)
solutions_py
フォルダ (今回作成した解答です)- 各種 data (問題を解く際に load します)
以下のものは含まれていません。
- 本家解答 (紛らわしいため)
- 各種 Markdown ファイルにある、ファイルへのリンクは動かないです。ご了承ください
- その他不要と判断したもの。リポジトリに予め入っていた実行ファイルなど
Jupyter Notebook で解答したファイルは MIT LICENSE で公開しています。私が作成したのはあくまで Jupyter Notebook による解答のみであり、その他の著作物は全て yoyoyo-yo 氏によるものです。
これ以下は本家リポジトリの README です。(最新版は https://github.com/yoyoyo-yo/Gasyori100knock を参照)
追記 2019.11.7
Study-AI株式会社様 http://kentei.ai/ のAI実装検定のシラバスに使用していただくことになりました!(ディープラーニング無限ノックも) Study-AI株式会社様ではAIスキルを学ぶためのコンテンツを作成されており、AIを学ぶ上でとても参考になります! 検定も実施されてるので、興味ある方はぜひ受けることをお勧めします!
English is here (by KuKuXia)
Chinese is here (by gzr2017, my ex-colleague)
自分の画像で画像処理をためすPoC
ディープラーニングのノックはこっち
画像処理の初学者のための問題100問ですうう(´;ω;`)
これはイモリと一緒に画像処理の基本的処理の知識を身に着け、アルゴリズムを理解するための100本ノックです。ここに載っている問題はOpenCVでAPIが用意されているものが殆どですが、あえてそれを自分の手で実装してください。解答も載っけてますが、それはあくまで解答です。自分で考えながら実装して下さい。
- 問題の難易度の順番はめちゃくちゃです。なるべくポピュラーなものを採用していますが、ネタ切れであんまり聞かないものもあります笑
- 内容はいろいろな文献を調べて載っけてるので正しくないものもあるかもしれないので注意して下さい まちがいがあったらプルリクもらえるととても助かります!!
- 【注意】このページを利用して、または関して生じた事に関しては、私は一切責任を負いません。すべて自己責任でお願い致します。
PythonとC++の好きな方でやってみてね♡(最近Javascriptも追加してるよ)
2019.5.14. これ金にならんかなぁ…
意見や使用実績などあればご一報ください!
もしこれがみなさんのお役に立ったらGithub Sponsorになってください!
Twitterで更新を発信してますぅ
https://twitter.com/curry_frog
- 2019.12.16 自分の持ってる画像で画像処理をためすPoCを追加 IMORI
- 2019.11.22 [C++] Q.49~50 モルフォロジー処理(オープンイング、クロージング)を追加
- 2019.11.21 [C++] Q.48 モルフォロジー処理(収縮)を追加
- 2019.11.20 [C++] Q.47 モルフォロジー処理(膨張)を追加
- 2019.10.27 [C++] Q.44~46 Hough直線検出を追加、[Python]の解答を修正
- 2019.10.22 [C++] Q.41~43 Cannyのエッジ検出を追加, [Python] の解答を修正
- 2019.9.3 [Python] Q.81~100のAnswerコードをメソッド化
- 2019.9.2 [Python] Q.61~80のAnswerコードをメソッド化
- 2019.8.28 [Python] Q.51~60のAnswerコードをメソッド化
- 2019.8.18 [Python] Q.50までのAnswerコードをメソッド化
- 2019.8.12 [C++]Q.36-40の解答追加
- 2019.7.32 [C++]Q.32-35の解答追加
- 2019.7.23 [C++]Q.30-31の解答追加
- 2019.7.22 [C++]Q.25-29の解答追加
- 2019.6.30 Q.21-24のC++の解答追加
- 2019.6.8 JavaScriptのチュートリアルを追加
- 2019 Q.11-20 C++ を追加 Q.15 Sobelを修正
- 2019.3.25 Q.31 フーリエ系 Q.36 DCT, Q.47,48 トップハット変換系を修正
- 2019.3.13 Q95-100 Neural Networkを修正
- 2019.3.8 Questions_01_10 にC++の解答を追加!
- 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を修正
gitをインストールします。そして、端末を開いて、このコマンドを実行します。このコマンドでこのディレクトリを丸ごと自分のパソコンにコピーできます。
$ git clone https://github.com/yoyoyo-yo/Gasyori100knock.git
そしたら、PythonかC++のやりたい方を選んで「チュートリアル」に進みましょう!
内容 | Python | C++ | JavaScript | |
---|---|---|---|---|
1 | インストール | ✓ | ✓ | ✓ |
2 | 画像読み込み・表示 | ✓ | ✓ | ✓ |
3 | 画素をいじる | ✓ | ✓ | ✓ |
4 | 画像のコピー | ✓ | ✓ | ✓ |
5 | 画像の保存 | ✓ | ✓ | ー |
6 | 練習問題 | ✓ | ✓ | ✓ |
あとは問題を解いていってください。それぞれのフォルダに問題内容が入っています。問題では assets/imori.jpg を使用して下さい。各フォルダのREADME.mdに問題、解答プログラムがあります。python answers/answer_@@.py
とすると解答が出ます。
詳細な問題内容は各ディレクトリのREADMEにあります。(ディレクトリで下にスクロールすればあります)
- numpy中心ですが、numpyの基本知識は自分で調べて下さい。
番号 | 問題 | Python | C++ | 番号 | 問題 | Python | C++ | |
---|---|---|---|---|---|---|---|---|
1 | チャネル入れ替え | ✓ | ✓ | 6 | 減色処理 | ✓ | ✓ | |
2 | グレースケール化 | ✓ | ✓ | 7 | 平均プーリング | ✓ | ✓ | |
3 | 二値化 | ✓ | ✓ | 8 | Maxプーリング | ✓ | ✓ | |
4 | 大津の二値化 | ✓ | ✓ | 9 | ガウシアンフィルタ | ✓ | ✓ | |
5 | HSV変換 | ✓ | ✓ | 10 | メディアンフィルタ | ✓ | ✓ |
番号 | 問題 | Python | C++ | 番号 | 問題 | Python | C++ | |
---|---|---|---|---|---|---|---|---|
11 | 平滑化フィルタ | ✓ | ✓ | 16 | Prewittフィルタ | ✓ | ✓ | |
12 | モーションフィルタ | ✓ | ✓ | 17 | Laplacianフィルタ | ✓ | ✓ | |
13 | MAX-MINフィルタ | ✓ | ✓ | 18 | Embossフィルタ | ✓ | ✓ | |
14 | 微分フィルタ | ✓ | ✓ | 19 | LoGフィルタ | ✓ | ✓ | |
15 | Sobelフィルタ | ✓ | ✓ | 20 | ヒストグラム表示 | ✓ |
番号 | 問題 | Python | C++ | 番号 | 問題 | Python | C++ | |
---|---|---|---|---|---|---|---|---|
21 | ヒストグラム正規化 | ✓ | ✓ | 26 | Bi-linear補間 | ✓ | ✓ | |
22 | ヒストグラム操作 | ✓ | ✓ | 27 | Bi-cubic補間 | ✓ | ✓ | |
23 | ヒストグラム平坦化 | ✓ | ✓ | 28 | アフィン変換(平行移動) | ✓ | ✓ | |
24 | ガンマ補正 | ✓ | ✓ | 29 | アフィン変換(拡大縮小) | ✓ | ✓ | |
25 | 最近傍補間 | ✓ | ✓ | 30 | アフィン変換(回転) | ✓ | ✓ |
番号 | 問題 | Python | C++ | 番号 | 問題 | Python | C++ | |
---|---|---|---|---|---|---|---|---|
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+量子化 | ✓ | ✓ |
番号 | 問題 | Python | C++ | 番号 | 問題 | Python | C++ | |
---|---|---|---|---|---|---|---|---|
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 | クロージング処理 | ✓ | ✓ |
番号 | 問題 | Python | C++ | 番号 | 問題 | Python | C++ | |
---|---|---|---|---|---|---|---|---|
51 | モルフォロジー勾配 | ✓ | 56 | テンプレートマッチング NCC | ✓ | |||
52 | トップハット変換 | ✓ | 57 | テンプレートマッチング ZNCC | ✓ | |||
53 | ブラックハット変換 | ✓ | 58 | ラベリング 4近傍 | ✓ | |||
54 | テンプレートマッチング SSD | ✓ | 59 | ラベリング 8近傍 | ✓ | |||
55 | テンプレートマッチング SAD | ✓ | 60 | アルファブレンド | ✓ |
番号 | 問題 | Python | C++ | 番号 | 問題 | Python | C++ | |
---|---|---|---|---|---|---|---|---|
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 | カラートラッキング | ✓ |
番号 | 問題 | Python | C++ | 番号 | 問題 | Python | C++ | |
---|---|---|---|---|---|---|---|---|
71 | マスキング | ✓ | 76 | 顕著性マップ | ✓ | |||
72 | マスキング(カラートラッキングとモルフォロジー) | ✓ | 77 | ガボールフィルタ | ✓ | |||
73 | 縮小と拡大 | ✓ | 78 | ガボールフィルタの回転 | ✓ | |||
74 | ピラミッド差分による高周波成分の抽出 | ✓ | 79 | ガボールフィルタによるエッジ抽出 | ✓ | |||
75 | ガウシアンピラミッド | ✓ | 80 | ガボールフィルタによる特徴抽出 | ✓ |
番号 | 問題 | Python | C++ | 番号 | 問題 | Python | C++ | |
---|---|---|---|---|---|---|---|---|
81 | Hessianのコーナー検出 | ✓ | 86 | 簡単な画像認識 (Step.3) 評価(Accuracy) | ✓ | |||
82 | Harrisのコーナー検出 (Step.1) Sobel + Gaussian | ✓ | 87 | 簡単な画像認識 (Step.4) k-NN | ✓ | |||
83 | Harrisのコーナー検出 (Step.2) コーナー検出 | ✓ | 88 | K-means (Step.1) 重心作成 | ✓ | |||
84 | 簡単な画像認識 (Step.1) 減色化 + ヒストグラム | ✓ | 89 | K-means (Step.2) クラスタリング | ✓ | |||
85 | 簡単な画像認識 (Step.2) クラス判別 | ✓ | 90 | K-means (Step.3) 初期ラベルの変更 | ✓ |
adaptivebinalizatino, poison image blending
@article{yoyoyo-yoGasyori100knock,
Author = {yoyoyo-yo},
Title = {Gasyori100knock},
Journal = {https://github.com/yoyoyo-yo/Gasyori100knock},
Year = {2019}
}
© Curry yoshi All Rights Reserved.
This is under MIT License.
https://github.com/yoyoyo-yo/Gasyori100knock/blob/master/LICENSE