先讀為快,以結(jié)果為導(dǎo)向,本期介紹Canny圖像算法仿真驗證,后續(xù)將介紹canny算法原理與實現(xiàn),歡迎持續(xù)關(guān)注,公眾號設(shè)置星標,不錯過每一次推送~
一、簡要說明
1.1 算法流程
Canny邊緣檢測是一種非常流行的邊緣檢測算法,是John Canny在1986年提出的。它是一個多階段的算法,即由多個步驟構(gòu)成:圖像降噪、計算圖像梯度、非極大值抑制。
第一步,圖像降噪。我們知道梯度算子可以用于增強圖像,本質(zhì)上是通過增強邊緣輪廓來實現(xiàn)的,也就是說是可以檢測到邊緣的。但是,它們受噪聲的影響都很大。那么,我們第一步就是想到要先去除噪聲,因為噪聲就是灰度變化很大的地方,所以容易被識別為偽邊緣。
第二步,計算圖像梯度,得到可能邊緣。我們在前面的關(guān)于《圖像梯度》文章中有所介紹,計算圖像梯度能夠得到圖像的邊緣,因為梯度是灰度變化明顯的地方,而邊緣也是灰度變化明顯的地方。當然這一步只能得到可能的邊緣。因為灰度變化的地方可能是邊緣,也可能不是邊緣。這一步就有了所有可能是邊緣的集合。
第三步,非極大值抑制。通?;叶茸兓牡胤蕉急容^集中,將局部范圍內(nèi)的梯度方向上,灰度變化最大的保留下來,其它的不保留,這樣可以剔除掉一大部分的點。將有多個像素寬的邊緣變成一個單像素寬的邊緣。即“胖邊緣”變成“瘦邊緣”。
第四步,雙閾值篩選。通過非極大值抑制后,仍然有很多的可能邊緣點,進一步的設(shè)置一個雙閾值,即低閾值(low),高閾值(high)?;叶茸兓笥趆igh的,設(shè)置為強邊緣像素,低于low的,剔除。在low和high之間的設(shè)置為弱邊緣。進一步判斷,如果其領(lǐng)域內(nèi)有強邊緣像素,保留,如果沒有,剔除。
這樣做的目的是只保留強邊緣輪廓的話,有些邊緣可能不閉合,需要從滿足low和high之間的點進行補充,使得邊緣盡可能的閉合。
參考文章:https://blog.csdn.net/likezhaobin/article/details/6892176
1.2 驗證流程:
搭建一個視頻流Modelsim仿真,在基于FPGA視頻圖像算法開發(fā)過程中,最終目的是為了把攝像頭實時視頻數(shù)據(jù)經(jīng)過一系列的圖像算法,通過顯示設(shè)備顯示出來;在開發(fā)過程中,我們不能總是在FPGA板子上在線調(diào)試,一個是耗時時間長;另一個是不容易找出錯誤,因此,有必要模擬一個視頻時序,用來驗證算法,并有效的利用Matlab工具把靜態(tài)圖片“打散”保存到txt文本里,供Modesim讀取,然后通過Matalb“復(fù)現(xiàn)”處理后的文本。
二、操作步驟
第一步:獲取圖像
截取len圖片,格式為bmp
這里使用上張len圖設(shè)置了一種分辨率 640X480,如果不是,這里可用畫圖軟件打開圖片可以修改分辨率。
第二步:Matlab產(chǎn)成圖像
my_image_gen.m 讀取的len.bmp的彩色圖像,matlab運行后,將使用matlab函數(shù)灰度化的灰度圖像數(shù)據(jù)寫進,image_data.txt。
第三步:Modelsim仿真路徑設(shè)置
仿真工程打開的正確方式:
方法1:保證仿真工程正常打開,解壓后文件需要 放在新建和原路徑一樣的路徑。
方法2:不需要新建相同路徑,需要文本打開并修改仿真工程里的 *.mpf 絕對路徑。
方法3:使用自動仿真腳本。
第四步:開始仿真
1) 打開modelsim 仿真工程,找到work
2)然后找到tb_image_canny功程名,右鍵 simmulate 到仿真頁面
3)最后點擊黃色按鍵,全速仿真,結(jié)束會自動停止。
第五步:matlab 查看圖像
上一步仿真結(jié)果會出現(xiàn)三個txt文件:canny_data.txt 、Gs_data_out.txt、sobel_data_out.txt
直接運行my_image_show.m 即可
責任編輯:haq
-
仿真
+關(guān)注
關(guān)注
50文章
4026瀏覽量
133344 -
圖像
+關(guān)注
關(guān)注
2文章
1080瀏覽量
40378 -
Verilog
+關(guān)注
關(guān)注
28文章
1343瀏覽量
109932
原文標題:基于Verilog的Canny圖像算法仿真
文章出處:【微信號:FPGA_Study,微信公眾號:FPGA自習室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論