Part11. 圖像的邊緣
灰度圖像的分割算法大多都基于兩個性質:灰度的不連續性和灰度的相似性。
對于不連續性的灰度,可以以灰度突變為基礎分割一幅圖像,比如通過圖像的邊緣,基于邊緣進行圖像分割。對于相似的灰度,可以通過區域進行圖像分割。本文主要介紹圖像邊緣相關的內容和原理。
圖像的邊緣是圖像中亮度變化比較大的點。圖像邊緣點的出現一般是由于深度的不連續、物體表面方向的變換、物體屬性變化或者場景照明變化引起。
邊緣是連通的邊緣像素集合。
常見的邊緣類型有三種:
階梯形邊緣:即從一個灰度到比它高好多的另一個灰度。
屋頂形邊緣:它的灰度是慢慢增加到一定程度,然后慢慢減少。
線性邊緣:它的灰度從一個級別跳到另一個灰度級別之后然后回來。
常見的邊緣類型.PNG
真實的圖像邊緣可能含有噪聲,不一定符合上述理想的邊緣模型。
Part22. 圖像的梯度
圖像可以看成是一個二維離散函數,為了衡量圖像灰度的變化率,可以對二維離散函數進行求導(連續的函數可以直接求導,離散的函數只能通過一些方法來近似)。一階或二階導數都可以檢測局部灰度突變。
12.1 差分
差分,又名差分函數或差分運算,一般是指有限差分,是數學中的一個概念,將原函數 f(x) 映射到 f(x+a) - f(x+b) 。
差分運算,相應于微分運算,是微積分中重要的一個概念。差分對應離散,微分對應連續。
差分可分為前向差分、反向差分和中心差分。
2.1.1 前向差分
當自變量從變到時,函數的改變量,稱為函數 f(x) 在點的步長為 的一階(前向)差分。
通常記為,,其中為差分算子。
同理,為 處的二階差分。
為 處的 n 階差分。
2.1.2 反向差分
一階反向差分為:
2.1.3 中心差分
一階中心差分為:
22.2 導數
數字函數的導數可用有限差分定義。
首先,將 展開為 x 的泰勒級數,我們可以得到一維函數 f(x) 在任意點 x 處的一階導數的近似:
則:
當 時
對于一階導數,我們只使用線性項,可得:
由此,用前向差分得到灰度差:
當 時
對于一階導數,我們同樣只使用線性項,可得:
由此,用反向差分得到灰度差:
使用(2)式-(3)式,用中心差分可得:
中心差分的誤差較小,導數通常表示為中心差分?;?strong>中心差分的二階導數,使用(2)式+(3)式,可得:
即:
通常,一階導數和二階導數對分析邊緣有以下的結論:
一階導數通常在圖像中產生較粗的邊緣;
二階導數對精細細節,如細線、孤立點和噪聲有較強的響應;
二階導數在灰度斜坡和灰度臺階過渡處會產生雙邊緣響應;
二階導數的符號可用于確定邊緣的過渡是從亮到暗還是從暗到亮。
計算圖像中每個像素位置的一階導數和二階導數的方法是空間卷積。
當我們把圖像看做是一個二維離散函數時,通過上述方式可得 x、y 方向的二階導數:
以及
根據拉普拉斯算子,圖像可以定義為
由(5)式+(6)式,可得:
(7)式可寫成如下 filter mask 的形式 :
laplace核.png
拉普拉斯可以對圖像進行銳化,利用下面的公式:
其中,f(x,y) 表示原圖,g(x,y) 表示銳化后的圖像,c = -1,則
對于不同的拉普拉斯核,c 可能會取不同的值。
下面的代碼,展示了對灰度圖像進行銳化以及對灰度圖像的拉普拉斯變換:
#include#include #include usingnamespacestd; usingnamespacecv; intmain(intargc,char*argv[]) { Matsrc=imread(".../girl.jpg"); imshow("src",src); Matgray; cvtColor(src,gray,COLOR_BGR2GRAY); imshow("gray",gray); Matdst,laplace; dst.create(src.size(),CV_8UC1); laplace.create(src.size(),CV_8UC1); intheight=gray.rows; intwidth=gray.cols; for(inti=1;i(i,j)=saturate_cast (5*gray.at (i,j)-gray.at (i+1,j)-gray.at (i-1,j)-gray.at (i,j+1)-gray.at (i,j-1)); laplace.at (i,j)=saturate_cast (gray.at (i+1,j)+gray.at (i-1,j)+gray.at (i,j+1)+gray.at (i,j-1)-4*gray.at (i,j)); } } imshow("dst",dst); imshow("laplace",laplace); waitKey(0); return0; }
除此之外,還有一些其他的拉普拉斯核:
其他的拉普拉斯核.png
后續的文章會詳細介紹拉普拉斯相關的內容,以及如何在 OpenCV 中如何使用相關的函數,它的主要用途包括:
圖像銳化
邊緣檢測
模糊檢測
32.3 圖像的梯度及其性質
梯度是一個有大小有方向的向量。梯度的方向是函數變化最快的方向。
圖像梯度是指圖像某個像素在 x 和 y 兩個方向上的變化率(與相鄰像素比較),它是一個二維向量,由 X 軸的變化、Y 軸的變化這2個分量組成。
向量的幅度(長度)
幅度由 M(x,y) 表示,根據歐幾里得范數(L2 范數)可得:
其中, M(x,y) 是與原圖像大小相同的圖像,它是 x 和 y 在 f 的所有像素位置上變化時產生的,也被稱為梯度圖像。
求梯度的幅度時,由于公式(8)的計算量比較大,可以用 L1 范數來近似梯度的幅度:
梯度的方向角
經典的圖像梯度算法是考慮圖像的每個像素的某個鄰域內的灰度變化,利用邊緣臨近的一階或二階導數變化規律,對原始圖像中像素某個鄰域設置梯度算子(例如 Sobel 算子、Roberts 算子、Robinson 算子、Laplace 算子等等),通過圖像卷積實現對圖像兩個方向上梯度的計算。
Part33. 總結
本文介紹了圖像邊緣的含義,通過圖像邊緣引出圖像的梯度的概念。用數學的方式推導出圖像梯度并介紹了其相關的性質。梯度是一個基礎且重要的概念,遍布機器學習、深度學習的領域。
介紹它們是為了后續介紹各種圖像邊緣檢測算法做準備的,畢竟邊緣檢測是傳統的圖像分割算法。
審核編輯:湯梓紅
-
檢測算法
+關注
關注
0文章
119瀏覽量
25238 -
OpenCV
+關注
關注
31文章
635瀏覽量
41457 -
圖像邊緣檢測
+關注
關注
0文章
7瀏覽量
6550
原文標題:OpenCV 筆記(8):圖像的邊緣和梯度
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論