トップページデータベース研究画像のセグメンテーションscikit-image のスーパーピクセルを行ってみる

scikit-image のスーパーピクセルを行ってみる

scikit に実装されているスーパーピクセルを試してみる

スーパーピクセルに関する参考記事: http://scikit-image.org/docs/dev/auto_examples/segmentation/plot_segmentations.html

先人に感謝.

元画像

[image]

SLIC

[image]

felzenszwalb

[image]

quickshift

[image]

watershed

[image]

上に実行結果例を示しているが,パラメータの調整により結果が変わりますので,上の図だけで,どれが良いと結論を出さないようにしてください.

キーワード:superpixel, SLIC, felzenszwalb, quickshift, watershed, scikit-image, Python

前準備

Python のインストール,pip と setuptools の更新,Python 開発環境(JupyterLab, spyder, nteract)のインストール

Windows の場合

  1. Python のインストール

    Python の URL: http://www.python.org/

    インストール手順の詳細は: 別ページで説明している.

  2. pip と setuptools の更新,Python 開発環境(JupyterLab, spyder, nteract)のインストール(Windows 上)

    コマンドプロンプトを管理者として実行し,次のコマンドを実行.

    Windows での pip の実行では,コマンドプロンプトを管理者として実行することにする。

    [image]

    python -m pip install -U pip setuptools
    python -m pip install -U jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
    

Ubuntu の場合

システム Python を使用(インストール操作は不要)

  1. pip と setuptools の更新,Python 開発環境(JupyterLab, spyder, nteract)のインストール(Ubuntu 上)

    端末で,次のコマンドを実行.

    sudo apt -y install python3-dev python3-pip python3-setuptools python3-venv
    sudo pip3 uninstall ptyprocess sniffio terminado tornado jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
    sudo apt -y install jupyter jupyter-qtconsole spyder3
    sudo apt -y install python3-ptyprocess python3-sniffio python3-terminado python3-tornado 
    sudo pip3 install -U jupyterlab nteract_on_jupyter
    

動作に必要となる Python パッケージのインストール

  1. Windows では,コマンドプロン プトを管理者として実行

    [image]
  2. 次のコマンドを実行.
    python -m pip install -U scikit-image matplotlib
    

scikit-image のスーパーピクセルを行ってみる

SLIC

SLIC を行う Python プログラムを実行してみる.

  1. Jupyter Qt Console を起動

    jupyter qtconsole
    

    [image]
    ->

    irisデータセットの準備

    Python プログラムを動かすために, pythonpython3などのコマンドを使う. あるいは, 開発環境や Python コンソール(Jupyter Qt ConsolespyderPyCharmPyScripter など)の利用も便利である.

    ※ 「jupyter qtconsole」を入れたのに,jupyter qtconsole起動しない という場合には,次の操作で,インストールを行ってから,もう一度試してみる.

    ※ Windows では「python」,Ubuntu では「sudo python3 -m pip」

    python -m pip install -U jupyterlab jupyter jupyter-console jupytext spyder
    
  2. 次の Python プログラムを実行
    import matplotlib.pyplot as plt
    %matplotlib inline
    import warnings
    warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
    import skimage.data
    import skimage.color
    import skimage.filters
    import skimage.util
    import skimage.segmentation
    img = skimage.util.img_as_float( plt.imread("d:\lena.jpg") )
    plt.imshow(img)
    
    a = skimage.segmentation.slic(img)
    plt.imshow( a )
    
    plt.imshow( skimage.segmentation.mark_boundaries(img, a) )
    

    [image]

felzenszwalb

felzenszwalb を行う Python プログラムを実行してみる.

import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
import skimage.data
import skimage.color
import skimage.filters
import skimage.util
import skimage.segmentation
img = skimage.util.img_as_float( plt.imread("d:\lena.jpg") )
plt.imshow(img)

a = skimage.segmentation.felzenszwalb(img)
plt.imshow( a )

plt.imshow( skimage.segmentation.mark_boundaries(img, a) )

[image]

quickshift

quickshift を行う Python プログラムを実行してみる.

import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
import skimage.data
import skimage.color
import skimage.filters
import skimage.util
import skimage.segmentation
img = skimage.util.img_as_float( plt.imread("d:\lena.jpg") )
plt.imshow(img)

a = skimage.segmentation.quickshift(img)
plt.imshow( a )

plt.imshow( skimage.segmentation.mark_boundaries(img, a) )

[image]

watershed

watershed を行う Python プログラムを実行してみる.

import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
import skimage.data
import skimage.color
import skimage.filters
import skimage.util
import skimage.segmentation
img = skimage.util.img_as_float( plt.imread("d:\lena.jpg") )
plt.imshow(img)

a = skimage.segmentation.watershed( skimage.filters.sobel( skimage.color.rgb2gray( img ) ), markers=250 ) 
plt.imshow( a )

plt.imshow( skimage.segmentation.mark_boundaries(img, a) )

[image]