OpenCV學習筆記 Sobel運算元

2021-05-27 06:16:51 字數 1345 閱讀 7878

該函式如下:

使用擴充套件 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 ...