2017-11-11 14 views
2

色付きの曲線を持つ画像があります。numpy画像から色付きの線を抽出します。

各行ごとに曲線の上位ピクセルのインデックスを抽出します。

このコードは動作しますが、(fmagicは、線の色のRGBコードで、イメージです)かなり遅いです:

res = f.shape[0] 
magic = 146, 47, 6 
return [min(l for l in range(res) if np.array_equal(magic, f[l, c, :3])) for c in range(res)] 

にはどうすれば速く同じことを行うことができますか?

答えて

2

magicの要素を各行、つまり最後の軸に沿って比較します。これによりマスク2Dが得られます。

mask = (f == magic).all(-1) 

以来、我々は最終的にそのマスク配列の最初のTrueのインデックスを見つけることを意味するであろうと、min(l)を行っています。それは動作しませんので、スカラーを返しARGMAX

(f == magic).all(-1).argmax(0) 
+0

- だから、少なくとも一つの保証試合がありますならば、我々はそうのように、最初のマッチのインデックスを取得するためにargmaxを使用することができます。 – Labo

+0

私はトリックを見つけました: '(f [,,:、:3] == magic).all(axis = -1).argmax(0)' – Labo

+0

argmax takesは最初のインデックスをとります。期待どおりの分! – Labo

関連する問題