0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenCV邊緣檢測(cè)算子Laplace、LoG詳解

OpenCV學(xué)堂 ? 來(lái)源: Java與Android技術(shù)棧 ? 2023-12-21 16:34 ? 次閱讀

在該系列的第八篇文章中,我們?cè)榻B過(guò)一階導(dǎo)數(shù)和二階導(dǎo)數(shù)對(duì)分析邊緣的結(jié)論:

一階導(dǎo)數(shù)通常在圖像中產(chǎn)生較粗的邊緣;

二階導(dǎo)數(shù)對(duì)精細(xì)細(xì)節(jié),如細(xì)線、孤立點(diǎn)和噪聲有較強(qiáng)的響應(yīng);

二階導(dǎo)數(shù)在灰度斜坡和灰度臺(tái)階過(guò)渡處會(huì)產(chǎn)生雙邊緣響應(yīng);

二階導(dǎo)數(shù)的符號(hào)可用于確定邊緣的過(guò)渡是從亮到暗還是從暗到亮。

一階導(dǎo)數(shù)算子(例如 Sobel 算子)通過(guò)對(duì)圖像求導(dǎo)來(lái)確定圖像的邊緣,數(shù)值絕對(duì)值較高的點(diǎn)對(duì)應(yīng)了圖像的邊緣。如果繼續(xù)求二階導(dǎo),原先數(shù)值絕對(duì)值較高的點(diǎn)對(duì)應(yīng)了過(guò)零點(diǎn)。因此,也可以通過(guò)找到二階導(dǎo)數(shù)的過(guò)零點(diǎn)來(lái)檢測(cè)邊緣。在某些情況下,找二階導(dǎo)數(shù)的過(guò)零點(diǎn)可能更容易。

09e1709a-97fa-11ee-8b88-92fbcf53809c.jpg

一階導(dǎo)數(shù)和二階導(dǎo)數(shù).png

Part11. Laplace 算子

之前我們?cè)榻B過(guò)二階導(dǎo)數(shù)的 Laplace 算子可以通過(guò)差分近似來(lái)簡(jiǎn)化,其公式為

它的卷積核:

09e8be5e-97fa-11ee-8b88-92fbcf53809c.jpg

拉普拉斯核.png

這是它的 4 鄰域卷積核。

11.1 Laplace 算子的擴(kuò)展

Laplace 算子是具有旋轉(zhuǎn)不變性的各向同性的算子。

將 4 鄰域的 Laplace 算子旋轉(zhuǎn) 45° 后,與原算子相加,就可以得到 8 鄰域的算子。

09f4398c-97fa-11ee-8b88-92fbcf53809c.jpg

擴(kuò)展的拉普拉斯算子.png

這是它的 8 鄰域卷積核。這個(gè)算子表示一個(gè)像素周?chē)蝗?8 個(gè)像素的和與中間像素 8 倍的差,作為拉普拉斯計(jì)算結(jié)果。

另外,還有兩個(gè)拉普拉斯卷積核,分別是對(duì) 4 鄰域卷積核和 8 鄰域卷積核取反。

0a00edf8-97fa-11ee-8b88-92fbcf53809c.jpg

擴(kuò)展的拉普拉斯算子2.png

21.2 圖像的模糊檢測(cè)

使用拉普拉斯變換對(duì)圖像進(jìn)行模糊檢測(cè)的步驟大致如下:

對(duì)圖像進(jìn)行拉普拉斯變換,檢測(cè)水平和垂直邊緣

然后對(duì)拉普拉斯變換后輸出的圖像求方差

如果圖像足夠清晰,輸出圖像的方差會(huì)大于給定閾值

如果圖像相對(duì)模糊,則拉普拉斯變換在圖像中并不能檢測(cè)到足夠的細(xì)節(jié),邊緣就越少,從而導(dǎo)致輸出圖像的方差小于給定閾值

該過(guò)程需要選擇合適的閾值。

拉普拉斯算子能突出顯示圖像中包含快速梯度變化的區(qū)域,這些區(qū)域往往與邊緣有關(guān)。因此,如果一幅圖像的方差較高,說(shuō)明圖像中存在廣泛的邊緣響應(yīng),包括類(lèi)邊和非類(lèi)邊,這是一幅正常聚焦圖像的代表。但如果方差很低,那么表明圖像中的邊緣響應(yīng)很小,幾乎沒(méi)有邊緣存在。因此,通過(guò)比較方差與預(yù)設(shè)閾值的大小,可以判斷圖像是否模糊。

按照上面的步驟實(shí)現(xiàn)了一個(gè)模糊檢測(cè)的函數(shù):

boolisImageBlurry(constchar*inputFile,doublethreshold)
{
Matsrc=imread(inputFile);
if(src.empty()){
printf("Imagenotloaded
");
returnfalse;
}

Matgray;
cvtColor(src,gray,COLOR_BGR2GRAY);
Matdst,absDst;
cv::Laplacian(gray,dst,CV_16S,3);
cv::convertScaleAbs(dst,absDst);

Matmean,stddev;
doublem=0,sd=0;
meanStdDev(absDst,mean,stddev);
m=mean.at(0,0);
sd=stddev.at(0,0);
doubleresult=sd*sd;
std::cout<

然后寫(xiě)一個(gè)程序來(lái)判斷一下這張圖是否是模糊的

模糊的手機(jī)圖片.jpeg

intmain(intargc,char*argv[])
{
stringfileName=".../test.jpeg";
boolresult=isImageBlurry(fileName.c_str(),11.0);
cout<

輸出結(jié)果:

m:2.5213
StdDev:6.31374
result=1

說(shuō)明是模糊的圖片。

Laplace 算子對(duì)噪聲敏感,通常不適用于存在噪聲的圖像。

Part22. LoG 算子

LoG(Laplacian of Gaussian)邊緣檢測(cè)算子是 David Courtnay Marr 和 Ellen Hildreth 在 1980 年共同提出的,也稱(chēng)為 Marr-Hildreth 算子,它根據(jù)圖像的信噪比來(lái)求檢測(cè)邊緣的最優(yōu)濾波器。該算法先對(duì)圖像進(jìn)行高斯平滑處理,然后再與 Laplacian 算子進(jìn)行卷積。稍后來(lái)解釋為何是這樣的。

先來(lái)回顧一下二維高斯函數(shù)的公式:

高斯函數(shù)的一階導(dǎo)數(shù)和二階導(dǎo)數(shù),在很多算子中都會(huì)用到。例如一階導(dǎo)數(shù)應(yīng)用在 Canny 算子,二階導(dǎo)數(shù)應(yīng)用在 LoG 算子等等。

簡(jiǎn)單推導(dǎo)一下它的一階導(dǎo)數(shù):

同理:

還有推導(dǎo)一下它的二階導(dǎo)數(shù):

同理:

將高斯函數(shù)代入拉普拉斯算子,可得 LoG 算子:

Marr-Hildreth 算法如下:

首先讓 LoG 核與一幅輸入圖像卷積:

尋找 g(x,y) 的過(guò)零點(diǎn)來(lái)確定 f(x,y) 的邊緣位置。因?yàn)槔绽棺儞Q和卷積都是線性運(yùn)算,因此上式可以改成

其中,f(x,y) 是輸入圖像,g(x,y) 是輸出圖像。

這樣正好解釋了之前說(shuō)的,該算法先對(duì)圖像進(jìn)行高斯平滑處理,然后再與 Laplacian 算子進(jìn)行卷積。因?yàn)橄仁褂酶咚篂V波器對(duì)圖像進(jìn)行平滑處理,可以減少噪聲和細(xì)節(jié),然后使用拉普拉斯算子對(duì)濾波后的圖像進(jìn)行邊緣檢測(cè)。

它的優(yōu)點(diǎn)是可以有效去除噪聲,同時(shí)保留圖像中的真實(shí)邊緣。相比 Laplace 算子,LoG 算子具有更好的邊緣定位能力和抗噪聲。但是它也存在一些缺點(diǎn),計(jì)算量相對(duì)較大。

下圖是負(fù) LoG 算子的三維圖像,看上去很像“墨西哥草帽”。所以,在業(yè)界也被稱(chēng)為墨西哥草帽小波(Mexican hat wavelet)。

0a2cb924-97fa-11ee-8b88-92fbcf53809c.jpg

負(fù) LoG 算子的三維圖像.png

Mexican Hat.jpg

負(fù) LoG 算子可用 5*5 的模版近似表示

0a5daad4-97fa-11ee-8b88-92fbcf53809c.jpg

LoG卷積核.png

下面用高斯模糊和拉普拉斯變換來(lái)實(shí)現(xiàn) LoG :

intmain(intargc,char*argv[])
{
Matsrc=imread(".../street.jpg");
imshow("src",src);

Matdst,gray,edge;
cv::GaussianBlur(src,dst,cv::Size(3,3),0,0);//高斯模糊去除噪聲
cv::cvtColor(dst,gray,cv::COLOR_BGR2GRAY);//灰度化
cv::Laplacian(gray,edge,CV_16S,3);//使用拉普拉斯算子提取邊緣
cv::convertScaleAbs(edge,edge);

imshow("LoG",edge);

waitKey(0);
return0;
}

Part33. 總結(jié)

本文介紹了 Laplace 算子、LoG 算子,它們都是二階導(dǎo)數(shù)的邊緣算子。

特別是 LoG 算子在 Laplace 算子的基礎(chǔ)上引入了高斯濾波,可以在一定程度上克服噪聲的影響。但它仍舊有一定的局限性,不過(guò)這種思想的引入對(duì)后續(xù)圖像特征研究起到了積極作用,被很多后續(xù)的算法所采納。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1075

    瀏覽量

    40266
  • 邊緣檢測(cè)
    +關(guān)注

    關(guān)注

    0

    文章

    91

    瀏覽量

    18160
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    622

    瀏覽量

    41088
  • 算子
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    7247

原文標(biāo)題:OpenCV 筆記(10):常用的邊緣檢測(cè)算子—— Laplace、LoG

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于Canny邊緣檢測(cè)算子的圖像檢索算法

    【摘要】:針對(duì)依賴傳統(tǒng)Canny算子的基于邊緣的圖像檢索系統(tǒng)所存在的不足,提出一種基于Canny邊緣檢測(cè)的圖像檢索算法。使用改進(jìn)的Canny算子
    發(fā)表于 04-24 10:03

    【DragonBoard 410c試用體驗(yàn)】之OpenCV中canny算子邊緣檢測(cè)

    方法來(lái)對(duì)這些點(diǎn)進(jìn)行取舍。實(shí)際工程中,常用的方法是通過(guò)閾值化方法來(lái)檢測(cè)。Canny 算子的目標(biāo)是找到一個(gè)最優(yōu)的邊緣檢測(cè)算法,讓我們看一下最優(yōu)邊緣
    發(fā)表于 09-11 23:24

    基于Qualcomm FastCv的邊緣檢測(cè)算詳解

    ,Canny,Laplacian,Log 以及二階方向?qū)?shù)等算子檢測(cè)法。1.邊緣檢測(cè)在圖像中,邊緣
    發(fā)表于 09-21 11:45

    邊緣檢測(cè)算法分為哪幾種?它們有何不同?

    邊緣檢測(cè)是什么?邊緣檢測(cè)算子有哪些?邊緣檢測(cè)算法分為哪幾種?它們有何不同?
    發(fā)表于 05-31 06:57

    邊緣檢測(cè)的幾種微分算子

    一、邊緣檢測(cè)邊緣檢測(cè)的幾種微分算子:一階微分算子:Roberts、Sobel、Prewitt二階
    發(fā)表于 07-26 08:29

    基于形態(tài)灰度邊緣檢測(cè)算法的一種改進(jìn)

    使用形態(tài)學(xué)的思想進(jìn)行圖像的邊緣檢測(cè),提出了在一次形態(tài)處理中使用雙結(jié)構(gòu)元的一系列一般性形態(tài)邊緣檢測(cè)算子和抗噪型形態(tài)邊緣
    發(fā)表于 04-19 19:26 ?32次下載

    基于Canny邊緣檢測(cè)算子的圖像檢索算法

      針對(duì)依賴傳統(tǒng)Canny算子的基于邊緣的圖像檢索系統(tǒng)所存在的不足,提出一種基于Canny邊緣檢測(cè)的圖像檢索算法。使用改進(jìn)的Canny算子
    發(fā)表于 02-11 11:22 ?28次下載

    基于高斯濾波與矢量微分算子的小波多尺度邊緣檢測(cè)算

    基于高斯濾波與矢量微分算子的小波多尺度邊緣檢測(cè)算法 摘 要: 采用一種基于高斯濾波與矢量微分算子相結(jié)合的近似小波多尺度邊緣算法. 該算法分
    發(fā)表于 04-23 14:58 ?17次下載

    基于改進(jìn)的Laplacian算子圖像邊緣檢測(cè)

    分析了圖像邊緣特性以及Laplacian算子檢測(cè)圖像邊緣的基本原理!并對(duì)經(jīng)典Laplacian算子進(jìn)行改進(jìn)! 提出了一種新的
    發(fā)表于 05-17 10:46 ?29次下載
    基于改進(jìn)的Laplacian<b class='flag-5'>算子</b>圖像<b class='flag-5'>邊緣</b><b class='flag-5'>檢測(cè)</b>

    邊緣檢測(cè)綜合示例_OpenCV3版書(shū)本配套示例程序60

    OpenCV3編程入門(mén)》書(shū)本配套源代碼:邊緣檢測(cè)綜合示例,邊緣檢測(cè)綜合示例——Canny算子,
    發(fā)表于 06-06 15:25 ?0次下載

    基于改進(jìn)Canny的圖像邊緣檢測(cè)算

    劃分為階躍型和屋頂型兩種類(lèi)型:階躍型邊緣兩邊的灰度值有很大的差別;屋頂型邊緣存在于灰度值從增加到逐漸減少的變化轉(zhuǎn)折點(diǎn)上;邊緣檢測(cè)的經(jīng)典算法有Roberts
    發(fā)表于 11-02 15:15 ?19次下載
    基于改進(jìn)Canny的圖像<b class='flag-5'>邊緣</b><b class='flag-5'>檢測(cè)算</b>法

    Robinson邊緣檢測(cè)算

    傳統(tǒng)的Canny邊緣檢測(cè)算子是一種含有最優(yōu)化思想的算子,它具有較高的檢測(cè)精度,可以達(dá)到單像素級(jí),但是因?yàn)樗旧韺?duì)噪聲比較敏感,所以需要先利用Gauss濾波、均值濾波、中值濾波等濾波器進(jìn)
    發(fā)表于 12-01 14:13 ?0次下載

    圖像處理邊緣檢測(cè)算子分類(lèi)

    邊緣檢測(cè)類(lèi)似微分處理,它檢測(cè)的變化的部分,必然對(duì)噪聲和圖像的亮度變化都有相應(yīng)處理。因此,把均值處理加入到邊緣檢測(cè)過(guò)程中一定要非常謹(jǐn)慎。我們可
    的頭像 發(fā)表于 08-17 15:54 ?7757次閱讀

    基于Laplace-Beltrami算子的特征點(diǎn)檢測(cè)算

    針對(duì)三維模型的特征點(diǎn)檢測(cè)問(wèn)題,提出一種基于 Laplace- Beltrami算子的特征點(diǎn)檢測(cè)算法。對(duì)于給定的三維網(wǎng)格模型,首先構(gòu)造離散 Lapla
    發(fā)表于 04-21 13:50 ?11次下載
    基于<b class='flag-5'>Laplace</b>-Beltrami<b class='flag-5'>算子</b>的特征點(diǎn)<b class='flag-5'>檢測(cè)算</b>法

    關(guān)于邊緣檢測(cè)算子的實(shí)現(xiàn)原理

    Canny 邊緣檢測(cè)算法 是 John F. Canny 于 1986年開(kāi)發(fā)出來(lái)的一個(gè)多級(jí)邊緣檢測(cè)算法,此算法被很多人認(rèn)為是邊緣
    的頭像 發(fā)表于 01-05 11:41 ?1319次閱讀