void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size=3 );
src
輸入圖像.
dst
輸出圖像.
xorder
x 方向上的差分階數
yorder
y 方向上的差分階數
aperture_size
擴展 Sobel 核的大小,必須是 1, 3, 5 或 7。 除了尺寸為 1, 其它情況下, aperture_size ×aperture_size 可分離核心將用來計算差分。對 aperture_size=1的情況, 使用 3x1 或 1x3 核心 (不進行高斯平滑操作)。這裡有一個特殊變數 CV_SCHARR (=-1),對應 3x3 Scharr 濾波器,可以給出比 3x3 Sobel 濾波更精確的結果。
對 x-方向 或矩陣轉置後對 y-方向。
函式 cvSobel 通過對圖像用相應的核心進行卷積操作來計算圖像差分
由於Sobel 運算元結合了 Gaussian 平滑和微分,所以,其結果或多或少對噪聲有一定的魯棒性。通常情況,函式調用採用如下參數 (xorder=1, yorder=0, aperture_size=3) 或 (xorder=0, yorder=1, aperture_size=3) 來計算一階 x- 或 y- 方向的圖像差分。
由於該函式不進行圖像尺度變換,所以和輸入圖像(數組)相比,輸出圖像(數組)的元素通常具有更大的絕對數值(譯者註:即像素的位深)。為防止溢出,當輸入圖像是 8 位的,要求輸出圖像是 16 位的。當然可以用函式 cvConvertScale 或 cvConvertScaleAbs 把運算結果(dst)轉換為 8 位的。除了8-點陣圖像,函式也接受 32-位 浮點數圖像。所有輸入和輸出圖像都必須是單通道的,並且具有相同的圖像尺寸或者ROI尺寸。