2017-08-21 14 views
2

現在MatlabのコードをOpenCVに変換していますが、MatlabとOpenCVの距離変換関数の動作が異なっています。 例として単純マトリクスを取る BWは=MatlabとOpenCVの距離変換の動作が異なります

0  0  0  0  0 
0  1  0  0  0 
0  0  0  0  0 
0  0  0  1  0 
0  0  0  0  0 

Matlab version distance transform意味がその画素とBWの最も近いゼロ以外の画素との間の距離である数を割り当て、Iは

1.4142 1.0000 1.4142 2.2361 3.1623 
1.0000   0 1.0000 2.0000 2.2361 
1.4142 1.0000 1.4142 1.0000 1.4142 
2.2361 2.0000 1.0000   0 1.0000 
3.1623 2.2361 1.4142 1.0000 1.4142 

を得OpenCVではDIST_L2(単純なユークリッド距離)を選択します。それは私に与えます

1.3692 0.9550 1.3692 2.3242 3.2792 
0.9550   0 0.9550 1.9100 2.3242 
1.3692 0.9550 1.3692 2.3242 1.3692 
2.3242 1.9100 0.9550   0 0.9550 
3.2792 2.3242 1.3692 0.9550 1.3692 

なぜ私は理解できません。私は、OpenCVがピクセルを最も近いゼロピクセルで計算することを認識しました。したがって、私はすでに入力マトリックスを反転しました。

+0

私はMATLABが正しいと言っています....私は、L2距離が対角線ピクセルのsqrt(2)ではないことを知りません。おそらく、離散点としてピクセルを取らず、サイズが大きいと仮定しますか? –

答えて

4

maskSize - 距離変換マスクのサイズ。 3,5、またはCV_DIST_MASK_PRECISEにすることができます(後者のオプションは、最初の関数でのみサポートされています)。

これは、OpenCVバージョンのように見えます。距離変換は、maskSizeを使用して正規化を行っています。それを0に設定しても(ドキュメントには言及していない)、問題を解決します。

+0

興味深い。よくできました。 +1。 – rayryeng

関連する問題