トップページ -> データベース研究スタート -> 画像のセグメンテーション -> 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.continuum.io/downloads#windows

  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) )