畢業(yè)論文---基于mfc的圖像邊緣檢測(cè)提取算法仿真_第1頁(yè)
已閱讀1頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  畢 業(yè) 設(shè) 計(jì)(論 文)</p><p> 基于MFC的圖像邊緣檢測(cè)提取算法仿真</p><p>  基于MFC的圖像邊緣檢測(cè)提取算法仿真</p><p>  [摘要] 本論文是要通過(guò)計(jì)算機(jī)仿真的方法來(lái)實(shí)現(xiàn)對(duì)圖像邊緣的提取,并生成新的圖像,新的圖像只含有邊緣,無(wú)其他的顏色信息。在通過(guò)用計(jì)算機(jī)進(jìn)行仿真的過(guò)程中,演示仿真系統(tǒng)是使用VC++6.0來(lái)

2、編寫(xiě)的,應(yīng)用了面向?qū)ο蟮木幊趟枷?,并使用C++語(yǔ)言實(shí)現(xiàn)。本論文研究的圖像是Windows操作系統(tǒng)中的標(biāo)準(zhǔn)圖像文件格式(*.bmp)。本論文從介紹MFC編程的基礎(chǔ)知識(shí),然后又分析了bmp圖像的內(nèi)部結(jié)構(gòu)。分析比較了六個(gè)常用邊緣檢測(cè)算子,最后又分析了邊緣提取算子。通過(guò)對(duì)各個(gè)算子的分析比較,最后應(yīng)用在邊緣提取上的邊緣檢測(cè)算子是Kirsch算子,其他幾個(gè)算子在應(yīng)用后邊緣檢測(cè)后效果一般,但是進(jìn)行邊緣提取后,效果非常不清晰,只有Kirsch算子較好的

3、反應(yīng)了邊緣,我所做的邊緣檢測(cè),是在不分析圖像的噪聲,和其他因素的條件下進(jìn)行的。</p><p>  [關(guān)鍵詞] 邊緣檢測(cè) 邊緣提取 算子 圖像</p><p>  Based on MFC image edge detection extraction algorithm simulation</p><p>  [Abstract] This

4、 thesis is to through the computer simulation method to realize the image edge extraction, and generate new image, the new image contains only edge, no other color information. With a computer simulation in through the p

5、rocess, demo simulation system is using vc ++6.0 to write, applied the object-oriented programming ideas, and use the c++ language implementation. This paper studies the image is Windows operating system standard image f

6、ile format (*. BMP). This paper introduces t</p><p>  [Key words] edge detection pick operator image</p><p><b>  目 錄</b></p><p><b>  目 錄I</b><

7、;/p><p><b>  第1章 緒論1</b></p><p><b>  1.1引言1</b></p><p>  1.2邊緣與邊緣檢測(cè)1</p><p>  1.3 邊緣檢測(cè)的研究背景及意義1</p><p>  1.4 課題發(fā)展?fàn)顩r和目標(biāo)2</p>

8、;<p>  第2章 程序框架及編程基礎(chǔ)知識(shí)介紹3</p><p>  2.1 MFC概述3</p><p>  2.2 MFC類庫(kù)3</p><p>  2.3 程序設(shè)計(jì)框架:4</p><p>  第3章 VC++圖像處理程序的設(shè)計(jì)6</p><p>  3.1數(shù)字圖像處理概述6<

9、;/p><p>  3.2圖像和顏色系統(tǒng)7</p><p>  3.2.1灰度圖像和彩色圖像8</p><p><b>  3.3位圖8</b></p><p>  第4章 經(jīng)典的邊緣檢測(cè)提取方法及實(shí)現(xiàn)14</p><p>  4.1 Roberts算子14</p><

10、p>  4.2 Prewitt 算子和 Sobel 算子15</p><p>  4.3 Kirsch算子17</p><p>  4.4 拉普拉斯算子17</p><p>  4.5 高斯拉普拉斯邊緣檢測(cè)算子19</p><p>  4.6邊緣檢測(cè)算子的實(shí)現(xiàn)20</p><p>  4.7算子的結(jié)果比

11、較23</p><p>  第五章 邊緣提取25</p><p>  5.1邊緣提取的功能與原理25</p><p>  5.2 邊緣提取的效果與算法實(shí)現(xiàn)26</p><p><b>  結(jié) 論28</b></p><p><b>  致 謝29</b><

12、;/p><p><b>  參考文獻(xiàn)30</b></p><p><b>  第1章 緒論</b></p><p><b>  1.1引言</b></p><p>  邊緣檢測(cè)是圖像處理的一個(gè)重要分支,研究為完成某一任務(wù)需要從圖像中提取哪些有用的信息,以及如何利用這些信息解釋圖

13、像。邊緣檢測(cè)技術(shù)對(duì)于處理數(shù)字圖像非常重要,因?yàn)檫吘壥撬崛∧繕?biāo)和背景的分界線,提取出邊緣才能將目標(biāo)和背景區(qū)分開(kāi)來(lái)。在圖像中,邊界表明一個(gè)特征區(qū)域的終結(jié)和另一個(gè)特征區(qū)域的開(kāi)始,邊界所分開(kāi)區(qū)域的內(nèi)部特征或?qū)傩允且恢碌?,而不同的區(qū)域內(nèi)部的特征或?qū)傩允遣煌?,邊緣檢測(cè)正是利用物體和背景在某種圖像特性上的差異來(lái)實(shí)現(xiàn)的,這些差異包括灰度,顏色或者紋理特征。邊緣檢測(cè)實(shí)際上就是檢測(cè)圖像特征發(fā)生變化的位置。</p><p>  

14、由于噪聲和模糊的存在,檢測(cè)到的邊界可能會(huì)變寬或在某些點(diǎn)處發(fā)生間斷,因此,邊界檢測(cè)包括兩個(gè)基本內(nèi)容:首先抽取出反映灰度變化的邊緣點(diǎn),然后剔除某些邊界點(diǎn)或填補(bǔ)邊界間斷點(diǎn),并將這些邊緣連接成完整的線。邊緣檢測(cè)的方法大多數(shù)是基于方向?qū)?shù)掩模求卷積的方法。導(dǎo)數(shù)算子具有突出灰度變化的作用,對(duì)圖像運(yùn)用導(dǎo)數(shù)算子,灰度變化較大的點(diǎn)處算得的值比較高,因此可將這些導(dǎo)數(shù)值作為相應(yīng)點(diǎn)的邊界強(qiáng)度,通過(guò)設(shè)置門(mén)限的方法,提取邊界點(diǎn)集。[3]</p>&l

15、t;p>  1.2邊緣與邊緣檢測(cè)</p><p>  直觀上邊緣是一組相連像素的集合,它們位于兩個(gè)不同區(qū)域之間,而從根本上說(shuō)邊緣是基于某種算法得到的具有特定特征的點(diǎn)的集合。由此看出邊緣的定義與算法有關(guān),同時(shí)邊緣的定義以像素灰度的躍變?yōu)榛A(chǔ)。</p><p>  圖像上顏色相近的像素連在一起形成了不同的區(qū)域而不同的區(qū)域間的邊緣表現(xiàn)為顏色灰度的躍變。邊緣檢測(cè)就是利用微分等方法通過(guò)對(duì)灰度躍

16、變的分析尋找圖像上區(qū)域邊緣的技術(shù),對(duì)數(shù)字圖像,通常使用卷積或類似卷積的方法來(lái)實(shí)現(xiàn)對(duì)灰度的分析。</p><p>  1.3 邊緣檢測(cè)的研究背景及意義</p><p>  利用計(jì)算機(jī)進(jìn)行圖像處理有兩個(gè)目的:一是生產(chǎn)更適合人類觀察和識(shí)別的圖像;二是希望能由計(jì)算機(jī)自動(dòng)識(shí)別和理解圖像。無(wú)論為了哪種目的,圖像處理中關(guān)鍵的一步就是對(duì)包含大量的各式各樣景物信息的圖像進(jìn)行分解。分解最終結(jié)果是圖像被分解成一

17、些具有某種特征的最小成分,稱為圖像的基元,相對(duì)于整幅圖像來(lái)說(shuō),這種基元比較容易處理。</p><p>  圖像的特征是指圖像場(chǎng)中可用作標(biāo)志的屬性。它可以分為圖像的統(tǒng)計(jì)特征和圖像的視覺(jué)特征。</p><p>  圖像的統(tǒng)計(jì)特征是指一些人為定義的特征,通過(guò)變換才能得到如圖像的直方圖、矩頻譜等。圖像的視覺(jué)特征是指人的視覺(jué)可直接感受到自然特征,如區(qū)域的亮度、紋理或輪廓等,利用這兩類特征把圖像分解成

18、一系列有意的目標(biāo)或區(qū)域的過(guò)程稱為圖像的分割。</p><p>  圖像的邊緣是圖像的最基本特征。所謂邊緣是指周?chē)鷪D像灰度有階躍變化的那些像素的集合,邊緣廣泛存在于物體與背景之間,物體與物體之間,基元與基元之間。因此邊緣檢測(cè)是圖像分割所依賴的重要特征。[2]</p><p>  1.4 課題發(fā)展?fàn)顩r和目標(biāo)</p><p>  邊緣檢測(cè)的研究多年來(lái)在業(yè)內(nèi)被人們高度重視。

19、從邊緣檢測(cè)研究的歷史和現(xiàn)狀來(lái)看,邊緣檢測(cè)有幾個(gè)明顯的趨勢(shì):1、對(duì)原有的算法不斷改進(jìn)。2、新方法、新概念的引入和多種方法的有效綜合運(yùn)用。3、對(duì)特殊圖像邊緣檢測(cè)的研究越來(lái)越得到重視,目前有很多針對(duì)立體圖像、彩色圖像、多光譜圖像、合成孔徑雷達(dá)圖像、深度圖像、紋理圖像、超聲圖像、計(jì)算機(jī)斷層掃描、磁共振圖像、共聚焦激光掃描顯微鏡圖像以及運(yùn)動(dòng)圖像等特殊圖像的邊緣檢測(cè)技術(shù)的研究。4、對(duì)圖像邊緣檢測(cè)評(píng)價(jià)的研究和對(duì)評(píng)價(jià)系統(tǒng)的研究越來(lái)越得到關(guān)注。5、將現(xiàn)有

20、的算法應(yīng)用于工程實(shí)際中。</p><p>  在此本可以將使用VC++6.0編程設(shè)計(jì)軟件對(duì)邊緣檢測(cè)技術(shù)的的各個(gè)算法進(jìn)行仿真編程,來(lái)分析和比較各個(gè)算法的功能和效果,以便更深入的了解圖像邊緣檢測(cè)技術(shù)。</p><p>  第2章 程序框架及編程基礎(chǔ)知識(shí)介紹</p><p><b>  2.1 MFC概述</b></p><p&

21、gt;  MFC,微軟基礎(chǔ)類(Microsoft Foundation Classes),實(shí)際上是微軟提供的,用于在C++環(huán)境下編寫(xiě)應(yīng)用程序的一個(gè)框架和引擎,VC++是Windows下開(kāi)發(fā)人員使用的專業(yè)C++ SDK(SDK,Standard SoftWare Develop Kit,專業(yè)軟件開(kāi)發(fā)平臺(tái)),MFC就是掛在它之上的一個(gè)輔助軟件開(kāi)發(fā)包,MFC作為與VC++血肉相連的部分(注意C++和VC++的區(qū)別:C++是一種程序設(shè)計(jì)語(yǔ)言,是

22、一種大家都承認(rèn)的軟件編制的通用規(guī)范,而VC++只是一個(gè)編譯器,或者說(shuō)是一種編譯器+源程序編輯器的IDE。MFC是Win API與C++的結(jié)合,API,即微軟提供的Windows下應(yīng)用程序的編程語(yǔ)言接口,是一種軟件編程的規(guī)范,但不是一種程序開(kāi)發(fā)語(yǔ)言本身,可以允許用戶使用各種各樣的第三方(如我是一方,微軟是一方,Borland就是第三方)的編程語(yǔ)言來(lái)進(jìn)行對(duì)Windows下應(yīng)用程序的開(kāi)發(fā),使這些被開(kāi)發(fā)出來(lái)的應(yīng)用程序能在Windows下運(yùn)行,比

23、如VB,VC++,Java,Delhpi編程語(yǔ)言函數(shù)本質(zhì)上全部源于API,因此用它們開(kāi)發(fā)出來(lái)的應(yīng)用程序都能工作在Windows的消</p><p><b>  2.2 MFC類庫(kù)</b></p><p>  CWnd:窗口,它是大多數(shù)“看得見(jiàn)的東西”的父類(Windows里幾乎所有看得見(jiàn)的東西都是一個(gè)窗口,大窗口里有許多小窗口),比如視圖CView、框架窗口CFram

24、eWnd、工具條CToolBar、對(duì)話框CDialog、按鈕CButton,一個(gè)例外是菜單(CMenu)不是從窗口派生的。該類很大,一開(kāi)始也不必學(xué),知道就行了。</p><p>  CDocument文檔,負(fù)責(zé)內(nèi)存數(shù)據(jù)與磁盤(pán)的交互。最重要的是OnOpenDocument(讀入),OnSaveDocument(寫(xiě)盤(pán)),Serialize(讀寫(xiě))。</p><p>  CView視圖,負(fù)責(zé)內(nèi)存

25、數(shù)據(jù)與用戶的交互。包括數(shù)據(jù)的顯示、用戶操作的響應(yīng)(如菜單的選取、鼠標(biāo)的響應(yīng))。最重要的是OnDraw(重畫(huà)窗口),通常用CWnd::Invalidate()來(lái)啟動(dòng)它。另外,它通過(guò)消息映射表處理菜單、工具條、快捷鍵和其他用戶消息。你自己的許多功能都要加在里面,你打交道最多的就是它。 </p><p>  CDC設(shè)備文本。無(wú)論是顯示器還是打印機(jī),都是畫(huà)圖給用戶看。這圖就抽象為CDC。CDC與其他GDI(圖形設(shè)備接口)

26、一起,完成文字和圖形、圖像的顯示工作。把CDC想象成一張紙,每個(gè)窗口都有一個(gè)CDC相聯(lián)系,負(fù)責(zé)畫(huà)窗口。CDC有個(gè)常用子類CClientDC(窗口客戶區(qū)),畫(huà)圖通常通過(guò)CClientDC完成。 </p><p>  CDialog對(duì)話框 </p><p>  CWinApp應(yīng)用程序類。似于C中的main函數(shù),是程序執(zhí)行的入口和管理者,負(fù)責(zé)程序建立、消滅,主窗口和文檔模板的建立。最常用函數(shù)In

27、itInstance():初始化。</p><p>  CSize大小,就是(cx,cy)對(duì)(寬、高)MFC是在1992年的Microsoft 16位版的C/C++編譯器的7.0版本中作為一個(gè)擴(kuò)展輕量級(jí)的Windows API面向?qū)ο蟮腃++封裝庫(kù)而引入的。</p><p>  CEditView 提供Windows編緝控件的功能。因?yàn)镃EditView派生于Cedit,該對(duì)象可同文件和文

28、件模板一同使用 afxext.h。</p><p>  2.3 程序設(shè)計(jì)框架:</p><p><b>  1.系統(tǒng)流程圖:</b></p><p>  圖2.1 系統(tǒng)流程圖</p><p>  第3章 VC++圖像處理程序的設(shè)計(jì)</p><p>  3.1數(shù)字圖像處理概述</p>

29、<p>  數(shù)字圖像處理(Digital Image Processing)是指用計(jì)算機(jī)對(duì)圖像信息進(jìn)行的處理,也稱為(Computer Image Processing)。數(shù)字圖像處理包括以下幾個(gè)內(nèi)容:[3]</p><p><b>  (1)點(diǎn)運(yùn)算</b></p><p>  點(diǎn)運(yùn)算主要是針對(duì)圖像的像素進(jìn)行加、減、乘、除等運(yùn)算。圖像的點(diǎn)運(yùn)算可有有效地改變

30、圖像的直方圖分布,這對(duì)提高圖像的分辨率以及圖像的均衡都是非常有效的。</p><p><b>  (2)幾何處理</b></p><p>  幾何處理主要包括圖像的坐標(biāo)轉(zhuǎn)換、圖像的移動(dòng)、縮小、放大和旋轉(zhuǎn),多個(gè)圖像的配準(zhǔn)和圖像扭曲校正等。幾何處理是最常見(jiàn)的圖像處理手段,幾乎任何圖像處理軟件都提供了最基本的圖像縮放功能。圖像的扭曲校正功能可以對(duì)變形的圖像進(jìn)行幾何校正,從而

31、得出準(zhǔn)確的圖像。</p><p><b>  (3)圖像增強(qiáng)</b></p><p>  圖像增強(qiáng)主要是突出圖像中重要的信息,同時(shí)減弱同時(shí)減弱或去除不需要的信息。本論文所研究的范圍就是屬于圖像的增強(qiáng)。常用的方法有直方圖增強(qiáng)和偽彩色增強(qiáng)等。[5]</p><p><b>  (4)圖像復(fù)原</b></p>&l

32、t;p>  圖像復(fù)原的主要目的是去除干擾和模糊,從而恢復(fù)圖像的本來(lái)。例如對(duì)圖像進(jìn)行去噪聲復(fù)原處理。</p><p>  (5)圖像形態(tài)學(xué)處理</p><p>  圖像形態(tài)學(xué)是數(shù)學(xué)形態(tài)的延伸,是一門(mén)獨(dú)立的研究科學(xué)。利用圖像形態(tài)學(xué)處理技術(shù),可以實(shí)現(xiàn)圖像的腐蝕、細(xì)化和分割等效果。</p><p><b>  (6)圖像編碼</b></p&

33、gt;<p>  圖像編碼研究屬于信息論中信息源編碼的范疇,主要是利用圖像的信號(hào)的統(tǒng)計(jì)特性和人類視覺(jué)特性對(duì)圖像進(jìn)行高效編碼,從而達(dá)到壓縮圖像的目的。圖像編碼是數(shù)字圖像處理中一個(gè)經(jīng)典的研究范疇,有60多年的研究歷史,目前已經(jīng)制定了多種編碼標(biāo)準(zhǔn),如H.261、JPEG和MEPG等。</p><p><b>  (7)圖像重建</b></p><p>  圖像

34、的重建起源于CT技術(shù)的發(fā)展,是一門(mén)新興的數(shù)字圖像處理技術(shù),主要是利用采集的數(shù)據(jù)重建出圖像。圖像重建的主要算法有迭代法、代數(shù)法、傅立葉反投影法和和使用最廣泛的卷積反投影法等。</p><p><b>  (8)模式識(shí)別</b></p><p>  模式識(shí)別也是數(shù)字圖像處理的一個(gè)新興的研究方向,目前模式識(shí)別方法有三種,即統(tǒng)計(jì)識(shí)別法、句法結(jié)構(gòu)模式識(shí)別法和模糊識(shí)別法。應(yīng)用廣泛

35、的有文字識(shí)別(ORC)技術(shù)就是應(yīng)用模式識(shí)別技術(shù)開(kāi)發(fā)出來(lái)的。</p><p>  3.2圖像和顏色系統(tǒng)</p><p><b>  1. 圖像</b></p><p>  普通的顯示器屏幕是由許多的點(diǎn)構(gòu)成的,這些點(diǎn)稱為像素。顯示時(shí)采用掃描的方式:電子槍每次從左到右掃描一行,為每個(gè)像素著色,然后再?gòu)纳系较聮呙枵麄€(gè)屏幕,利用人眼的視覺(jué)暫留效應(yīng)就可以顯

36、示出一屏完整的圖像。為了防止閃爍,每秒要重復(fù)幾十次掃描過(guò)程。我們常說(shuō)的屏幕分辨率為1024*768像素,刷新頻率為85Hz,意思是每行掃描1024像素,一共要掃描768行,每秒重復(fù)掃描屏幕85次。一般刷新頻率大于80Hz時(shí),人眼感受不到因屏幕刷新而產(chǎn)生的閃爍,這種顯示器被稱為位映像設(shè)備。所謂位映像,就是指一個(gè)二維的像素矩陣,位圖就是采用位映像方法顯示和存儲(chǔ)的圖像。</p><p>  對(duì)于彩色圖像,它的顯示必須從

37、三原色RGB概念說(shuō)起。眾所周知,自然界中的所有顏色都可以由紅、綠、藍(lán)三原色組合而成。有的顏色有紅色成分多一些,其他成分少一些。針對(duì)含有紅色成分的多少,可以人為地分成0~255共256個(gè)等級(jí)。0級(jí)表示不含紅色部分,255級(jí)表示含有100%的紅色成分。同樣,綠色和藍(lán)色也可以被分成256級(jí)。這樣根據(jù)紅、綠、藍(lán)各種不同的組合可以表示出256*256*256(約1600萬(wàn))種顏色。[4]</p><p><b>

38、  2.調(diào)色板</b></p><p>  如果一幅圖像的每個(gè)像素都用其RGB分量來(lái)表示,那么圖像文件將變的非常大,實(shí)際上的做法不完全是這樣,下面舉一個(gè)例子:</p><p>  對(duì)一副200*200的16色圖像,它共有40000個(gè)像素,如果沒(méi)一個(gè)像素都用R、G、B3個(gè)分量表示,則一個(gè)像素需要3個(gè)字節(jié)(因?yàn)槊總€(gè)分量有256個(gè)級(jí)別,要用8位,即1個(gè)字節(jié)來(lái)表示,所以3個(gè)分量需要用3

39、個(gè)字節(jié))。這樣保存整個(gè) 圖像要用200*200*3,即120000字節(jié)。但是如果采用調(diào)用的方法,就能節(jié)省很多字節(jié)。</p><p>  對(duì)于16色圖像,圖中最多只有16種顏色,如果采用一個(gè)顏色表,表中的每一行記錄一種顏色的R、G、B值,這樣當(dāng)表示一個(gè)像素的顏色時(shí),只需要指出該顏色是第幾行,即指出的該顏色在表中的索引值即可。例如表的第0行為(255,0,0),表示紅色,那么當(dāng)某個(gè)像素為紅色時(shí),只需要標(biāo)明0即可。通過(guò)

40、顏色索引表來(lái)表示圖像,16種狀態(tài)可以用4位(bit)表示,所以一個(gè)像素要用半個(gè)字節(jié)。整個(gè)圖像要用200*200*0.5,即20000字節(jié),再加上顏色表占用3*16=48字節(jié),也不過(guò)20048字節(jié)。這樣一幅圖像整個(gè)占用的字節(jié)數(shù)只是用前面方法表示的1/6。[2]</p><p>  3.2.1灰度圖像和彩色圖像</p><p><b>  1. 灰度圖像</b></

41、p><p>  灰度圖(Grayscale)是指含亮度信息不含彩色信息的圖像,是數(shù)字圖像的基本形式,灰度圖像可有由黑白照片數(shù)字化得到,或從彩色圖像進(jìn)行去色處理得到?;叶葓D像只表達(dá)圖像的亮度信息而沒(méi)有顏色信息,因此,灰度圖像的每個(gè)像素點(diǎn)上只包含一個(gè)量化的灰度級(jí)(即灰度值),用來(lái)表示該點(diǎn)的亮度水平,并且通常用1個(gè)字節(jié)(8個(gè)二進(jìn)制位)來(lái)存儲(chǔ)灰度值。</p><p>  如果灰度值用1個(gè)字節(jié)表示,則可

42、以表示的正整數(shù)范圍是0到255,也就是說(shuō),像素灰度值取值在0到255之間,灰度技術(shù)為256級(jí)。注意到人眼對(duì)灰度的分辨能力通常在20到60級(jí),因此,灰度值存儲(chǔ)以字節(jié)為單位即保證了人眼的分辨能力,又符合計(jì)算機(jī)數(shù)據(jù)尋址的習(xí)慣。在特殊應(yīng)用中,可能要采用更高的灰度級(jí)數(shù),例如CT圖像的灰度級(jí)數(shù)高達(dá)數(shù)千,需要采用12位或16位二進(jìn)制位來(lái)存儲(chǔ),但這類圖像通常都采用專用的顯示設(shè)備和軟件來(lái)進(jìn)行顯示和處理。[7]</p><p>&l

43、t;b>  2.彩色圖像</b></p><p>  彩色圖像的數(shù)據(jù)不僅包含亮度信息,還包含顏色信息。彩色的表示方法是多樣化的,最常見(jiàn)的是三基色模型,例如RGB三基色模型,利用RGB三基色可以混合成任意顏色。因此RGB模型在各種彩色成像設(shè)備和彩色顯示設(shè)備中使用,常規(guī)的彩色圖像也都是用RGB三基色來(lái)表示的,每個(gè)像素包括RGB三基色數(shù)據(jù),每個(gè)基色用1個(gè)字節(jié)(8位二進(jìn)制位)表示,則每個(gè)像素的數(shù)據(jù)為3個(gè)

44、字節(jié)(即24位二進(jìn)制位),這就是人們常說(shuō)的24位真彩色。</p><p><b>  3.3位圖</b></p><p><b>  1.GDI位圖</b></p><p>  GDI是圖形設(shè)備接口(Graphics Device Interface)的縮寫(xiě)。GDI位圖是一種GDI對(duì)象,在Microsoft基本類(MFC)

45、庫(kù)中Cbitmap類來(lái)表示。在Cbitmap類對(duì)象中,包含一種和Windows的GDI模塊有關(guān)的Windows數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)是與設(shè)備相關(guān)的。應(yīng)用程序可以得到GDI位圖數(shù)據(jù)的一個(gè)備份,但是其中位圖的安排則完全依賴于顯示設(shè)備。我們可以將GDI位圖數(shù)據(jù)在同一臺(tái)計(jì)算機(jī)內(nèi)的不同應(yīng)用程序間任意傳遞,但是由于其對(duì)設(shè)備的依賴性,在不同類型計(jì)算機(jī)間的傳遞是沒(méi)有任何意義的。</p><p>  Cbitmap類封裝了Windo

46、ws GDI位圖,同時(shí)提供了一些位圖的成員函數(shù)。在使用CBitmap對(duì)象時(shí),首先要?jiǎng)?chuàng)建一個(gè)Cbitmap對(duì)象,然后把它選進(jìn)設(shè)備環(huán)境中,再調(diào)用其成員函數(shù)進(jìn)行處理,使用完畢后,把它從設(shè)備環(huán)境中選出并刪除。</p><p>  2.設(shè)備無(wú)關(guān)位圖(DIB)</p><p>  DIB是設(shè)備無(wú)關(guān)位圖(Device-Independent Bitmap)的縮寫(xiě),它自帶顏色信息,因此調(diào)色板管理非常容易。

47、DIB也使打印時(shí)的灰度陰影的控制更加容易。任何運(yùn)行Windows操作系統(tǒng)的計(jì)算機(jī)都可以處理DIB,它通常以BMP文件的形式被保存在磁盤(pán)中或者作為資源保存在EXE文件和DLL文件中。</p><p>  (1)BMP圖像的DIB結(jié)構(gòu)</p><p>  DIB 是標(biāo)準(zhǔn)的Windows位圖格式,BMP文件中包含了一個(gè)DIB。一個(gè)BMP文件大體上分成如下4個(gè)部分:</p><

48、p>  BITMAPFILEHEADERbType=”MB”</p><p>  位圖文件頭bfSize</p><p>  (只用于BMP文件)btReserved1</p><p>  btReserved2</p><p><b>  bfOffBits</b></p><p&g

49、t;  BITMAPINFOHEADERbiSize</p><p>  位圖信息頭biWidth</p><p><b>  biHeight</b></p><p><b>  biPlanes</b></p><p>  biBitCount</p><p> 

50、 biCompression</p><p>  biSizeImage</p><p>  biXPelsPerMeter</p><p>  biYPelsPerMeter</p><p><b>  biClrUsed</b></p><p>  biClrImportant</p&g

51、t;<p>  Polette單色DIB有2個(gè)表項(xiàng)</p><p>  調(diào)色板16色DIB有16個(gè)表項(xiàng)或更少</p><p>  256色DIB誘256個(gè)表項(xiàng)或更少</p><p>  真彩色DIB沒(méi)有調(diào)色板</p><p>  每個(gè)表項(xiàng)長(zhǎng)度為4字節(jié)(32位)</p><p>  DIB Pixel

52、s像素按照每行每列的順序排列</p><p>  DIB 圖像數(shù)據(jù)每一行的字節(jié)數(shù)必須是4的整倍數(shù)</p><p>  第1部分為位圖文件頭BITMAPFILEHEADER,它是一個(gè)結(jié)構(gòu),其定義如下:</p><p>  typedef struct tagBITMAPFILEHEADER{</p><p>  WORD bfType;&

53、lt;/p><p>  DWORD bfSize;</p><p>  WORD bfReserved1;</p><p>  WORD bfReserved2;</p><p>  DWORD bfoffBits; </p><p>  }BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER

54、, *PBITMAPFILEHEADER;</p><p>  該結(jié)構(gòu)的長(zhǎng)度是固定的,為14個(gè)字節(jié)(WORD為無(wú)符號(hào)16位整數(shù),DWORD為無(wú)符號(hào)32位整數(shù)),各個(gè)域的說(shuō)明如下:</p><p>  bfType:指定文件類型,必須是0x4D42,即字符串“MB”,也就是說(shuō)所有的“.bmp”文件的頭兩個(gè)字節(jié)都是“MB”。</p><p>  bfSize:指定文件大

55、小,包括14個(gè)字節(jié)。</p><p>  bfReserved1,bfReserved2:為保留字,不用考慮。</p><p>  bfOffBits:為從文件頭到實(shí)際的位圖數(shù)據(jù)的偏移字節(jié)數(shù)。</p><p>  第2部分為位圖信息頭BITMAPINFOHEADER,它也是一個(gè)結(jié)構(gòu),其定義如下:</p><p>  typedef struc

56、t tagBITMAPINFOHEADER{</p><p>  DWORD biSize;</p><p>  LONG biWidth;</p><p>  LONG biHeight;</p><p>  WORD biPlanes;</p><p>  WORD biBitConut;</p>&

57、lt;p>  DWORD biCompression;</p><p>  DWORD biSizeImage;</p><p>  LONG biXPelsPerMeter;</p><p>  LONG biYPelsPerMeter;</p><p>  DWORD biClrUsed;</p><p> 

58、 DWORD biClrImportant;</p><p>  } BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER</p><p>  這個(gè)結(jié)構(gòu)的長(zhǎng)度也是固定的,為40個(gè)字節(jié)(WORD為無(wú)符號(hào)16位整數(shù),DWORD為無(wú)符號(hào)32位整數(shù),LONG為32位整數(shù))。各個(gè)域的說(shuō)明如下。</p><p&g

59、t;  biSize:指定這個(gè)結(jié)構(gòu)的長(zhǎng)度,為40字節(jié)。</p><p>  biWidth:指定圖像的寬度,單位是像素。</p><p>  biHeight:指定圖像的高度,單位是像素。</p><p>  biPlanes:必須是1,不用考慮。</p><p>  biBitCount:指定表示顏色時(shí)藥用到的位數(shù),常用的值為1(黑白二色圖

60、)、4(16色圖)、8(256色)、24(真彩色圖),新的“.bmp”格式支持32位色</p><p>  biCompression:指定位圖是否壓縮,有效的值為BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS(都是一些Windows定義好的常量)。需要注意,Windows位圖可以采用RLE4和RLE8的壓縮格式,但是使用不經(jīng)常。</p><p>  biSizeI

61、mage:指定實(shí)際的位圖數(shù)據(jù)占用的字節(jié)數(shù),其實(shí)也可以從下面公式計(jì)算出來(lái):</p><p>  biSizeImage=biWidth‘*biHeight</p><p>  要注意的是上面的公式中的biWidth必須是4的整數(shù)倍(所以不biWidth,而是biWidth‘,表示大于或等于biWidth的離4最近的整數(shù)倍。例如,如果biWidth=240,則biWidth‘=240;如果bi

62、Width=241,則biWidth‘=244)。如果biCompression為BI_RGB,則該項(xiàng)可能為零。</p><p>  biXPelsPerMerter:指定目標(biāo)設(shè)備的水平分辨率,單位是像素/米。</p><p>  biYPelsPerMerter:指定目標(biāo)設(shè)備的垂直分辨率,單位是像素/米。</p><p>  biClrUsed:指定圖像實(shí)際用到的

63、顏色數(shù),如果該值為零,則用到的顏色數(shù)為2的biBitCount次冪。</p><p>  biClrImportant:指定圖像中重要的顏色數(shù),如果該值為零,則認(rèn)為所有的顏色都是重要的。</p><p>  第3部分為調(diào)色板(Palette)。有些位圖需要調(diào)色板,有些位圖(例如真彩色圖)不需要調(diào)色板,它們的BITMAPINFOHEADER后面直接是位圖數(shù)據(jù)。</p><

64、p>  調(diào)色板實(shí)際上市一個(gè)數(shù)組,共有biClrUsed個(gè)元素(如果該值為零,則有2的biBitCount次冪個(gè)元素)。數(shù)組中每個(gè)元素的類型是一個(gè)RGBQUAD結(jié)構(gòu),占4個(gè)字節(jié),其定義如下:</p><p>  typedef struct tagRGBQUAD{</p><p>  BYTE rgbBlue; 該顏色的藍(lán)色分量</p><p>  BYTE r

65、gbGreen; 該顏色的綠色分量。</p><p>  BYTE rgbRed; 該顏色的紅色分量。</p><p>  BYTE rgbReserved; 保留值。</p><p><b>  }RGBQUAD;</b></p><p>  第4部分是實(shí)際的圖像數(shù)據(jù)。對(duì)于用到調(diào)色板的位圖,圖像數(shù)據(jù)就是該像素顏色在調(diào)色

66、板中的索引值;對(duì)于真彩色圖,圖像數(shù)據(jù)就是實(shí)際的R、G、B值</p><p>  (2)BMP圖像的存取</p><p>  BMP文件分為4個(gè)部分,那么BMP文件的讀入也按照4個(gè)人組成部分依次進(jìn)行處理,即先處理BITMAPFILEHEADER結(jié)構(gòu),然后是BITMAPINFOHEADER結(jié)構(gòu)、顏色表,最后處理位圖數(shù)據(jù)。</p><p>  首先,有關(guān)BITMAPFIL

67、EHEADER、BITMAPINFOHEADER、RGBQUAD等結(jié)構(gòu)定義包含在頭文件“Windows.h”中,應(yīng)該把它包含進(jìn)來(lái)。</p><p>  (3)DIB訪問(wèn)函數(shù)</p><p>  Windows支持一些重要的DIB訪問(wèn)函數(shù)。這些函數(shù)都沒(méi)有被封裝到MFC中,所以我們需要參考msdn文檔來(lái)添加。下面介紹本程序用的訪問(wèn)函數(shù):</p><p>  SetDIB

68、itsToDevice:該函數(shù)直接在顯示器或打印機(jī)上顯示DIB。顯示時(shí)不進(jìn)行縮放,位圖的每一位對(duì)應(yīng)一個(gè)顯示像素或一個(gè)打印點(diǎn)。不能進(jìn)行縮放限制了它的實(shí)用。該函數(shù)不能像BitBlt函數(shù)那樣使用,因?yàn)锽itBlt使用的是邏輯坐標(biāo)。</p><p>  StrechDIBits:該函數(shù)按照與StretchBlt函數(shù)類似的方式將DIB直接顯示在顯示器或打印機(jī)上。</p><p>  GetDIBit

69、s:該函數(shù)利用申請(qǐng)到的內(nèi)存,由GDI位圖來(lái)構(gòu)造DIB??梢詫?duì)DIB的格式進(jìn)行控制,因?yàn)槲覀兛梢灾付總€(gè)像素的顏色位數(shù),并且可以指定是否對(duì)它進(jìn)行壓縮。如果使用了壓縮格式,就必須對(duì)GetDIBits進(jìn)行兩次調(diào)用,一次用于計(jì)算需要的內(nèi)存,另一次來(lái)產(chǎn)生DIB數(shù)據(jù)。</p><p>  CreateDIBitmap:該函數(shù)從DIB出發(fā)來(lái)創(chuàng)建GDI位圖。與所有這些DIB函數(shù)一樣,必須提供一個(gè)設(shè)備環(huán)境指針作為參數(shù)。這里我們需要

70、一個(gè)顯示器設(shè)備環(huán)境,不需要內(nèi)存設(shè)備環(huán)境。</p><p>  CreateDIBSection:該函數(shù)是一個(gè)新的Win32函數(shù),它創(chuàng)建一個(gè)特殊的DIB,稱為DIB項(xiàng),然后返回一個(gè)GDI位圖句柄。該函數(shù)為我們提供了DIB和GDI位圖最好的特性。我們可以直接訪問(wèn)DIB的內(nèi)存,而且利用位圖句柄和內(nèi)存設(shè)備環(huán)境,還可以再DIB中調(diào)用GDI函數(shù)畫(huà)圖。</p><p>  (4)ImgDib類的編寫(xiě)&l

71、t;/p><p>  利用Windows現(xiàn)有的DIB訪問(wèn)函數(shù),可以實(shí)現(xiàn)位圖的可視化編程。使用MFC編制一個(gè)基于單文檔、面向過(guò)程的位圖顯示與存儲(chǔ)程序。BMP文件讀寫(xiě)實(shí)例在功能上完全一致的,只不過(guò)一個(gè)是可視化的編程環(huán)境,一個(gè)是控制臺(tái)的程序。聲明的這個(gè)類叫做ImgDib,里面封裝了DIB位圖處理所需要的基本的成員變量和成員函數(shù),這樣充分利用了面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝、繼承等特性,又使得代碼易于維護(hù)和移植。[4]</p&

72、gt;<p>  1.ImgDib類的定義</p><p>  ImgDib類的定義在頭文件”ImgDib.h”中,代碼如下</p><p>  class ImgDib{</p><p><b>  public:</b></p><p>  unsigned char *m_pImageData;//圖

73、像數(shù)據(jù)的指針;</p><p>  LPRGBQUAD m_pColorTable;//圖像顏色表指針;</p><p>  int m_nBitPixel;//每個(gè)像素占的位數(shù);</p><p><b>  private:</b></p><p>  LPBYTE m_pDib;//指向整個(gè)DIB的指針(包含BITM

74、APFILEHEHEDER,BITMATPINFOHEADER ,和顏色表)</p><p>  LPBITMAPINFOHEADER m_pInfoHead;//圖像信息頭指針;</p><p>  HPALETTE m_hPalette;//調(diào)色板指針;</p><p>  int m_pColorTableLength;//顏色表長(zhǎng)度;</p>

75、<p><b>  public:</b></p><p>  ImgDib();//不帶參數(shù)的構(gòu)造函數(shù);</p><p>  ImgDib(CSize size,int nBitPixel,LPRGBQUAD pColorTable,unsigned char *pImageData);</p><p>  ~ImgDib();//

76、析構(gòu)函數(shù);</p><p>  BOOL Read(LPCTSTR lpszPathName);//DIB讀函數(shù)</p><p>  BOOL OnDraw(CDC*PDC,CPoint Origin,CSize size);//DIB顯示函數(shù);</p><p>  BOOL WriteOn(LPCTSTR lpszPathName);</p><

77、;p>  void MakePalette();//調(diào)色板生成函數(shù);</p><p>  CSize GetDibsize();//獲取圖像DIB的寬和高</p><p>  void Empty();//清理內(nèi)存空間;</p><p>  void ReplaceDib(CSize size,int nBitPixel,LPRGBQUAD pColorTab

78、le,unsigned char *pImageData);//用新的數(shù)據(jù)替換當(dāng)前的DIB;</p><p>  int ComputeColorTableLength(int nBitPixel);//計(jì)算顏色表的長(zhǎng)度;</p><p>  protected:</p><p>  int m_imgWidth;//圖像的寬。以像素為單位;</p>

79、<p>  int m_imgHeight;//圖像的高,以像素為單位;};</p><p>  通過(guò)BMP文件讀取的方式生成DIB,也可以通過(guò)參數(shù)的傳遞方式生成DIB,本類始終都是一次為DIB的指針m_pdib分配內(nèi)存。</p><p>  ImgDib類的代碼實(shí)現(xiàn)在文件ImgDib.cpp中</p><p>  構(gòu)造函數(shù)和析構(gòu)函數(shù):</p>

80、<p>  類的構(gòu)造函數(shù)用來(lái)完成數(shù)據(jù)成員的初始化工作,系統(tǒng)在創(chuàng)建類的對(duì)象時(shí)自動(dòng)調(diào)用構(gòu)造函數(shù)。類的析構(gòu)函數(shù)用來(lái)釋放被分配的內(nèi)存空間,當(dāng)類的對(duì)象消失時(shí)系統(tǒng)自動(dòng)調(diào)用該函數(shù)。</p><p>  第4章 經(jīng)典的邊緣檢測(cè)提取方法及實(shí)現(xiàn)</p><p>  4.1 Roberts算子</p><p>  邊緣,是指周?chē)袼鼗叶扔须A躍變化或屋頂?shù)茸兓哪切┫袼氐募?/p>

81、合。圖像的邊緣對(duì)應(yīng)著圖像灰度的不連續(xù)性。顯然圖像的邊緣很少是從一個(gè)灰度跳到另一個(gè)灰度這樣的理想狀況。真實(shí)圖像的邊緣通常都具有有限的寬度呈現(xiàn)出陡峭的斜坡?tīng)睢?</p><p>  邊緣的銳利程度由圖像灰度的梯度決定。梯度是一個(gè)向量,f?指出灰度變化的最快的方向和數(shù)量。</p><p><b>  公式 4.1</b></p><p>  梯度的大

82、小和方向是由</p><p><b>  公式 4.2</b></p><p><b>  [3]</b></p><p><b>  公式 4.3</b></p><p>  因此最簡(jiǎn)單的邊緣檢測(cè)算子是用圖像的垂直和水平差分來(lái)逼近梯度算子:</p><p&

83、gt;<b>  [3] </b></p><p><b>  公式 4.4</b></p><p>  因此當(dāng)我想尋找邊緣的時(shí)候,最簡(jiǎn)單的方法是對(duì)每一個(gè)像素計(jì)算出(4.4)的向量,然后求出它的絕對(duì)值,然后進(jìn)行閾值操作就可以了。利用這種思想就得到了Roberts算子:</p><p><b>  [3]<

84、/b></p><p><b>  公式4.5</b></p><p>  它是一個(gè)兩個(gè)2*2模板作用的結(jié)果(標(biāo)注“.”的是當(dāng)前像素的位置)</p><p>  能查到的最早的有關(guān)邊緣檢測(cè)的文獻(xiàn)就是1959 年 B. Jule的[17],這算是最早的提出邊緣檢測(cè)和邊緣檢測(cè)算子的文章了。 </p><p>  196

85、3 年 Roberts[23]提出了邊緣檢測(cè)和邊緣檢測(cè)的這個(gè)簡(jiǎn)單算子。Machine Perception of 3-D Solids 是 Roberts 在 1963 年寫(xiě)的(MIT)博士畢業(yè)論文。這是一篇大家都應(yīng)該閱讀的論文。它是最早分析圖像中的邊緣、線、模型和圖形學(xué)的文章。作者提出的系統(tǒng)是第一個(gè) 3D 視覺(jué)系統(tǒng),其中有許多后來(lái)被大家常用的算子。它使用了三維物體的多邊形模型,通過(guò)計(jì)算圖像中的灰度數(shù)據(jù)尋找圖像中的“塊”然后對(duì)他最適當(dāng)

86、的表示,最后通過(guò)匹配來(lái)尋找物體。復(fù)雜的物體是由很多“塊”組成的,而“塊”是由邊緣組成的。作者使用他的簡(jiǎn)單的2×2 算子得到了邊緣。相鄰的邊緣點(diǎn)組成線,如果線比較短,那么這條線就被忽略,如果線比較長(zhǎng),那么我們就把它延長(zhǎng)直到它與其它的邊緣線相交與一點(diǎn)。然后通過(guò)對(duì)這些線的匹配來(lái)識(shí)別物體。一旦一個(gè)物體識(shí)別出來(lái),表示這個(gè)物體的邊緣就從圖像的邊緣線表示上刪除,然后再對(duì)下一個(gè)物體進(jìn)行匹配。[4]</p><p>  

87、4.2 Prewitt 算子和 Sobel 算子</p><p>  Roberts 算子是直觀的也是簡(jiǎn)單的,但是顯然效果不好。實(shí)踐中人們做了大量的實(shí)踐,總結(jié)出了一些經(jīng)驗(yàn)。 </p><p>  1970 年左右 Prewitt[16]和 Sobel[25]分別提出了一個(gè)算子,這就是 Prewitt 算子和 Sobel 算子。 </p><p>  Prewitt

88、邊緣檢測(cè)算子使用兩個(gè)有向算子(一個(gè)水平的,一個(gè)是垂直的,一般稱為模板),每一個(gè)逼近一個(gè)偏導(dǎo)數(shù):</p><p>  PV= PH=</p><p>  如果我們用 Prewitt算子檢測(cè)圖像 M 的邊緣的話,我們可以先分別用水平算子和垂直算子對(duì)圖像進(jìn)行卷積,得到的是兩個(gè)矩陣,在不考慮邊界的情形下也是和原圖像同樣大小的 M1,M2,他們分別

89、表示圖像 M 中相同位置處的兩個(gè)偏導(dǎo)數(shù)。然后把 M1,M2 對(duì)應(yīng)位置的兩個(gè)數(shù)平方后相加得到一個(gè)新的矩陣G,G 表示 M 中各個(gè)像素的灰度的梯度值(一個(gè)逼近)。然后就可以通過(guò)閥值處理得到邊緣圖像??偟倪^(guò)程是: </p><p><b>  公式 4.6</b></p><p>  Sobel 算子和 Prewitt算子的不同就在于使用的模板不一樣:</

90、p><p><b>  [5]</b></p><p>  S1= S2=</p><p>  我們假設(shè)圖像的灰度滿足下面這個(gè)關(guān)系:</p><p><b>  [7]</b></p><p><b>  公式 4.7</b></p>&

91、lt;p>  當(dāng)前像素 3×3 鄰域內(nèi)像素值為</p><p><b>  [7]</b></p><p><b>  公式 4.8</b></p><p>  定義垂直算子和水平算子形如:</p><p><b>  [5]</b></p>&l

92、t;p>  之所以這樣定義是為了滿足對(duì)稱性和電路設(shè)計(jì)的需要。 利用這兩個(gè)模板對(duì)當(dāng)前像素進(jìn)行卷積,得到的方向?qū)?shù)為</p><p><b>  [6]</b></p><p><b>  公式 4.9</b></p><p>  因此當(dāng)前像素處的梯度的大小為:</p><p><b>

93、  [4]</b></p><p><b>  公式 4.10</b></p><p><b>  顯然要有:</b></p><p><b>  [4]</b></p><p><b>  公式 4.11</b></p><

94、;p>  如果我們?nèi)=b=1/6則得到的模板就是1/6乘Prewitt算子;如果我們?nèi)?a=1/8,b=1/4則得到的就是1/8乘 Sobel 算子。 </p><p>  哪一個(gè)算子比較好?這個(gè)問(wèn)題的答案取決于圖像的噪聲,如果在每個(gè)點(diǎn)噪聲都是相同的,那么 Prewitt算子是比較好的;如果靠近邊緣的噪聲是沿著邊緣的2倍,那么 Sobel 算子是比較好的。也就是算子的好壞取決于噪聲的結(jié)構(gòu)。事實(shí)上,它們存在

95、一些共同的問(wèn)題: </p><p>  A.他們的結(jié)果對(duì)噪聲很敏感,圖像的離散差分對(duì)噪聲比對(duì)原圖像更敏感; </p><p>  B.可以通過(guò)先對(duì)圖像做平滑以改善結(jié)果,但是又會(huì)產(chǎn)生一個(gè)問(wèn)題:會(huì)把一些靠在一起的邊緣平滑掉,而且會(huì)影響對(duì)邊緣的定位;[5]</p><p>  4.3 Kirsch算子</p><p>  1971年,R.Kirsc

96、h[34]提出了一種邊緣檢測(cè)的新方法:它使用了8個(gè)模板來(lái)確定梯度和梯度的方向。假設(shè)原來(lái)的 3×3子圖像的如下:</p><p><b>  [7]</b></p><p>  則邊緣的梯度大小為: </p><p><b>  [5]</b></p><p><b>  公式 4

97、.12</b></p><p><b>  其中 </b></p><p><b>  [5]</b></p><p><b>  公式 4.13</b></p><p>  上面的下標(biāo)如果超過(guò)7就用 8去除取余數(shù)。注意到 k=0,1,...7,其實(shí)就是使用了 8個(gè)

98、模板了</p><p>  4.4 拉普拉斯算子</p><p>  拉普拉斯算子是對(duì)二維函數(shù)進(jìn)行運(yùn)算的二階導(dǎo)數(shù)算子。通常使用的拉普拉斯算子如下面所示:</p><p>  由于拉普拉斯算子是一個(gè)二階導(dǎo)數(shù),它將在邊緣處產(chǎn)生一個(gè)陡峭的零交叉,如下圖所示由于噪聲點(diǎn)對(duì)邊緣檢測(cè)有一定的影響,所以高斯拉普拉斯算子是效果較好的邊緣檢測(cè)器。它把高斯平滑濾波器和拉普拉斯銳化濾波器結(jié)

99、合起來(lái),先平滑去掉噪聲,再進(jìn)行邊緣檢測(cè),所以效果更好。</p><p>  它的脈沖響應(yīng)和傳遞函數(shù)如下圖:</p><p>  圖4.1 脈沖響應(yīng)和傳遞函數(shù)[4] </p><p>  對(duì)數(shù)字圖像來(lái)說(shuō),f(x,y)的二階偏導(dǎo)數(shù)可以表示為:</p><p><b>  [5]</b></p><p>

100、;<b>  公式 4.14</b></p><p>  因此拉普拉斯算子為:</p><p><b>  公式 4.15</b></p><p>  數(shù)字圖像在點(diǎn)的拉普拉斯算子,只有一個(gè)模板,它可以由點(diǎn)的灰度值減去該點(diǎn)鄰域的平均灰度值來(lái)求得。 </p><p>  4.5 高斯拉普拉斯邊緣檢測(cè)算子

101、</p><p>  因?yàn)閳D像邊緣有大的灰度變化, 所以圖像的一階偏導(dǎo)數(shù)在邊緣處有局部最大值或最小值, 則二階偏導(dǎo)數(shù)在邊緣處會(huì)通過(guò)零點(diǎn) (由正到負(fù)或由負(fù)到正)。</p><p>  考慮坐標(biāo)旋轉(zhuǎn)變換,設(shè)旋轉(zhuǎn)前坐標(biāo)為,旋轉(zhuǎn)后為,則有: </p><p><b>  [5]</b></p><p><b> 

102、 公式 4.16</b></p><p>  容易看出, 雖然, 不是各向同性的, 但是它們的平方和是各向同性的。即</p><p><b>  [5]</b></p><p><b>  公式 4.17</b></p><p>  定義Laplacian算子為,拉普拉斯算子是各向同性(

103、isotropic)的微分算子。</p><p><b>  [6]</b></p><p><b>  公式 4.18</b></p><p>  因此, Laplacian 算子是線性二次微分算子, 與梯度算子一樣, 具有旋轉(zhuǎn)不變性, 從而滿足不同走向的圖像邊界的銳化要求。</p><p>  

104、對(duì)階躍狀邊緣, 二階導(dǎo)數(shù)在邊緣點(diǎn)出現(xiàn)零交叉, 即邊緣點(diǎn)兩旁二階導(dǎo)函數(shù)取異號(hào), 據(jù)此, 對(duì)數(shù)字圖像{ f ( i , j) }的每個(gè)像素, Laplacian 算子取它關(guān)于 X 軸方向和 Y 軸方向的二階差分之和。</p><p><b>  [4]</b></p><p><b>  公式 4.19</b></p><p>

105、;  這是一個(gè)與邊緣方向無(wú)關(guān)的邊緣檢測(cè)算子。若點(diǎn)發(fā)生零交叉, 則為階躍邊緣點(diǎn)。</p><p>  對(duì)屋頂狀邊緣, 在邊緣點(diǎn)的二階導(dǎo)數(shù)取極小值。據(jù)此, 對(duì)數(shù)字圖像的每個(gè)像素取它的關(guān)于 X 方向和 Y 方向的二階差分之和的相反數(shù), 即 Laplacian 算子的相反數(shù):</p><p>  公式 4.20[6]</p><p><b>  稱為邊緣圖像。&l

106、t;/b></p><p>  由于我們關(guān)心的是邊緣點(diǎn)位置而不是其周?chē)膶?shí)際灰度差, 因此, 一般都選擇與方向無(wú)關(guān)的邊緣檢測(cè)算子。用拉普拉斯算子檢測(cè)邊緣就是估算拉普拉斯算子的輸出, 找出它的零點(diǎn)位置。離散情況下, 拉普拉斯算子有幾種不同的模板計(jì)算形式:</p><p><b>  或或</b></p><p>  由于拉普拉斯算子是一個(gè)

107、二階導(dǎo)數(shù), 它將在邊緣處產(chǎn)生一個(gè)陡峭的零交叉。由于噪聲點(diǎn)對(duì)邊緣檢測(cè)有一定影響, 所以高斯 – 拉普拉斯算子是效果較好的邊緣檢測(cè)器。它把高斯平滑濾波器和拉普拉斯銳化濾波器結(jié)合起來(lái), 先平滑掉噪聲, 再進(jìn)行邊緣檢測(cè), 所以效果更好。通常的高斯 – 拉普拉斯算子是一個(gè) 5×5 的模板。[5]</p><p>  4.6邊緣檢測(cè)算子的實(shí)現(xiàn)</p><p>  1.Roberts算子的實(shí)現(xiàn)

108、:[1]</p><p>  for(i=1;i<m_imgHeight-1;i++){</p><p>  for(j=1;j<m_imgWidth-1;j++){</p><p>  for(k=0;k<pixelByte;k++){</p><p><b>  //x方向梯度</b></p&

109、gt;<p>  x=*(m_pImgData+i*lineByte+j*pixelByte+k)</p><p>  -*(m_pImgData+(i+1)*lineByte+j*pixelByte+k);</p><p><b>  //y方向梯度</b></p><p>  y=*(m_pImgData+i*lineByte

110、+j*pixelByte+k)</p><p>  -*(m_pImgData+i*lineByte+(j+1)*pixelByte+k);</p><p>  t=sqrt(x*x+y*y)+0.5;</p><p><b>  if(t>255)</b></p><p><b>  t=255;<

111、;/b></p><p>  *(m_pImgDataOut+i*lineByte+j*pixelByte+k)=t;</p><p>  2.Sobel 算子的實(shí)現(xiàn):[1]</p><p>  for(i=1;i<m_imgHeight-1;i++){</p><p>  for(j=1;j<m_imgWidth-1;j+

112、+){</p><p>  for(k=0;k<pixelByte;k++){</p><p><b>  //x方向梯度</b></p><p>  x= *(m_pImgData+(i-1)*lineByte+(j+1)*pixelByte+k)</p><p>  + 2 * *(m_pImgData+i*l

113、ineByte+(j+1)*pixelByte+k)</p><p>  + *(m_pImgData+(i+1)*lineByte+(j+1)*pixelByte+k)</p><p>  - *(m_pImgData+(i-1)*lineByte+(j-1)*pixelByte+k)</p><p>  - 2 * *(m_pImgData+i*lineByte

114、+(j-1)*pixelByte+k)</p><p>  - *(m_pImgData+(i+1)*lineByte+(j-1)*pixelByte+k);</p><p><b>  //y方向梯度</b></p><p>  y= *(m_pImgData+(i-1)*lineByte+(j-1)*pixelByte+k)</p&g

115、t;<p>  + 2 * *(m_pImgData+(i-1)*lineByte+j*pixelByte+k)</p><p>  + *(m_pImgData+(i-1)*lineByte+(j+1)*pixelByte+k)</p><p>  - *(m_pImgData+(i+1)*lineByte+(j-1)*pixelByte+k)</p><

116、;p>  - 2 * *(m_pImgData+(i+1)*lineByte+j*pixelByte+k)</p><p>  - *(m_pImgData+(i+1)*lineByte+(j+1)*pixelByte+k);</p><p>  t=sqrt(x*x+y*y)+0.5;</p><p><b>  if(t>255)</

117、b></p><p><b>  t=255;</b></p><p>  *(m_pImgDataOut+i*lineByte+j*pixelByte+k)=t;</p><p>  3.Prewitt 算子的實(shí)現(xiàn):[1]</p><p>  for(i=1;i<m_imgHeight-1;i++){<

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論