github

yoyoyo-yo / Gasyori100knock

  • пятница, 11 января 2019 г. в 00:18:03
https://github.com/yoyoyo-yo/Gasyori100knock

Python



画像処理100本ノック!!

画像処理の初学者のための問題100問。

これは画像処理の基本的処理の知識を身に着け、アルゴリズムを理解するための100本ノックです。

ここに載っている問題はOpenCVでAPIが用意されているものが殆どですが、あえてそれを自分の手で実装してください。

まだ作成中なので、随時更新していきます。なので問題の難易度の順番もめちゃくちゃです。

なるべくポピュラーなものを採用していますが、ネタ切れであんまり聞かないものもあります笑

Recent

  • 【New!】2019.1.11. Q.54 - 57 テンプレートマッチングを追加
  • 【New!】2019.1.10. Q.27 Bicubic や Q.36-40 JPEGにおける解答を一部修正しました。(画素値がオーバーフローした箇所の修正)、Tutorailにも説明を追加
  • 【New!】2019.1.10. Q.51-53 モルフォロジー勾配 などを追加
  • 2019.1.9. Q.47-50 モルフォロジー処理 などを追加

環境設定

Python-3.6でやって下さい。 (解答はPython-3.6です)

1. Minicondaのインストール

https://conda.io/miniconda.html のサイトからMinicondaをインストールします。

Minicondaがインストールできたら、以下コマンドで仮想環境を作成します。

$ conda create python=3.6 -n gasyori100

作成できたら、以下コマンドで仮想環境を動作します。

$ source actiavte gasyori100

するとこうなります。

(gasyori100) :~/work_space/Gasyori100knock/ :$ 

2. パッケージのインストール

以下のコマンドで必要なパッケージをインストールします。

$ pip install -r requirement.txt

3. 画像処理チュートリアル

以下のファイルを作成し sample.py という名前で保存し、実行します。

import cv2

img = cv2.imread("assets/imori.jpg")
cv2.imshow("imori", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
$ python sample.py

これで以下の画像が表示されれば成功です! 何かボタンを押せば消えます。

次に画像処理に関するnumpyの扱い方のためにTutorialフォルダを見てみて下さい。(もう知ってるという人はスキップして下さい。)

これからは問題を解いていってください。それぞれのフォルダに問題内容が入っています。 問では assets/imori.jpg を使用して下さい。

  • チュートリアル >> Tutorial
  • 問題1-10 >> Quetion_01_10
  • 問題11-20 >> Question_11_20
  • 問題21-30 >> Question_21_30
  • 問題31-40 >> Question_31_40
  • 問題41-50 >> Question_41_50
  • 問題51-60 >> Question_51_60
  • 問題61-70 >> Question_61_70
  • 問題71-80 >> Quesiton_71_80
  • 問題81-90 >> Question_81_90
  • 問題91-100 >> Question_91_100

注意

  • 本稿は画像処理の基礎的な知識・理論を学ぶための教材です。
  • 解答ではなるべくコードを簡易化するために、main( )などを使用してしません。
  • numpyを使用しますが、numpyに関する基本知識は載せません。各自調べて下さい。

問題

  • 無印は画像処理をやる上での基礎知識
  • ☆は応用問題。基礎を組み合わせて、実際に論文で用いられるような手法の理解

になっている問題は解答未作成

番号 問題 備考 番号 問題 備考
1 チャネル入れ替え 21 ヒストグラム正規化
2 グレースケール化 22 ヒストグラム操作
3 二値化 23 ヒストグラム平坦化
4 大津の二値化 24 ガンマ補正
5 HSV変換 25 最近傍補間
6 減色処理 26 Bi-linear補間
7 平均プーリング 27 Bi-cubic補間
8 Maxプーリング 28 アフィン変換(平行移動)
9 ガウシアンフィルタ 29 アフィン変換(拡大縮小)
10 メディアンフィルタ 30 アフィン変換(回転)
11 平滑化フィルタ 31 アフィン変換(スキュー)
12 モーションフィルタ 32 フーリエ変換
13 MAX-MINフィルタ 33 フーリエ変換 ローパスフィルタ
14 微分フィルタ 34 フーリエ変換 ハイパスフィルタ
15 Sobelフィルタ 35 フーリエ変換 バンドパスフィルタ
16 Prewittフィルタ 36☆ JPEG圧縮 (Step.1)離散コサイン変換
17 Laplacianフィルタ 37 PSNR
18 Embossフィルタ 38☆ JPEG圧縮(Step.2)DCT+量子化
19 LoGフィルタ 39 JPEG圧縮(Step.3)YCbCr表色系
20 ヒストグラム表示 40☆ JPEG圧縮(Step.4)YCbCr+DCT+量子化
番号 問題 備考 番号 問題 備考
41☆ Cannyエッジ検出 (Step.1) エッジ強度
42☆ Cannyエッジ検出 (Step.2) 細線化
43☆ Cannyエッジ検出 (Step.3) ヒステリシス閾処理
44☆ Hough変換・直線検出 (Step.1) Hough変換
45☆ Hough変換・直線検出 (Step.2) NMS
46☆ Hough変換・直線検出 (Step.3) Hough逆変換
47 モルフォロジー処理(膨張)
48 モルフォロジー処理(収縮)
49 オープニング処理
50 クロージング処理
51 モルフォロジー勾配
52 トップハット変換
53 ブラックハット変換
54 テンプレートマッチング SSD
55 テンプレートマッチング SAD
56 テンプレートマッチング NCC
57 テンプレートマッチング ZNCC

TODO

Hough, Gabor, HOG, TempleteMatching

注意

このページを利用して、または関して生じた事に関しては、私は一切責任を負いません。 すべて自己責任でお願い致します。