4

形態演算子は、Scipy ndimage と Scikit image で異なります。境界条件はさまざまな方法で扱われると思います。

import numpy as np
from scipy import ndimage
from skimage import morphology

scp = ndimage.binary_erosion(np.ones((10,10),dtype="uint8"),).astype("uint8")
sci = morphology.binary_erosion(np.ones((10,10),dtype="uint8"),morphology.disk(1))

scp は期待通りの結果をもたらしますが、sci はそうではありません:

>>>> scp
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
   [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
   [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
   [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
   [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
   [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
   [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
   [0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)

>>>> sci
array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], dtype=uint8)

scikit-image形態演算子で境界条件を設定するにはどうすればよいですか?

よろしくお願いします

4

1 に答える 1

3

OK、「border_value」パラメーターについてではありません。私は skimage/morphology/binary.py で見つけました:

import numpy as np
from scipy import ndimage

def binary_erosion(image, selem, out=None):
    conv = ndimage.convolve(image > 0, selem, output=out,
                            mode='constant', cval=1) <---Here!
    if conv is not None:
        out = conv
    return np.equal(out, np.sum(selem), out=out)

Scipy リファレンス ガイドから:

scipy.ndimage.filters.convolve(input, weights, output=None, mode='reflect', cval=0.0, origin=0):

mode : {'reflect','constant','nearest','mirror', 'wrap'}, オプション モード パラメーターは、配列の境界線の処理方法を決定します。「定数」モードの場合、境界を超える値は cval に設定されます。デフォルトは「反映」です。cval : モードが 'constant' の場合に入力の過去のエッジを埋めるためのスカラー、オプションの値。デフォルトは 0.0 です。

謎解き!

于 2014-07-25T16:43:10.577 に答える