7

Pythonで書かれた1D非最大抑制アルゴリズムがありますか?1D強度ベクトルを入力として受け取るscipyを使用してPythonでCannyエッジ検出器を作成するために必要です。

私はWebを調べましたが、Cannyエッジ検出器の動作を説明する多くの情報とJavaで記述されたいくつかの例がありますが、それらはすべて2Dでのエッジ検出を説明しています。

ただし、scipyは、Cannyエッジ検出に必要な他のアルゴリズム、つまり1Dのガウスフィルタリングと微分をサポートしています。

前もって感謝します。

4

2 に答える 2

2

最大フィルターのことですか?もしそうなら、scipy.ndimage.maximum_filter1dを見てください。

簡単な例として:

import numpy as np
import scipy.ndimage as ndimage

input = np.sin(np.linspace(0, 4*np.pi, 20))
input = (input * 10).astype(np.int) # Makes it easier to read
output = ndimage.maximum_filter1d(input, 4)

print 'In: ', input
print 'Out:', output

これにより、次の結果が得られます。

In:  [ 0  6  9  9  4 -1 -7 -9 -8 -3  3  8  9  7  1 -4 -9 -9 -6  0]
Out: [ 6  9  9  9  9  9  4 -1 -3  3  8  9  9  9  9  7  1 -4  0  0]
于 2011-09-06T18:15:53.573 に答える
0

あなたのデータは定期的ではないと思います。疑似コードを示しますが、それで十分であることを願っています。

-- データを比較します

-- 差分で符号の変更を探しています。マックスにとっては、プラスからマイナスへと変化します。ゼロは特殊なケースです。numpy.sign() は、負、ゼロ、および正の値について、-1、0、1 の各値の符号を示します。

-- もう一度 diff を実行できます -- -2 と -1、または最小抑制 2 と 1 を探しています。境界を適切に処理してください。

良いlucke

import matplotlib.pyplot as plt
import numpy as np

dat= np.linspace(1, 5, 5)
dat2 = np.concatenate([dat, dat[::-1]+.5, dat,dat[::-1]])
## ignore above.

res = np.diff(np.sign(np.diff(dat2, prepend=[0])), append=0)
plt.plot(dat2)  ## NB end conditions, and you can ignore plotting
plt.plot(res)

乾杯、E

于 2022-01-23T21:22:12.037 に答える