該函式如下:
使用擴充套件 sobel 運算元計算一階、二階、三階或混合影象差分
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 濾波更精確的結果。scharr 濾波器係數是:
對 x-方向 或矩陣轉置後對 y-方向。
函式 cvsobel 通過對影象用相應的核心進行卷積操作來計算影象差分:
由於sobel 運算元結合了 gaussian 平滑和微分,所以,其結果或多或少對雜訊有一定的魯棒性。通常情況,函式呼叫採用如下引數 (xorder=1, yorder=0, aperture_size=3) 或 (xorder=0, yorder=1, aperture_size=3) 來計算一階 x- 或 y- 方向的影象差分。第一種情況對應:
第二種對應:
或者核的選則依賴於影象原點的定義 (origin 來自 iplimage 結構的定義)。由於該函式不進行影象尺度變換,所以和輸入影象(陣列)相比,輸出影象(陣列)的元素通常具有更大的絕對數值(譯者注:即畫素的位深)。為防止溢位,當輸入影象是 8 位的,要求輸出影象是 16 位的。當然可以用函式 cvconvertscale 或 cvconvertscaleabs 把運算結果(dst)轉換為 8 位的。除了8-位影象,函式也接受 32-位 浮點數影象。所有輸入和輸出影象都必須是單通道的,並且具有相同的影象尺寸或者roi尺寸。
例題實現如下:
#include "stdafx.h" #include "cv.h" #include "highgui.h" #include "stdio.h" #include "stdlib.h" int main(int argc, char ** argv)
結果為:
1.學習opencv,於仕祺,劉瑞禎,清華大學出版社,pp.169-170.
2.3.
OpenCV學習筆記 Sobel運算元
該函式如下 使用擴充套件 sobel 運算元計算一階 二階 三階或混合影象差分 void cvsobel const cvarr src,cvarr dst,int xorder,int yorder,int aperture size 3 src 輸入影象.dst輸出影象.xorder x 方向上...
Opencv學習 邊緣檢測(sobel運算元)
sobel運算元是乙個主要用於邊緣檢測的離散微分運算元。它結合了高斯平滑和微分求導,用來計算灰度函式的近似梯度。void sobel inputarray src,outputarray dst,int ddepth,int dx,int dy,int ksize 3,double scale 1,...
OPENCV中的Sobel函式
sobel運算元是一種常用的邊緣檢測運算元,是一階的梯度演算法。對雜訊具有平滑作用,提供較為精確的邊緣方向資訊,邊緣定位精度不夠高。當對精度要求不是很高時,是一種較為常用的邊緣檢測方法。它進行處理的模板如下 其中,gx是橫向的運算元,gy是縱向的運算元。原影象記為f,則 gx gx f gy gy ...