2017-08-30 4 views
1

ありがとうございます。openCVのグラジエントフィルタの方向

私は概念は以下を参照して、異なる所定の方向と、勾配畳み込みフィルタを適用する場合、異なるエッジは光強度に応じて与えられるthis website

に役立つ読めば問題がポップアップ:

filter result with positive direction

filter result with negative direction

そしてIは、Y軸にcv2.SobelとOpenCVの同じを実現しようとしました。

cv2.Sobel(img,cv2.CV_8U,0,1) 

コードでは、検出された一方向のエッジのみが表示されます。私は、エッジを別の強度で検出したことを示すために方向を変えることはできませんでした。

私はCV_64で両方を検出できることを認識していますが、前に示した例とまったく同じように別々にしたいと思います。

img=255-imgのB/Wを反転させるトリックが見つかりました。その後、同じフィルターを適用して、cv2.Sobel(img,cv2.CV_8U,0,1)雲が私の期待どおりに表示されます。

cv2.Sobel機能や他のopencvフィルタで画像の反転を必要とせずにこのフィルタ方向を制御できるかどうかは疑問でした。

+1

なぜなら、なぜ 'filter2D'を使用しないのですか? –

答えて

2

OpenCVでは、y方向とx方向にのみSobelフィルタを適用できます。 documentationを確認すると、適用されているカーネルに関する詳細情報が表示されます。

x方向については、それがある:

cv2.Sobel(img,cv2.CV_8U,1,0) 

およびY方向について:

cv2.Sobel(img,cv2.CV_8U,0,1) 

この最後の2つの数値は、それぞれx及びyにおける画像の誘導体の順序を意味します。

cv2.Sobel(img,cv2.CV_8U,1,1) 

また、私の画像には別の演算子(対角線)があることがわかります。 sobel関数で直接行うことができるかどうかはわかりませんが、確実にfilter2Dを使って "手動で"行うことができます。

cv2.filter2D(img, cv2.CV_8U, kernel) 

ここで、kernelは画像に表示されるカーネルマトリックスです。

kernel = np.array([[0, -1, -1], 
        [1, 0, -1], 
        [1, 1, 0]])