| [サイトマップへ] |
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 パッケージのインストールが終わっていること. 手順を下に説明しています.
Python 3 の開発環境である Anacondaをおすすめ.Window でのインストール手順は次の通りです(Linuxでも同様の手順です).
Windowsのメニューで,コマンドプロンプトを管理者として実行そして,次のコマンドを実行.
conda install scikit-image conda install matplotlib
※ 「Proceed ([y]/n)?」のように表示されたときは y, Enter キー
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 を行う 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 を行う 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 を行う 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) )