十三 邊緣提取

2021-10-04 11:59:29 字數 2502 閱讀 1025

影象邊緣:找到畫素值差異比較大的地方

1. 對影象進行一階求導(即sobel),最大變化處的絕對值最大值

2. 對影象進行二階求導(即laplance),最大變化處的值為零

1. sobel運算元

原理:權重的差異擴大了差異(當kernal覆蓋的區域的畫素值一樣時,kernel覆蓋的畫素卷積和為0(即錨點的值為0);當差異很小時,卷積和很小;當差異很大時,卷積和絕對值很大。)

a. x 方向梯度(3行3列:[-1,0,1, -2,0,2, -1,0,1]),由於kernel的中間一列為0,豎直方向的差異沒有影響

mat kernel_x = (mat_(3, 3) << -1, 0, 1, -2,0,2,-1,0,1);

b. y 方向梯度(3行3列: [-1,-2,-1, 0,0,0, 1,2,1])

mat kernel_y = (mat_(3, 3) << -1, -2, -1, 0,0,0, 1,2,1);

c. 獲取邊緣

x方向梯度和y方向梯度求平方,再開方(g=sqrt(x*x+y*y),可用近似值:g=|x|+|y|加快運算速度)

d. 過濾,梯度大於閾值的保留

2. scharr運算元([3,0,3, -10 ,0,10, -3,0,3])

sobel的改進,更大的權重產生更大的差異

3. 拉普拉斯運算元(3行3列: [0,-1,0, -1,4,-1, 0,-1,0])

原理:比較錨點和周圍點

mat kernel_y = (mat_(3, 3) << 0, -1, 0, -1, 4, -1, 0, -1, 0);

4. robert運算元 [1,0,0,-1] ,[0,1,-1,0]

5. canny邊緣檢測

原理: a. 高斯模糊

b. 灰度影象

c. 計算梯度

d. 非最大訊號抑制

e. 高低閾值輸出影象(t1, t2為閾值,凡是高於t2的都保留,凡是小於t1都丟棄,從高於t2的畫素出發,凡是大於t1而且相互連線的,都保留。最終得到乙個輸出二值影象,推薦的高低閾值比值為 t2: t1 = 3:1/2:1其中t2為高閾值,t1為低閾值)

void sobel( inputarray src, outputarray dst, int ddepth, int dx, int dy, int ksize = 3, double scale = 1, double delta = 0, int bordertype = border_default );

src:影象

dst:目標影象

ddepth:目標影象深度

dx:x方向差分階數(為1時表示獲取x方向梯度)

dy:y方向差分階數(為1時表示獲取y方向梯度)

ksize:運算元大小

scale:縮放

delta:可選增量(偏移量)

bordertype:邊界模式

void scharr( inputarray src, outputarray dst, int ddepth, int dx, int dy, double scale = 1, double delta = 0, int bordertype = border_default );

src:影象

dst:目標影象

ddepth:目標影象深度

dx:x方向差分階數(為1時表示獲取x方向梯度)

dy:y方向差分階數(為1時表示獲取y方向梯度)

ksize:運算元大小

scale:縮放

delta:可選增量(偏移量)

bordertype:邊界模式

void laplacian( inputarray src, outputarray dst, int ddepth, int ksize = 1, double scale = 1, double delta = 0, int bordertype = border_default );

src:影象

dst:目標影象

ddepth:目標影象深度

ksize:運算元大小

scale:縮放

delta:可選增量(偏移量)

bordertype:邊界模式

void canny( inputarray image, outputarray edges, double threshold1, double threshold2, int aperturesize = 3, bool gradient = false );

image:影象

edges:目標影象

threshold1:低閾值

threshold2:高閾值

aperturesize:運算元大小

l2gradient:是否歸一化

void convertscaleabs(inputarray src, outputarray dst, double alpha = 1, double beta = 0);

src:影象

dst:目標影象

alpha:比例縮放

beta:可選增量(偏移量)

OpenCV學習筆記(十三)邊緣檢測

邊緣檢測 邊緣檢測運算元有很多,sobel laplace prewitt canny marr hildresh。sobel運算元 sobel運算元是主要用於邊緣檢測的離散微分運算元,它結合了高斯平滑和微分求導,用於計算影象灰度函式的近似梯度。void sobel inputarray src,o...

Python opencv邊緣提取

題目描述 利用opencv或其他工具編寫程式實現影象的邊緣提取。實現過程 import cv2 import numpy as np imread 兩個引數 1 路徑。img cv2.imread r c users pc desktop test1.bmp cv2.imshow img img r...

邊界輪廓提取(邊緣提取)例項

邊緣提取,指數字影象處理中,對於輪廓的乙個處理。對於邊界處,灰度值變化比較劇烈的地方,就定義為邊緣。也就是拐點,拐點是指函式發生凹凸性變化的點。二階導數為零的地方。並不是一階導數,因為一階導數為零,表示是極值點。邊緣提取 邊緣檢測的基本思想首先是利用邊緣增強運算元,突出影象中的區域性邊緣,然後定義象...