トップページ -> 最新情報技術の実習と研究ツール -> 画像のセグメンテーション -> scikit-image のスーパーピクセルを行ってみる
[サイトマップへ]  

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

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

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

先人に感謝.

元画像

SLIC

felzenszwalb

quickshift

watershed

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

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


前もって準備しておくこと

前準備として,Anaconda のインストール, 動作に必要となる Python パッケージのインストールが終わっていること. 手順を下に説明しています.

Anaconda のインストール

Python 3 の開発環境である Anacondaをおすすめ.Window でのインストール手順は次の通りです(Linuxでも同様の手順です).

  1. https://www.anaconda.com/download

  2. 「Download」をクリックする.

  3. ダウンロードが始まるので確認する.

  4. ダウンロードした .exe ファイルを実行して,Anacondaをインストール.

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

Windowsのメニューで,コマンドプロンプトを管理者として実行そして,次のコマンドを実行.

conda install scikit-image
conda install matplotlib

※ 「Proceed ([y]/n)?」のように表示されたときは y, Enter キー


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

SLIC

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

「IPython シェル」を使う.

※ Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.

次の Python プログラムを実行

import matplotlib.pyplot as plt
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) )

felzenszwalb

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

import matplotlib.pyplot as plt
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) )

quickshift

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

import matplotlib.pyplot as plt
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) )

watershed

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

import matplotlib.pyplot as plt
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) )