cvSobel

cvSobel 是OpenCV中用來計算圖像的 Sobel 變換 ,是Intel開源項目opencv中的函式,要使用它應該在程式中包含#include <cv.h>,並且在opencv2.2版本中,由於檔案結構有所改變,在連線庫中應該添加opencv_imgproc220d.lib,否則會出現連線錯誤:error LNK2019: 無法解析的外部符號 _cvLaplace

基本介紹

  • 外文名:cvSobel
  • 本質:計算機函式
  • 來源:Intel開源項目opencv
  • 套用領域:編程
函式原型
void cvLaplaceconst( CvArr* src,CvArr* dst,int xorder,int yorder,int aperture_size = 3);src 輸入圖像.dst 輸出圖像.xorder和yorder是求導的階數,aperture_size 核大小.函式。
Sobel導數有一個很好的性質,可以定義任意大小的核,並且這些核可以用快速且疊代的方式構造。大核對導數有更好的逼近,小核對噪聲更敏感。
  • 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 轉換為 8 位的。除了 8-比特 圖像,函式也接受 32-位 浮點數圖像。所有輸入和輸出圖像都必須是單通道的,並且具有相同的圖像尺寸或者ROI尺寸。

相關詞條

熱門詞條

聯絡我們