「ガウシアンフィルタでノイズを除去したい」
「ぼやけた画像のエッジを強調させたい」
「Pythonで画像処理を行いたい」
このような場合には、scikit-imageが利用できます。
この記事では、scikit-imageについて解説します。
本記事の内容
- scikit-imagetとは?
- scikit-imageのシステム要件
- scikit-imageのインストール
- scikit-imageの動作確認
それでは、上記に沿って解説していきます。
scikit-imageとは?
scikit-imageは、画像処理のためのアルゴリズムを集めたPythonライブラリです。
画像処理とは、次のような機能になります。
- セグメンテーション
- 幾何学的変換
- 色空間の操作・分析
- フィルタリング
- モルフォロジー
- 特徴検出
実際のモノを見た方がわかりやすいでしょう。
scikit-imageを使えば、次のように画像を変換できます。
もちろん、上記以外にも多くの画像処理が可能です。
その実例は、以下ページで確認できます。
General examples
https://scikit-image.org/docs/stable/auto_examples/
同じようなライブラリとして、opencv-pythonがあります。
opencv-pythonについては、次の記事で説明しています。
画像処理という機能は、機械学習で画像を扱う場合に必要となります。
そのため、scikit-imageやopencv-pythonは機械学習において活躍することが多いです。
実際、依存パッケージとしてscikit-imageやopencv-pythonがインストールされています。
2者択一と言うより、両方ともインストールしているケースもあります。
例えば、姿勢推定が可能なpytorch-openposeがそのケースです。
pytorch-openposeでは、scikit-imageとopencv-pythonの二刀流です。
足りない部分を補っているということでしょうね。
以上、scikit-imageについての説明でした。
次は、scikit-imageのシステム要件を確認します。
scikit-imageのシステム要件
現時点(2021年10月)でのscikit-imageの最新バージョンは、0.18.3となります。
この最新バージョンは、2021年8月25日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、以下となります。
- Python 3.7
- Python 3.8
- Python 3.9
そして、以下はPython公式開発サイクルです。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月 |
3.7 | 2018年6月27日 | 2023年6月 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
これらを見ると、scikit-imageの動きは早いです。
もうすでに、Python 3.6のサポートを打ち切っています。
このような対応は、利用する側からすると安心できます。
メンテナンスされていないライブラリも結構存在していますからね。
まとめると、scikit-imageのシステム要件はPythonのバージョンに注意となります。
私は、次のPythonで検証しています。
>python -V Python 3.9.7
Pythonのアップグレードが必要なら、次の記事をご覧ください。
以上、scikit-imageのシステム要件を説明しました。
次は、scikit-imageをインストールします。
scikit-imageのインストール
まずは、現状のインストール済みパッケージを確認しておきます。
>pip list Package Version ---------- ------- pip 21.3 setuptools 58.2.0
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、scikit-imageのインストールです。
scikit-imageのインストールは、以下のコマンドとなります。
pip install scikit-image
インストールは、少しだけ時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。
>pip list Package Version --------------- ---------- cycler 0.10.0 imageio 2.9.0 kiwisolver 1.3.2 matplotlib 3.4.3 networkx 2.6.3 numpy 1.21.2 Pillow 8.3.2 pip 21.3 pyparsing 2.4.7 python-dateutil 2.8.2 PyWavelets 1.1.1 scikit-image 0.18.3 scipy 1.7.1 setuptools 58.2.0 six 1.16.0 tifffile 2021.10.12
結構多くのパッケージに依存しています。
有名なライブラリが多い印象です。
以上、scikit-imageのインストールについて説明しました。
最後は、scikit-imageの動作確認を行います。
scikit-imageの動作確認
scikit-imageの動作確認として、エッジ検出を行います。
実際に、次のような画像処理を行うコードを用意します。
用意したコードは、以下。
プログラムの内容は、コメントを参考にしてください。
from skimage import data from skimage import io from skimage import filters from skimage import img_as_ubyte # 元画像の読み込み(サンプルデータから取得) image = data.coins() # エッジ検出した画像に変換 edges = filters.sobel(image) # 元画像の保存 io.imsave("image.jpg", image) # 変換画像の保存 io.imsave("edges.jpg", img_as_ubyte(edges))
上記を実行すると、二つの画像が作成されます。
image.jpg
edges.jpg
画像を確認できれば、scikit-imageの動作確認は完了です。
なお、img_as_ubyteは必須ではありません。
ただし、img_as_ubyteを利用しないと次の警告が表示されてしまいます。
Lossy conversion from float64 to uint8. Range [0, 1]. Convert image to uint8 prior to saving to suppress this warning.
変換して作成した画像データ「edges」のdtypeは、float64です。
それがuint8の画像ファイルとして保存されることになるため、警告が表示されることになります。
この警告を出さないために、dtypeがuint8 のデータに変換する必要があります。
その変換のためにimg_as_ubyteを用いているということです。
以上、scikit-imageの動作確認を説明しました。