web-dev-qa-db-ja.com

最大でない抑制

Edgeに直交する方向であるatan(dy/dx)でグラデーションの方向を取得できることを学びました。これで宿題が出て、この方向を4つのクラス(x方向とy方向、両方の対角線)に離散化し、-非最大抑制について、最も一致する方向の両方の隣接ピクセルをチェックすることになりました。 。

私は完全に解決策を手に入れませんでした。明らかに4つのケースがありました。

  1. abs(angle) < pi/8なので、勾配は(おおよそ)x方向を指しているため、img(i, j-1)img(i, j+1)をチェックします(画像の原点が左上にあると想定)

  2. _angle > pi/8 && angle <= 3*pi/8_なので、グラデーションは右上を指します。 img(i-1, j+1)img(i+1, j-1)をチェックする必要があると思いましたが、代わりに、直交対角線のように見えるimg(i-1, j-1)img(i+1, j+1)をチェックします。

他の2つのケースは同等です。私はこれを変更しようとしましたが、エッジは本当に奇妙に見えたので、これは正しいように見えますが、理由がわかりません。

誰かがこれを私に説明できますか?

13
user1709708

非最大抑制は、重要なエッジにないポイントを削除する方法です。最初のケースでは、特定のポイントで勾配が0度に近い場合、つまり、エッジが北または南にあり、このポイントの大きさがより大きい場合、そのポイントはエッジ上にあると見なされます。 (例のように)ポイントの左と右の両方の大きさ。 2番目のケースでは、勾配を45度でチェックしているため、エッジは135度であり、勾配方向に沿ったポイントよりも大きい場合、つまり(-1、-1)および(1 、1)。座標系を回転してもこれには影響しません。

enter image description here

18
mmgp

これが、キャニーエッジ検出プロセスで使用されるpython -- Non Maxima Suppression の実装)です。

北と南、北東と南西、東と西、南東と北西に集中しています。次に、保持する値を決定します。

それがより良いエッジを見つけるためにNMSを必要とする誰かを助けることを願っています。

2
Santhosh

元の質問に遅れる可能性がありますが、次のリンクは、非最大抑制を理解するのに苦労している人を助けるかもしれません。

非最大抑制のJavaデモ

1
liarspocker