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