2016-10-24 1 views
1

スーパーピクセルを取得して画像のセマンティックセグメンテーションを得るためにSLICを使用しようとしています。スーパーピクセルセグメントからbox2dを取得

img = cv2.imread(img_name) 
segments = slic(image, n_segments = numSegments, sigma = 3,convert2lab=True,max_iter=25) 

セグメントごとにどのようにbox2dを取得できますか?セグメントの階層ツリーがあれば、それをどのように取り出すのですか?

答えて

2

私は元の論文を読まなかったが、​​によれば、それは階層を返さない。

私はあなたが枠を囲むことを意味すると仮定して、SLICによって返された各スーパーピクセルのバウンディングボックスを得るために、Regionpropsのスキマーexampleを使用しました。

結果: enter image description here

コード:

from skimage.segmentation import slic 
from skimage.data import astronaut 

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.patches as mpatches 

from skimage.measure import label 
from skimage.measure import regionprops 
from skimage.color import label2rgb 

img = astronaut() 
segments = slic(img, n_segments=50, compactness = 100) 

image_label_overlay = label2rgb(segments, image=img) 

fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6)) 
ax.imshow(image_label_overlay) 

for region in regionprops(segments): 

    minr, minc, maxr, maxc = region.bbox 
    rect = mpatches.Rectangle((minc, minr), maxc - minc, maxr - minr, 
           fill=False, edgecolor='red', linewidth=2) 
    ax.add_patch(rect) 

plt.show() 
関連する問題