OpenCV:十六、Canny邊緣檢測(cè)算子

前言

在上一章中描述了Laplance邊緣檢測(cè)算子,詳細(xì)描述可點(diǎn)擊查看(http://www.reibang.com/writer#/notebooks/47386368/notes/82819100)

目標(biāo)

本章中枉长,將學(xué)習(xí):

  • Canny算子介紹
  • 相關(guān)API
  • 代碼演示

Canny算子介紹

Canny邊緣檢測(cè)是一種非常流行的邊緣檢測(cè)算法冀续,是John Canny在1986年提出的。它是一個(gè)多階段的算法必峰,即由多個(gè)步驟構(gòu)成洪唐。
1.圖像降噪:通常使用高斯模糊;
2.計(jì)算圖像梯度:Sobel/Scharr吼蚁;
3.非極大值抑制凭需;
4.高低閾值輸出二值圖像;
第一步:圖像降噪肝匆,我們知道梯度算子可以用于增強(qiáng)圖像粒蜈,本質(zhì)上是通過(guò)增強(qiáng)邊緣輪廓來(lái)實(shí)現(xiàn)的,也就是說(shuō)是可以檢測(cè)到邊緣的旗国。但是枯怖,它們受噪聲的影響都很大。那么能曾,我們第一步就是想到要先取出噪聲度硝,因?yàn)樵肼暰褪腔叶茸兓艽蟮牡胤剑匀菀妆蛔R(shí)別為偽邊緣寿冕。
第二步:計(jì)算圖像梯度蕊程,得到可能邊緣。計(jì)算圖像梯度能夠得到圖像的邊緣驼唱,因?yàn)樘荻仁腔叶茸兓黠@的地方藻茂,而邊緣也是灰度變化明顯的地方。當(dāng)然這一步只能得到可能的邊緣曙蒸。因?yàn)榛叶茸兓牡胤娇赡苁沁吘壈浦危部赡懿皇沁吘墶_@一步就有了所有可能是邊緣的集合纽窟。
第三步肖油,非極大值抑制。通潮鄹郏灰度變化的地方都比較集中森枪,將局部范圍內(nèi)的梯度方向上,灰度變化最大的保留下來(lái)审孽,其它的不保留县袱,這樣可以剔除掉一大部分的點(diǎn)。將有多個(gè)像素寬的邊緣變成一個(gè)單像素寬的邊緣佑力。即“胖邊緣”變成“瘦邊緣”式散。
第四步,雙閾值篩選打颤。通過(guò)非極大值抑制后暴拄,仍然有很多的可能邊緣點(diǎn)漓滔,進(jìn)一步的設(shè)置一個(gè)雙閾值,即低閾值(low)乖篷,高閾值(high)响驴。灰度變化大于high的撕蔼,設(shè)置為強(qiáng)邊緣像素豁鲤,低于low的,剔除鲸沮。在low和high之間的設(shè)置為弱邊緣琳骡。進(jìn)一步判斷,如果其領(lǐng)域內(nèi)有強(qiáng)邊緣像素诉探,保留日熬,如果沒(méi)有棍厌,剔除肾胯。


非極大值抑制.png

相關(guān)API

Canny(
InputArray src, // 8-bit的輸入圖像
OutputArray edges,// 輸出邊緣圖像, 一般都是二值圖像耘纱,背景是黑色
double threshold1,// 低閾值敬肚,常取高閾值的1/2或者1/3
double threshold2,// 高閾值
int aptertureSize,// Soble算子的size,通常3x3束析,取值3
bool L2gradient // (是否采用更精確的方式計(jì)算圖像梯度)選擇 true表示是L2來(lái)歸一化艳馒,否則用L1歸一化
)

關(guān)于L2gradient參數(shù):

  • 如果為true,計(jì)算圖像梯度的時(shí)候會(huì)使用(更加精確)L2 员寇;如果為false弄慰,計(jì)算圖像梯度的時(shí)候會(huì)使用L1; 默認(rèn)情況一般選擇是L1蝶锋,參數(shù)設(shè)置為false.陆爽。


    梯度參數(shù).png

代碼演示

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;
Mat src, gray_src, dst;
int t1_value = 50;
int max_value = 255;
const char* OUTPUT_TITLE = "Canny Result";
void Canny_Demo(int, void*);
int main(int argc, char** argv) {
    src = imread("D:/linuxkiss/images/leo.png");
    if (!src.data) {
        printf("could not load image...\n");
        return -1;
    }

    char INPUT_TITLE[] = "input image";
    namedWindow(INPUT_TITLE, CV_WINDOW_AUTOSIZE);
    namedWindow(OUTPUT_TITLE, CV_WINDOW_AUTOSIZE);
    imshow(INPUT_TITLE, src);

    cvtColor(src, gray_src, CV_BGR2GRAY);
    createTrackbar("Threshold Value:", OUTPUT_TITLE, &t1_value, max_value, Canny_Demo);
    Canny_Demo(0, 0);

    waitKey(0);
    return 0;
}

void Canny_Demo(int, void*) {
    Mat edge_output;
    blur(gray_src, gray_src, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);
    //------api調(diào)用------
    Canny(gray_src, edge_output, t1_value, t1_value * 2, 3, false);

    //dst.create(src.size(), src.type());
    //src.copyTo(dst, edge_output);// 將原圖的使用Canny算子做掩膜拷貝對(duì)應(yīng)位置像素,比較耗時(shí)
        //imshow(OUTPUT_TITLE, ~edge_output);// 顯示Canny算子處理后的取反圖像
    imshow(OUTPUT_TITLE, edge_output);// 顯示Canny算子處理后的圖像
}
Canny圖像.png

Canny取反圖像.png

彩色圖像.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扳缕,一起剝皮案震驚了整個(gè)濱河市慌闭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌躯舔,老刑警劉巖驴剔,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粥庄,居然都是意外死亡丧失,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門惜互,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)布讹,“玉大人科侈,你說(shuō)我怎么就攤上這事〕词拢” “怎么了臀栈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)挠乳。 經(jīng)常有香客問(wèn)我权薯,道長(zhǎng),這世上最難降的妖魔是什么睡扬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任盟蚣,我火速辦了婚禮,結(jié)果婚禮上卖怜,老公的妹妹穿的比我還像新娘屎开。我一直安慰自己,他們只是感情好马靠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布奄抽。 她就那樣靜靜地躺著,像睡著了一般甩鳄。 火紅的嫁衣襯著肌膚如雪逞度。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天妙啃,我揣著相機(jī)與錄音档泽,去河邊找鬼。 笑死揖赴,一個(gè)胖子當(dāng)著我的面吹牛馆匿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燥滑,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼渐北,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了突倍?” 一聲冷哼從身側(cè)響起腔稀,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎羽历,沒(méi)想到半個(gè)月后焊虏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秕磷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年诵闭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疏尿,死狀恐怖瘟芝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情褥琐,我是刑警寧澤锌俱,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站敌呈,受9級(jí)特大地震影響贸宏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜磕洪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一吭练、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧析显,春花似錦鲫咽、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至晰绎,卻和暖如春寓落,著一層夾襖步出監(jiān)牢的瞬間括丁,已是汗流浹背荞下。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留史飞,地道東北人尖昏。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像构资,于是被迫代替她去往敵國(guó)和親抽诉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容