真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

為什么opencv的canny函數(shù)檢測(cè)邊緣的效果和matlab的不同

這篇文章將為大家詳細(xì)講解有關(guān)為什么opencv的canny函數(shù)檢測(cè)邊緣的效果和matlab的不同,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)公司是少有的成都網(wǎng)站制作、做網(wǎng)站、營(yíng)銷(xiāo)型企業(yè)網(wǎng)站、小程序開(kāi)發(fā)、手機(jī)APP,開(kāi)發(fā)、制作、設(shè)計(jì)、賣(mài)鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,從2013年成立,堅(jiān)持透明化,價(jià)格低,無(wú)套路經(jīng)營(yíng)理念。讓網(wǎng)頁(yè)驚喜每一位訪(fǎng)客多年來(lái)深受用戶(hù)好評(píng)

可以明顯的看出matlab的邊緣更為細(xì)膩。

首先回顧一下傳統(tǒng)的canny算法的主要步驟:

1、使用sobel差分算子求出灰度圖像的x和y方向?qū)?shù);

2、求出圖像各點(diǎn)梯度大小及其方向;

3、設(shè)置高低兩個(gè)閾值,梯度大于高閾值為強(qiáng)邊像素點(diǎn),大于低閾值為潛在可能是較弱的邊緣點(diǎn);

4、在經(jīng)過(guò)一次篩選剩下的強(qiáng)邊緣點(diǎn)中沿著梯度方向進(jìn)行非極大值抑制;

5、順著二次篩選后的強(qiáng)邊點(diǎn)尋找鄰近的弱邊點(diǎn)得到最終的邊緣。

opencv和matlab都基本按照以上步驟得到各自的canny 函數(shù),但一般來(lái)說(shuō)處理之前都先對(duì)圖像進(jìn)行模糊平滑,這樣得到的效果更好。opencv更注重實(shí)時(shí)性,所以連平滑都作為可選項(xiàng)放在函數(shù)外,而matlab則 更注重質(zhì)量,除了加入平滑操作外,還有其他一系列的優(yōu)化操作,以下逐項(xiàng)比較。

1、模糊平滑

這一項(xiàng)其實(shí)對(duì)生成的邊緣效果影響十分大,平滑的越流暢則生成的邊緣越圓滑,一 般使用高斯低通濾波;那么濾波器的大小以及高斯分布的方差是兩個(gè)關(guān)鍵的參數(shù),通過(guò)實(shí)驗(yàn)確定取什么值最優(yōu),但一般用5×5和方差為2的就可以 了,opencv的cvSmooth函數(shù)可以進(jìn)行平滑,一般都是使用輸入和輸出都是8位深的圖像,而matlab是把圖像轉(zhuǎn)換為浮點(diǎn)類(lèi)型后進(jìn)行平滑操作, 這樣一來(lái)從精度上說(shuō)matlab就已經(jīng)更勝一籌了,因?yàn)檫@直接決定后面的求導(dǎo)運(yùn)算得到的兩個(gè)方向?qū)?shù)的精度。

2、梯度

在sobel的運(yùn)用上兩者是一致的,但是求梯度的方向的算法兩者是截然不同 的,但本質(zhì)一樣,效果經(jīng)過(guò)筆者測(cè)試基本相同。在梯度的大小方面,opencv提供了歐式距離和哈密頓距離兩種度量方式,前者是平方和后開(kāi)方,后者是直接絕 對(duì)值的加和,opencv默認(rèn)使用后者,我們知道((x2+y2)/2)1/2>=(|x|+|y|)/2,以及|x|+|y|>=(x2+y2)1/2 所以理論上使用哈密頓距離也基本符合真實(shí)數(shù)值,但總歸是有精度上的差別,這也是為什么有人說(shuō)opencv的canny不如matlab好的第二個(gè)原因了,在cv.h里面可以通過(guò)修改CV_CANNY_L2_GRADIENT來(lái)進(jìn)行切換。

3、閾值

這里的閾值是梯度大小是否能夠通過(guò)的開(kāi)關(guān),opencv的閾值都采用手工設(shè)置的方式,而matlab是把所有點(diǎn)的強(qiáng)度作出直方圖,保留一定百分比的強(qiáng)邊緣,這個(gè)步驟的差別不會(huì)影響結(jié)果的質(zhì)量,但是在速度上當(dāng)然會(huì)有差別,這是速度和方便程度的矛盾。

4、薄邊效果

經(jīng)過(guò)非極大值抑制后的邊緣基本上是一到兩個(gè)像素點(diǎn)的寬度,最終希望得到一個(gè)線(xiàn) 寬的邊緣,opencv只是通過(guò)簡(jiǎn)單的判斷來(lái)防止并行或者并列出現(xiàn)兩個(gè)強(qiáng)邊像素,這種簡(jiǎn)單的薄邊手法會(huì)導(dǎo)致邊緣的斷裂,而matlab采用了Louisa Lam, Seong-Whan Lee, and Ching Y. Wuen, "Thinning Methodologies-A Comprehensive Survey," IEEE TrPAMI, vol. 14, no. 9, pp. 869-885, 1992. 這邊文章的方法進(jìn)行兩次薄邊處理,效果相當(dāng)好,所得的邊緣十分圓滑。

綜上所述,要想opencv的效果和matlab的差不多就必須在平 滑上下功夫,梯度的大小要用歐式距離度量,另外要加入matlab的薄邊算法,這樣一來(lái)處理時(shí)間大概會(huì)增加一倍,但也基本可以滿(mǎn)足實(shí)時(shí)處理。另外在一般視 覺(jué)應(yīng)用中可以把算法修改為一個(gè)閾值,去掉強(qiáng)弱邊連接這一步驟以提高速度.

關(guān)于為什么opencv的canny函數(shù)檢測(cè)邊緣的效果和matlab的不同就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


網(wǎng)頁(yè)題目:為什么opencv的canny函數(shù)檢測(cè)邊緣的效果和matlab的不同
分享路徑:http://weahome.cn/article/ishceo.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部