画像処理100本ノックとは
以下のような素晴らしい記事を発見しました。
https://qiita.com/yoyoyo_/items/2ef53f47f87dcf5d1e14 (リンク切れ)
画像処理を、OpenCV等の高度なライブラリを使わず行うことで、画像処理の理解を深める、非常に有用な練習問題集です。自分も画像処理の基礎を学びなおしたかったので、自己学習のため活用させていただくことにしました。
ただ、初学者にとってハードルになりそうなのが、環境構築のところです。GitHubのREADMEに丁寧に描かれているのですが、初学者にとっては難易度高く、時間もかかります。また、自宅以外の環境でちょっと学習したいときなどにも不便です。
そんな手間を解消するために、Googleが提供している環境構築不要・無料でPythonの開発が可能なWebサービス「Google Colaboratory」を使って、画像処理100本ノックが動く環境を構築してみました。
「Google Colaboratory」上に画像処理100本ノックの環境を構築
Google Colaboratory自体で何ができるか、便利な使い方TIPS等に関しては、以下記事参照ください。
基本的には、Google Colaboratory(Google Colab)上で画像処理100本ノックのコードがそのまま動くのですが、いくつか気をつけるべきポイントがあるので、それらに関して説明いたします。
本記事の最後に、実際に演習問題を解いているGoogle Colabのノートブックへのリンクも貼っています(まだやりかけです)。こちらはコピーすればそのまま動きますので、合わせて参考にしてみて下さい。
必要なライブラリのインポート
以下コマンド実行することで、必要なライブラリをインポートします。
import cv2
import matplotlib.pyplot as plt
import numpy as np
画像の読み込みと表示
以下コマンドで画像の読み込みと表示を行います。
skimageを使う方法
from skimage import io
img = io.imread('https://yoyoyo-yo.github.io/Gasyori100knock/dataset/images/imori_256x256.png')
plt.axis('off')
plt.imshow(img)
Open CVを使う方法
!wget https://yoyoyo-yo.github.io/Gasyori100knock/dataset/images/imori_256x256.png
img = cv2.imread('imori_256x256.png')
plt.axis('off')
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
以下のように画像が表示されます。
画像の保存と読み込みと表示
一旦画像をファイルに書き出してから読み込んで表示する方法です。
cv2.imwrite("out_img.jpg", img)
out_img = cv2.imread("out_img.jpg")
plt.axis('off')
plt.imshow(cv2.cvtColor(out_img, cv2.COLOR_BGR2RGB))
まとめ
上記のポイントに注意すれば、画像処理100本ノックをGoogle Colab上で学習できると思います。どの問題も、OpenCVを使えばAPI1つ呼び出して出来てしまうのですが、このように画素レベルで、アルゴリズムを理解しながら手を動かすのは、基礎固めに非常に重要なことだと思います。
私も、以前PythonでOpenCVに頼らずNumpy+PILで画像処理のフィルタを1から作って理解するということをしてみましたが、やっぱり自分で手を動かして実装した内容というのは、理解が深まりますし、自身もつきます。
100本ノック全部やれば、相当力つきそうなので地道にこなしていきたいと思います。
以下が、Google Colab上で学習中の画像処理100本ノックのノートブックです。まだ全然途中なので制覇せねば…
また、写真に興味ある人は、RAW現像をブラウザ上で実行できる以下記事も興味深いのではないかと思います。もしよろしければ参考にしてみて下さい。
関連ページ
変更履歴
- 2022/02/21 Google Colabの画像リンク切れ修正・記事を微修正
- 2020/06/17 関連ページ追記