【OpenCV】影像變換(二)邊緣檢測:梯度運算元、Sobel運算元和Laplace運算元
這兩天看了下邊緣檢測的內容,下面就對這些邊緣檢測的運算元的理論進行總結,感覺有篇博文在這些內容方面寫的很好,特轉載如下:
http://blog.csdn.net/xiaowei_cqu/article/details/7829481
邊緣
邊緣(edge)是指影像區域性強度變化最顯著的部分。主要存在於目標與目標、目標與背景、區域與區域(包括不同色彩)之間,是影像分割、紋理特徵和形狀特徵等影像分析的重要基礎。
影像強度的顯著變化可分為:
•階躍變化函式,即影像強度在不連續處的兩邊的畫素灰度值有著顯著的差異;
•線條(屋頂)變化函式,即影像強度突然從一個值變化到另一個值,保持一較小行程後又回到原來的值。
影像的邊緣有方向和幅度兩個屬性,沿邊緣方向畫素變化平緩,垂直於邊緣方向畫素變化劇烈.邊緣上的這種變化可以用微分運算元檢測出來,通常用一階或二階導數來檢測邊緣。
(a)(b)分別是階躍函式和屋頂函式的二維影像;(c)(d)是階躍和屋頂函式的函式圖象;(e)(f)對應一階倒數;(g)(h)是二階倒數。
一階導數法:梯度運算元
對於左圖,左側的邊是正的(由暗到亮),右側的邊是負的(由亮到暗)。對於右圖,結論相反。常數部分為零。用來檢測邊是否存在。
梯度運算元 Gradient operators
函式f(x,y)在(x,y)處的梯度為一個向量:
計算這個向量的大小為:
近似為:
梯度的方向角為:
Sobel運算元
sobel運算元的表示:
梯度幅值:
用卷積模板來實現:
二階微分法:拉普拉斯
二階微分在亮的一邊是負的,在暗的一邊是正的。常數部分為零。可以用來確定邊的準確位置,以及畫素在亮的一側還是暗的一側。
LapLace 拉普拉斯運算元
二維函式f(x,y)的拉普拉斯是一個二階的微分,定義為:
其中:
可以用多種方式將其表示為數字形式。對於一個3*3的區域,經驗上被推薦最多的形式是:
定義數字形式的拉普拉斯要求係數之和必為0
其實在OpenCV中已經給出了相關的函式,下面我就將簡要的介紹下OpenCV中自帶的cvSobel()和cvLaplace()函式。
cvSobel(
const CvArr* src,//輸入影像
CvArr* dst,//輸出影像
int xorder,
int yorder,//x,y是求導的階數,只可能用到0,1,最多為2,0表示這個方向上沒有求導
int aperture_size=3
)
sobel導數有個很好的性質,即可以定義任意大小的核,並且這些核可以用快速且迭代方式構造。大核對導數有更好的逼近,因為小核對噪聲更敏感。sobel運算元其實不是真正的導數,因為sobel運算元作用的物件是離散空間。下面介紹下cvLaplace()函式。
void cvLaplace(
const CvArr* src,//源影像可以是8點陣圖像,也可以是32點陣圖像
CvArr* dst,//目標影像必須是16位或者32點陣圖像
int aperturesize=3
)
在實際的OpenCV程式中,大家可以嘗試呼叫上述的函式進行影像邊緣的檢測,觀察檢測效果。
相關文章
- Python 影像處理 OpenCV (12): Roberts 運算元、 Prewitt 運算元、 Sobel 運算元和 Laplacian 運算元邊緣檢測技術PythonOpenCV
- Python 影像處理 OpenCV (13): Scharr 運算元和 LOG 運算元邊緣檢測技術PythonOpenCV
- sobel運算元,matlab實現Matlab
- spark-運算元-分割槽運算元Spark
- 影像濾波演算法整理--均值、中值、高斯、拉普拉斯運算元、梯度運算元:演算法梯度
- 運算元
- 使用運算元控制公式運算公式
- RDD運算元
- Laplace分佈運算元開發經驗分享
- 【Spark篇】---SparkStreaming中運算元中OutPutOperator類運算元Spark
- Python 影像處理 OpenCV (9):影像處理形態學開運算、閉運算以及梯度運算PythonOpenCV梯度
- 運算元據庫
- python運算元據Python
- JavaScript運算元組JavaScript
- Numpy 加法運算,opencv 加法運算,影像的融合OpenCV
- 運算元據庫表
- MySQL DML運算元據MySql
- jmeter運算元據庫JMeter
- DDL:運算元據庫
- onnx 運算元定義
- 什麼是運算元?
- Flink -- Operator操作運算元
- SIFT運算元總結
- opencv 梯度運算、禮貌操作OpenCV梯度
- 【SEOI2024 A】二元運算器
- opencv 開運算、閉運算OpenCV
- [影象處理] Python+OpenCV實現車牌區域識別及Sobel運算元PythonOpenCV
- 【TVM系列三】運算元轉換呼叫流程
- Spark常用Transformations運算元(一)SparkORM
- Python運算元據庫(3)Python
- Oracle OCP(10):運算元據Oracle
- 3.0 常見operators運算元
- 影像處理領域的加速運算元收集
- 高通濾波法、微分運算元法、神經網路方法實現邊緣檢測神經網路
- 遺傳演算法的改進——跳出區域性最優機制的研究(選擇運算元、交叉運算元、變異運算元的改進)演算法
- js 方法(運算元組為主JS
- 利用 Sequelize 來運算元據庫
- spark一些常用運算元Spark
- Ascend C 自定義PRelu運算元