边缘检测:Sobel、拉普拉斯算子
邊緣
邊緣(edge)是指圖像局部強度變化最顯著的部分。主要存在于目標與目標、目標與背景、區域與區域(包括不同色彩)之間,是圖像分割、紋理特征和形狀特征等圖像分析的重要基礎。
圖像強度的顯著變化可分為:
- 階躍變化函數,即圖像強度在不連續處的兩邊的像素灰度值有著顯著的差異;
- 線條(屋頂)變化函數,即圖像強度突然從一個值變化到另一個值,保持一較小行程后又回到原來的值。
圖像的邊緣有方向和幅度兩個屬性,沿邊緣方向像素變化平緩,垂直于邊緣方向像素變化劇烈.邊緣上的這種變化可以用微分算子檢測出來,通常用一階或二階導數來檢測邊緣。
(a)(b)分別是階躍函數和屋頂函數的二維圖像;(c)(d)是階躍和屋頂函數的函數圖象;(e)(f)對應一階倒數;(g)(h)是二階倒數。
?
一階導數法:梯度算子
對于左圖,左側的邊是正的(由暗到亮),右側的邊是負的(由亮到暗)。對于右圖,結論相反。常數部分為零。用來檢測邊是否存在。
梯度算子 Gradient operators
函數f(x,y)在(x,y)處的梯度為一個向量:
計算這個向量的大小為:
近似為:
梯度的方向角為:
?
Sobel算子
sobel算子的表示:
?
梯度幅值:
用卷積模板來實現:
【相關代碼】
接口
[cpp]?view plaincopy使用
[cpp]?view plaincopy
二階微分法:拉普拉斯
二階微分在亮的一邊是負的,在暗的一邊是正的。常數部分為零。可以用來確定邊的準確位置,以及像素在亮的一側還是暗的一側。
LapLace 拉普拉斯算子
二維函數f(x,y)的拉普拉斯是一個二階的微分,定義為:
其中:
可以用多種方式將其表示為數字形式。對于一個3*3的區域,經驗上被推薦最多的形式是:
定義數字形式的拉普拉斯要求系數之和必為0
?
【相關代碼】
接口
[cpp]?view plaincopy使用
[cpp]?view plaincopy
實踐效果
原圖
注意,邊緣檢測對噪聲比較敏感,需要先用高斯濾波器對圖像進行平滑。參考博文:【OpenCV】鄰域濾波:方框、高斯、中值、雙邊濾波
Sobel 邊緣檢測
Sobel算子可以直接計算Gx 、Gy可以檢測到邊的存在,以及從暗到亮,從亮到暗的變化。僅計算| Gx |,產生最強的響應是正交?于x軸的邊; | Gy |則是正交于y軸的邊。
?
Laplace邊緣檢測
拉普拉斯對噪聲敏感,會產生雙邊效果。不能檢測出邊的方向。通常不直接用于邊的檢測,只起輔助的角色,檢測一個像素是在邊的亮的一邊還是暗的一邊利用零跨越,確定邊的位置。
轉載請注明出處:http://blog.csdn.net/xiaowei_cqu/article/details/7829481
實驗代碼下載:http://download.csdn.net/detail/xiaowei_cqu/4475976
總結
以上是生活随笔為你收集整理的边缘检测:Sobel、拉普拉斯算子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像几何变换:旋转,缩放,斜切
- 下一篇: SIFT原理与源码分析