計算機視覺 OpenCV開源庫講解(邊緣提取)

2021-10-02 08:37:10 字數 2161 閱讀 6390

在圖形影象中,梯度和邊緣是非常相似的性質,在處理影象中,常常提取影象的邊緣加以運算,下面介紹乙個常用的邊緣提取運算元:canny運算元

canny的目標是找到乙個最優的邊緣檢測演算法,最優邊緣檢測的含義是:

好的檢測- 演算法能夠盡可能多地標識出影象中的實際邊緣。

好的定位- 標識出的邊緣要與實際影象中的實際邊緣盡可能接近。

最小響應- 影象中的邊緣只能標識一次,並且可能存在的影象雜訊不應標識為邊緣。

為了滿足這些要求canny使用了變分法,這是一種尋找滿足特定功能的函式的方法。最優檢測使用四個指 數函式項的和表示,但是它非常近似於高斯函式的一階導數。

一:降噪:用高斯濾波器平滑影象.

二:尋找梯度:用一階偏導有限差分計算梯度幅值和方向.

三:跟蹤邊緣:對梯度幅值進行非極大值抑制;用雙閾值演算法檢測和連線邊緣.

第一步:灰度化;

把彩色影象變成灰度影象,該部分是按照canny演算法通常處理的影象為灰度圖,如果獲取的彩色影象,那首先就得進行灰度化。

第二步:高斯濾波

對影象高斯濾波,影象高斯濾波的實現可以用兩個一維高斯核分別兩次加權實現,也就是先一維x方向卷積,得到的結果再一維y方向卷積。當然也可以直接通過乙個二維高斯核一次卷積實現。也就是二維卷積模板,由於水平有限,只說二維卷積模板怎麼算。

首先,一維高斯函式:

二維高斯函式:

模板中每乙個點的高斯係數可以由上面的公式計算,這樣得到的是不是最終的模板呢?答案不是,需要歸一化,也即是每乙個點的係數要除以所有係數之和,這樣才是最終的二維高斯模板。
第三步:計算梯度值和方向

影象的邊緣可以指向不同方向,因此經典canny演算法用了四個梯度運算元來分別計算水平,垂直和對角線方向的梯度。但是通常都不用四個梯度運算元來分別計算四個方向。常用的邊緣差分運算元(如rober,prewitt,sobel)計算水平和垂直方向的差分gx和gy。這樣就可以如下計算梯度模和方向:

梯度角度θ範圍從弧度-π到π,然後把它近似到四個方向,分別代表水平,垂直和兩個對角線方向(0°,45°,90°,135°)。可以以±iπ/8(i=1,3,5,7)分割,落在每個區域的梯度角給乙個特定值,代表四個方向之一。

這裡選擇sobel運算元計算梯度,相對於其他邊緣運算元,sobel運算元得出來的邊緣粗大明亮。

第四步:非極大值抑制

非極大值抑制是進行邊緣檢測的乙個重要步驟,通俗意義上是指尋找畫素點區域性最大值。沿著梯度方向,比較它前面和後面的梯度值進行了,若不是最大值,則捨去。

第五步:雙閾值的選取

一般的邊緣檢測演算法用乙個閾值來濾除雜訊或顏色變化引起的小的梯度值,而保留大的梯度值。canny演算法應用雙閾值,即乙個高閾值和乙個低閾值來區分邊緣畫素。如果邊緣畫素點梯度值大於高閾值,則被認為是強邊緣點。如果邊緣梯度值小於高閾值,大於低閾值,則標記為弱邊緣點。小於低閾值的點則被抑制掉。

第六步:滯後邊界跟蹤

強邊緣點可以認為是真的邊緣。弱邊緣點則可能是真的邊緣,也可能是雜訊或顏色變化引起的。為得到精確的結果,後者引起的弱邊緣點應該去掉。通常認為真實邊緣引起的弱邊緣點和強邊緣點是連通的,而又雜訊引起的弱邊緣點則不會。所謂的滯後邊界跟蹤演算法檢查乙個弱邊緣點的8連通領域畫素,只要有強邊緣點存在,那麼這個弱邊緣點被認為是真是邊緣保留下來。

canny引數詳解:

1,image單通道輸入影象.

2,edges單通道儲存邊緣的輸出影象

3,threshold1第乙個閾值

4,threshold2第二個閾值

5,aperture_sizesobel 運算元核心大小

6,為計算roi區域,本引數為預設引數,預設為false;

上**:

(一)OpenCV 開源計算機視覺庫介紹

opencv是乙個用於影象處理 分析 機器視覺方面的開源函式庫.無論你是做科學研究,還是商業應用,opencv都可以作為你理想的工具庫,因為,對於這兩者,它完全是免費的。該庫採用c及c 語言編寫,可以在windows,linux,mac osx系統上面執行。該庫的所有 都經過優化,計算效率很高,因為...

OpenCV 計算機視覺庫

opencv是乙個由因特爾公司支援的開源機器視覺庫,關於它的介紹,網上隨便一搜就車載斗量。這裡我不談視覺庫的主要內容,而是將這段時間來對它的使用心得作個簡單介紹,以啟發打算用這個庫的朋友的思路,與大家一起來分享。在學校的時候,雖然是影象處理研究方向,但真正具體的應用到影象的很多東西,還是在參加工作以...

OpenCV 開源的計算機視覺庫 (中文翻譯)

intel 開源計算機視覺庫 opencv 翻譯 hunnish,阿須數碼 opencv 是英特爾 開源計算機視覺庫。它由一系列 c 函式和少量 c 類構成,實現了影象處理和計算機視覺方面的很多通用演算法。opencv 是乙個跨平台的中 高層 api 構成,目前包括 300 多個 c 函式。它不依賴...