OpenGL ES入門08-圖像邊緣檢測

前言

本文是關(guān)于OpenGL ES的系統(tǒng)性學(xué)習(xí)過程,記錄了自己在學(xué)習(xí)OpenGL ES時的收獲。
這篇文章的目標(biāo)是學(xué)習(xí)OpenGL ES 2.0中的像素點(diǎn)的代數(shù)運(yùn)算。
環(huán)境是Xcode8.1+OpenGL ES 2.0
目前代碼已經(jīng)放到github上面,OpenGL ES入門08-圖像邊緣檢測

歡迎關(guān)注我的 OpenGL ES入門專題

概述

邊緣檢測是圖像處理和計算機(jī)視覺中的基本問題,邊緣檢測的目的是標(biāo)識數(shù)字圖像中亮度變化明顯的點(diǎn)。圖像屬性中的顯著變化通常反映了屬性的重要事件和變化。 這些包括:1、深度上的不連續(xù);2、表面方向不連續(xù);3、物質(zhì)屬性變化;4、場景照明變化。 邊緣檢測是圖像處理和計算機(jī)視覺中,尤其是特征提取中的一個研究領(lǐng)域。

Canny 算子

Canny邊緣檢測算子是John F. Canny于 1986 年開發(fā)出來的一個多級邊緣檢測算法。Canny算子是一個具有濾波,增強(qiáng),檢測的多階段的優(yōu)化算子,在進(jìn)行處理前,Canny算子先利用高斯平滑濾波器來平滑圖像以除去噪聲,Canny分割算法采用一階偏導(dǎo)的有限差分來計算梯度幅值和方向,在處理過程中,Canny算子還將經(jīng)過一個非極大值抑制的過程,最后Canny算子還采用兩個閾值來連接邊緣。

Canny算子求邊緣點(diǎn)具體算法步驟如下

  • 用高斯濾波器平滑圖像。
  • 用一階偏導(dǎo)有限差分計算梯度幅值和方向
  • 對梯度幅值進(jìn)行非極大值抑制
  • 用雙閾值算法檢測和連接邊緣.

Laplacian 算子

Laplace算子是一種各向同性算子,二階微分算子,在只關(guān)心邊緣的位置而不考慮其周圍的象素灰度差值時比較合適。Laplace算子對孤立象素的響應(yīng)要比對邊緣或線的響應(yīng)要更強(qiáng)烈,因此只適用于無噪聲圖象。存在噪聲情況下,使用Laplacian算子檢測邊緣之前需要先進(jìn)行低通濾波。所以,通常的分割算法都是把Laplacian算子和平滑算子結(jié)合起來生成一個新的模板。
二維函數(shù)f(x,y)的拉普拉斯是一個二階的微分,定義為:

二階微分

其中:


二階的微分

拉普拉斯算子還可以表示成模板的形式:


拉普拉斯算子

拉普拉斯算子擴(kuò)展模板


擴(kuò)展模板形式

Sobel 算子

Sobel算子是計算機(jī)視覺領(lǐng)域的一種重要處理方法。主要用于獲得數(shù)字圖像的一階梯度,常見的應(yīng)用和物理意義是邊緣檢測。在技術(shù)上,它是一個離散的一階差分算子,用來計算圖像亮度函數(shù)的一階梯度之近似值。在圖像的任何一點(diǎn)使用此算子,將會產(chǎn)生該點(diǎn)對應(yīng)的梯度矢量或是其法矢量。Sobel算子并沒有將圖像的主題與背景嚴(yán)格地區(qū)分開來,也就是Sobel算子并沒有基于圖像灰度進(jìn)行處理,由于Sobel算子并沒有嚴(yán)格地模擬人的視覺生理特征,所以提取的圖像輪廓有時并不能令人滿意。

檢測水平邊沿橫向模板


橫向模板

檢測垂直平邊沿縱向模板


縱向模板

圖像梯度的大小


梯度公式

梯度方向


梯度方向公式

對于給定的圖像


1351141152_6697.png

近似公式的計算的結(jié)果


1351141247_8193.png

參考資料

《OpenCV3編程入門》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容