私は現在、画像処理アルゴリズムのためにPython内部でFelzenszwalbとHuttenlocher(http://www.cs.cornell.edu/~dph/papers/dt.pdf)によって記述されたGDTを実装しようとしています。しかし、私は2,3年前に出版した論文に記載されているアルゴリズムを使用しましたが、結果は不良でした。私はここにC#の実装を見つけました:https://dsp.stackexchange.com/questions/227/fastest-available-algorithm-for-distance-transform/29727?noredirect=1#comment55866_29727Pythonで一般化された距離変換
そしてそれをPythonに変換しました(これは私が以前と同じでした)。
これは私のコードです:
def of_column(dataInput):
output = zeros(dataInput.shape)
n = len(dataInput)
k = 0
v = zeros((n,))
z = zeros((n + 1,))
v[0] = 0
z[0] = -inf
z[1] = +inf
s = 0
for q in range(1, n):
while True:
s = (((dataInput[q] + q * q) - (dataInput[v[k]] + v[k] * v[k]))/(2.0 * q - 2.0 * v[k]))
if s <= z[k]:
k -= 1
else:
break
k += 1
v[k] = q
z[k] = s
z[k + 1] = +inf
k = 0
for q in range(n):
while z[k + 1] < q:
k += 1
output[q] = ((q - v[k]) * (q - v[k]) + dataInput[v[k]])
return output
私はまだ私のエラーを見つけることができません。アルゴリズムにバイナリ(ブーリアン)のnumpy配列を渡すと、距離変換ではなく配列自体が返されます。なぜこれがPythonで動作しないのですか?
私はそれを数時間と数時間後に働かせました。 C#でコードを実装する上のリンクで与えられた答えは、「白い」領域を非常に大きな数にすることを示唆しています。私のdataInput配列はブール値の配列(0、1)でした。私はすべての1を2^32に置き換えました。うまく動作します。数字が高いほど、ぼやけてしまいます。低いほど、それが得られるソースに似ています。 – macskay
自己回答と自分の答えを受け入れることは、この問題がより完全に解決されていることを示しています。 –
あなたの回答でもあなたはアップフォートを得ることができます:) –