2016-04-15 30 views
0

OpenCV Sobel関数を呼び出して、カーネルサイズが与えられた画像の実際の導関数を計算する方法はありますか?私。画像がf(x, y)x, yの関数であることを考慮すると、[0, 0]から[width, height]までのピクセルで表されますか?与えられたカーネルサイズのOpenCV Sobelフィルタを正規化する方法

dimg_x = cv2.Sobel(img, ddepth=-1, dx=1, dy=0, ksize=ksize) 

勾配画像にはスケーリングを適用する必要がありますが、カーネルサイズを計算する方法はわかりません。

+0

ソーベル勾配が勾配の近似値です。したがって、それはあなたが「実際の」派生物と呼ぶものに依存します。すべての数値的方法は近似値です。ある時点で、行と列のそれぞれの水平方向または垂直方向の差を取ることができます。 – Cyb3rFly3r

+0

@ Cyb3rFly3rは「実際」という意味で定義しています。私はこれが近似であることは大丈夫ですが、いくつかのアプリケーションでは、100倍のようにスケーリングされていることは容認できません。 – DikobrAz

+0

派生語の定義には、デジタル画像を持たない連続的な関数が必要です。これは、認識できない関数の離散表現です。グラデーションを近似しようとする方法はたくさんありますが、おそらくソーベルはあなたが探しているものではありません。最も簡単な方法は列と行に沿ってnumpy.diffを使うことです。 – Cyb3rFly3r

答えて

0

私はこのスニペットは、トリックを行いますと思う:

def gradient(img, dx, dy, ksize): 
    deriv_filter = cv2.getDerivKernels(dx=dx, dy=dy, ksize=ksize, normalize=True) 
    return cv2.sepFilter2D(img, -1, deriv_filter[0], deriv_filter[1]) 
関連する問題