トップページ -> 実践知識 -> 画像のセグメンテーション -> 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 プログラムを実行してみる.

Python コンソール」を使う.

PyCharmspyder を使うのが簡単

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