【Python】scikit-imageをインストールして画像処理を行う

【Python】scikit-imageをインストールして画像処理を行う プログラミング

「ガウシアンフィルタでノイズを除去したい」
「ぼやけた画像のエッジを強調させたい」
「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.62016年12月23日2021年12月
3.72018年6月27日2023年6月
3.82019年10月14日2024年10月
3.92020年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の動作確認を説明しました。

タイトルとURLをコピーしました