

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 畢 業(yè) 設(shè) 計(論 文)</p><p> 基于MFC的圖像邊緣檢測提取算法仿真</p><p> 基于MFC的圖像邊緣檢測提取算法仿真</p><p> [摘要] 本論文是要通過計算機(jī)仿真的方法來實現(xiàn)對圖像邊緣的提取,并生成新的圖像,新的圖像只含有邊緣,無其他的顏色信息。在通過用計算機(jī)進(jìn)行仿真的過程中,演示仿真系統(tǒng)是使用VC++6.0來
2、編寫的,應(yīng)用了面向?qū)ο蟮木幊趟枷耄⑹褂肅++語言實現(xiàn)。本論文研究的圖像是Windows操作系統(tǒng)中的標(biāo)準(zhǔn)圖像文件格式(*.bmp)。本論文從介紹MFC編程的基礎(chǔ)知識,然后又分析了bmp圖像的內(nèi)部結(jié)構(gòu)。分析比較了六個常用邊緣檢測算子,最后又分析了邊緣提取算子。通過對各個算子的分析比較,最后應(yīng)用在邊緣提取上的邊緣檢測算子是Kirsch算子,其他幾個算子在應(yīng)用后邊緣檢測后效果一般,但是進(jìn)行邊緣提取后,效果非常不清晰,只有Kirsch算子較好的
3、反應(yīng)了邊緣,我所做的邊緣檢測,是在不分析圖像的噪聲,和其他因素的條件下進(jìn)行的。</p><p> [關(guān)鍵詞] 邊緣檢測 邊緣提取 算子 圖像</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邊緣與邊緣檢測1</p><p> 1.3 邊緣檢測的研究背景及意義1</p><p> 1.4 課題發(fā)展?fàn)顩r和目標(biāo)2</p>
8、;<p> 第2章 程序框架及編程基礎(chǔ)知識介紹3</p><p> 2.1 MFC概述3</p><p> 2.2 MFC類庫3</p><p> 2.3 程序設(shè)計框架:4</p><p> 第3章 VC++圖像處理程序的設(shè)計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)典的邊緣檢測提取方法及實現(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 高斯拉普拉斯邊緣檢測算子19</p><p> 4.6邊緣檢測算子的實現(xiàn)20</p><p> 4.7算子的結(jié)果比
11、較23</p><p> 第五章 邊緣提取25</p><p> 5.1邊緣提取的功能與原理25</p><p> 5.2 邊緣提取的效果與算法實現(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> 邊緣檢測是圖像處理的一個重要分支,研究為完成某一任務(wù)需要從圖像中提取哪些有用的信息,以及如何利用這些信息解釋圖
13、像。邊緣檢測技術(shù)對于處理數(shù)字圖像非常重要,因為邊緣是所要提取目標(biāo)和背景的分界線,提取出邊緣才能將目標(biāo)和背景區(qū)分開來。在圖像中,邊界表明一個特征區(qū)域的終結(jié)和另一個特征區(qū)域的開始,邊界所分開區(qū)域的內(nèi)部特征或?qū)傩允且恢碌模煌膮^(qū)域內(nèi)部的特征或?qū)傩允遣煌?,邊緣檢測正是利用物體和背景在某種圖像特性上的差異來實現(xiàn)的,這些差異包括灰度,顏色或者紋理特征。邊緣檢測實際上就是檢測圖像特征發(fā)生變化的位置。</p><p>
14、由于噪聲和模糊的存在,檢測到的邊界可能會變寬或在某些點處發(fā)生間斷,因此,邊界檢測包括兩個基本內(nèi)容:首先抽取出反映灰度變化的邊緣點,然后剔除某些邊界點或填補(bǔ)邊界間斷點,并將這些邊緣連接成完整的線。邊緣檢測的方法大多數(shù)是基于方向?qū)?shù)掩模求卷積的方法。導(dǎo)數(shù)算子具有突出灰度變化的作用,對圖像運用導(dǎo)數(shù)算子,灰度變化較大的點處算得的值比較高,因此可將這些導(dǎo)數(shù)值作為相應(yīng)點的邊界強(qiáng)度,通過設(shè)置門限的方法,提取邊界點集。[3]</p>&l
15、t;p> 1.2邊緣與邊緣檢測</p><p> 直觀上邊緣是一組相連像素的集合,它們位于兩個不同區(qū)域之間,而從根本上說邊緣是基于某種算法得到的具有特定特征的點的集合。由此看出邊緣的定義與算法有關(guān),同時邊緣的定義以像素灰度的躍變?yōu)榛A(chǔ)。</p><p> 圖像上顏色相近的像素連在一起形成了不同的區(qū)域而不同的區(qū)域間的邊緣表現(xiàn)為顏色灰度的躍變。邊緣檢測就是利用微分等方法通過對灰度躍
16、變的分析尋找圖像上區(qū)域邊緣的技術(shù),對數(shù)字圖像,通常使用卷積或類似卷積的方法來實現(xiàn)對灰度的分析。</p><p> 1.3 邊緣檢測的研究背景及意義</p><p> 利用計算機(jī)進(jìn)行圖像處理有兩個目的:一是生產(chǎn)更適合人類觀察和識別的圖像;二是希望能由計算機(jī)自動識別和理解圖像。無論為了哪種目的,圖像處理中關(guān)鍵的一步就是對包含大量的各式各樣景物信息的圖像進(jìn)行分解。分解最終結(jié)果是圖像被分解成一
17、些具有某種特征的最小成分,稱為圖像的基元,相對于整幅圖像來說,這種基元比較容易處理。</p><p> 圖像的特征是指圖像場中可用作標(biāo)志的屬性。它可以分為圖像的統(tǒng)計特征和圖像的視覺特征。</p><p> 圖像的統(tǒng)計特征是指一些人為定義的特征,通過變換才能得到如圖像的直方圖、矩頻譜等。圖像的視覺特征是指人的視覺可直接感受到自然特征,如區(qū)域的亮度、紋理或輪廓等,利用這兩類特征把圖像分解成
18、一系列有意的目標(biāo)或區(qū)域的過程稱為圖像的分割。</p><p> 圖像的邊緣是圖像的最基本特征。所謂邊緣是指周圍圖像灰度有階躍變化的那些像素的集合,邊緣廣泛存在于物體與背景之間,物體與物體之間,基元與基元之間。因此邊緣檢測是圖像分割所依賴的重要特征。[2]</p><p> 1.4 課題發(fā)展?fàn)顩r和目標(biāo)</p><p> 邊緣檢測的研究多年來在業(yè)內(nèi)被人們高度重視。
19、從邊緣檢測研究的歷史和現(xiàn)狀來看,邊緣檢測有幾個明顯的趨勢:1、對原有的算法不斷改進(jìn)。2、新方法、新概念的引入和多種方法的有效綜合運用。3、對特殊圖像邊緣檢測的研究越來越得到重視,目前有很多針對立體圖像、彩色圖像、多光譜圖像、合成孔徑雷達(dá)圖像、深度圖像、紋理圖像、超聲圖像、計算機(jī)斷層掃描、磁共振圖像、共聚焦激光掃描顯微鏡圖像以及運動圖像等特殊圖像的邊緣檢測技術(shù)的研究。4、對圖像邊緣檢測評價的研究和對評價系統(tǒng)的研究越來越得到關(guān)注。5、將現(xiàn)有
20、的算法應(yīng)用于工程實際中。</p><p> 在此本可以將使用VC++6.0編程設(shè)計軟件對邊緣檢測技術(shù)的的各個算法進(jìn)行仿真編程,來分析和比較各個算法的功能和效果,以便更深入的了解圖像邊緣檢測技術(shù)。</p><p> 第2章 程序框架及編程基礎(chǔ)知識介紹</p><p><b> 2.1 MFC概述</b></p><p&
21、gt; MFC,微軟基礎(chǔ)類(Microsoft Foundation Classes),實際上是微軟提供的,用于在C++環(huán)境下編寫應(yīng)用程序的一個框架和引擎,VC++是Windows下開發(fā)人員使用的專業(yè)C++ SDK(SDK,Standard SoftWare Develop Kit,專業(yè)軟件開發(fā)平臺),MFC就是掛在它之上的一個輔助軟件開發(fā)包,MFC作為與VC++血肉相連的部分(注意C++和VC++的區(qū)別:C++是一種程序設(shè)計語言,是
22、一種大家都承認(rèn)的軟件編制的通用規(guī)范,而VC++只是一個編譯器,或者說是一種編譯器+源程序編輯器的IDE。MFC是Win API與C++的結(jié)合,API,即微軟提供的Windows下應(yīng)用程序的編程語言接口,是一種軟件編程的規(guī)范,但不是一種程序開發(fā)語言本身,可以允許用戶使用各種各樣的第三方(如我是一方,微軟是一方,Borland就是第三方)的編程語言來進(jìn)行對Windows下應(yīng)用程序的開發(fā),使這些被開發(fā)出來的應(yīng)用程序能在Windows下運行,比
23、如VB,VC++,Java,Delhpi編程語言函數(shù)本質(zhì)上全部源于API,因此用它們開發(fā)出來的應(yīng)用程序都能工作在Windows的消</p><p><b> 2.2 MFC類庫</b></p><p> CWnd:窗口,它是大多數(shù)“看得見的東西”的父類(Windows里幾乎所有看得見的東西都是一個窗口,大窗口里有許多小窗口),比如視圖CView、框架窗口CFram
24、eWnd、工具條CToolBar、對話框CDialog、按鈕CButton,一個例外是菜單(CMenu)不是從窗口派生的。該類很大,一開始也不必學(xué),知道就行了。</p><p> CDocument文檔,負(fù)責(zé)內(nèi)存數(shù)據(jù)與磁盤的交互。最重要的是OnOpenDocument(讀入),OnSaveDocument(寫盤),Serialize(讀寫)。</p><p> CView視圖,負(fù)責(zé)內(nèi)存
25、數(shù)據(jù)與用戶的交互。包括數(shù)據(jù)的顯示、用戶操作的響應(yīng)(如菜單的選取、鼠標(biāo)的響應(yīng))。最重要的是OnDraw(重畫窗口),通常用CWnd::Invalidate()來啟動它。另外,它通過消息映射表處理菜單、工具條、快捷鍵和其他用戶消息。你自己的許多功能都要加在里面,你打交道最多的就是它。 </p><p> CDC設(shè)備文本。無論是顯示器還是打印機(jī),都是畫圖給用戶看。這圖就抽象為CDC。CDC與其他GDI(圖形設(shè)備接口)
26、一起,完成文字和圖形、圖像的顯示工作。把CDC想象成一張紙,每個窗口都有一個CDC相聯(lián)系,負(fù)責(zé)畫窗口。CDC有個常用子類CClientDC(窗口客戶區(qū)),畫圖通常通過CClientDC完成。 </p><p> CDialog對話框 </p><p> CWinApp應(yīng)用程序類。似于C中的main函數(shù),是程序執(zhí)行的入口和管理者,負(fù)責(zé)程序建立、消滅,主窗口和文檔模板的建立。最常用函數(shù)In
27、itInstance():初始化。</p><p> CSize大小,就是(cx,cy)對(寬、高)MFC是在1992年的Microsoft 16位版的C/C++編譯器的7.0版本中作為一個擴(kuò)展輕量級的Windows API面向?qū)ο蟮腃++封裝庫而引入的。</p><p> CEditView 提供Windows編緝控件的功能。因為CEditView派生于Cedit,該對象可同文件和文
28、件模板一同使用 afxext.h。</p><p> 2.3 程序設(shè)計框架:</p><p><b> 1.系統(tǒng)流程圖:</b></p><p> 圖2.1 系統(tǒng)流程圖</p><p> 第3章 VC++圖像處理程序的設(shè)計</p><p> 3.1數(shù)字圖像處理概述</p>
29、<p> 數(shù)字圖像處理(Digital Image Processing)是指用計算機(jī)對圖像信息進(jìn)行的處理,也稱為(Computer Image Processing)。數(shù)字圖像處理包括以下幾個內(nèi)容:[3]</p><p><b> (1)點運算</b></p><p> 點運算主要是針對圖像的像素進(jìn)行加、減、乘、除等運算。圖像的點運算可有有效地改變
30、圖像的直方圖分布,這對提高圖像的分辨率以及圖像的均衡都是非常有效的。</p><p><b> (2)幾何處理</b></p><p> 幾何處理主要包括圖像的坐標(biāo)轉(zhuǎn)換、圖像的移動、縮小、放大和旋轉(zhuǎn),多個圖像的配準(zhǔn)和圖像扭曲校正等。幾何處理是最常見的圖像處理手段,幾乎任何圖像處理軟件都提供了最基本的圖像縮放功能。圖像的扭曲校正功能可以對變形的圖像進(jìn)行幾何校正,從而
31、得出準(zhǔn)確的圖像。</p><p><b> (3)圖像增強(qiáng)</b></p><p> 圖像增強(qiáng)主要是突出圖像中重要的信息,同時減弱同時減弱或去除不需要的信息。本論文所研究的范圍就是屬于圖像的增強(qiáng)。常用的方法有直方圖增強(qiáng)和偽彩色增強(qiáng)等。[5]</p><p><b> (4)圖像復(fù)原</b></p>&l
32、t;p> 圖像復(fù)原的主要目的是去除干擾和模糊,從而恢復(fù)圖像的本來。例如對圖像進(jìn)行去噪聲復(fù)原處理。</p><p> (5)圖像形態(tài)學(xué)處理</p><p> 圖像形態(tài)學(xué)是數(shù)學(xué)形態(tài)的延伸,是一門獨立的研究科學(xué)。利用圖像形態(tài)學(xué)處理技術(shù),可以實現(xiàn)圖像的腐蝕、細(xì)化和分割等效果。</p><p><b> (6)圖像編碼</b></p&
33、gt;<p> 圖像編碼研究屬于信息論中信息源編碼的范疇,主要是利用圖像的信號的統(tǒng)計特性和人類視覺特性對圖像進(jìn)行高效編碼,從而達(dá)到壓縮圖像的目的。圖像編碼是數(shù)字圖像處理中一個經(jīng)典的研究范疇,有60多年的研究歷史,目前已經(jīng)制定了多種編碼標(biāo)準(zhǔn),如H.261、JPEG和MEPG等。</p><p><b> (7)圖像重建</b></p><p> 圖像
34、的重建起源于CT技術(shù)的發(fā)展,是一門新興的數(shù)字圖像處理技術(shù),主要是利用采集的數(shù)據(jù)重建出圖像。圖像重建的主要算法有迭代法、代數(shù)法、傅立葉反投影法和和使用最廣泛的卷積反投影法等。</p><p><b> (8)模式識別</b></p><p> 模式識別也是數(shù)字圖像處理的一個新興的研究方向,目前模式識別方法有三種,即統(tǒng)計識別法、句法結(jié)構(gòu)模式識別法和模糊識別法。應(yīng)用廣泛
35、的有文字識別(ORC)技術(shù)就是應(yīng)用模式識別技術(shù)開發(fā)出來的。</p><p> 3.2圖像和顏色系統(tǒng)</p><p><b> 1. 圖像</b></p><p> 普通的顯示器屏幕是由許多的點構(gòu)成的,這些點稱為像素。顯示時采用掃描的方式:電子槍每次從左到右掃描一行,為每個像素著色,然后再從上到下掃描整個屏幕,利用人眼的視覺暫留效應(yīng)就可以顯
36、示出一屏完整的圖像。為了防止閃爍,每秒要重復(fù)幾十次掃描過程。我們常說的屏幕分辨率為1024*768像素,刷新頻率為85Hz,意思是每行掃描1024像素,一共要掃描768行,每秒重復(fù)掃描屏幕85次。一般刷新頻率大于80Hz時,人眼感受不到因屏幕刷新而產(chǎn)生的閃爍,這種顯示器被稱為位映像設(shè)備。所謂位映像,就是指一個二維的像素矩陣,位圖就是采用位映像方法顯示和存儲的圖像。</p><p> 對于彩色圖像,它的顯示必須從
37、三原色RGB概念說起。眾所周知,自然界中的所有顏色都可以由紅、綠、藍(lán)三原色組合而成。有的顏色有紅色成分多一些,其他成分少一些。針對含有紅色成分的多少,可以人為地分成0~255共256個等級。0級表示不含紅色部分,255級表示含有100%的紅色成分。同樣,綠色和藍(lán)色也可以被分成256級。這樣根據(jù)紅、綠、藍(lán)各種不同的組合可以表示出256*256*256(約1600萬)種顏色。[4]</p><p><b>
38、 2.調(diào)色板</b></p><p> 如果一幅圖像的每個像素都用其RGB分量來表示,那么圖像文件將變的非常大,實際上的做法不完全是這樣,下面舉一個例子:</p><p> 對一副200*200的16色圖像,它共有40000個像素,如果沒一個像素都用R、G、B3個分量表示,則一個像素需要3個字節(jié)(因為每個分量有256個級別,要用8位,即1個字節(jié)來表示,所以3個分量需要用3
39、個字節(jié))。這樣保存整個 圖像要用200*200*3,即120000字節(jié)。但是如果采用調(diào)用的方法,就能節(jié)省很多字節(jié)。</p><p> 對于16色圖像,圖中最多只有16種顏色,如果采用一個顏色表,表中的每一行記錄一種顏色的R、G、B值,這樣當(dāng)表示一個像素的顏色時,只需要指出該顏色是第幾行,即指出的該顏色在表中的索引值即可。例如表的第0行為(255,0,0),表示紅色,那么當(dāng)某個像素為紅色時,只需要標(biāo)明0即可。通過
40、顏色索引表來表示圖像,16種狀態(tài)可以用4位(bit)表示,所以一個像素要用半個字節(jié)。整個圖像要用200*200*0.5,即20000字節(jié),再加上顏色表占用3*16=48字節(jié),也不過20048字節(jié)。這樣一幅圖像整個占用的字節(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á)圖像的亮度信息而沒有顏色信息,因此,灰度圖像的每個像素點上只包含一個量化的灰度級(即灰度值),用來表示該點的亮度水平,并且通常用1個字節(jié)(8個二進(jìn)制位)來存儲灰度值。</p><p> 如果灰度值用1個字節(jié)表示,則可
42、以表示的正整數(shù)范圍是0到255,也就是說,像素灰度值取值在0到255之間,灰度技術(shù)為256級。注意到人眼對灰度的分辨能力通常在20到60級,因此,灰度值存儲以字節(jié)為單位即保證了人眼的分辨能力,又符合計算機(jī)數(shù)據(jù)尋址的習(xí)慣。在特殊應(yīng)用中,可能要采用更高的灰度級數(shù),例如CT圖像的灰度級數(shù)高達(dá)數(shù)千,需要采用12位或16位二進(jìn)制位來存儲,但這類圖像通常都采用專用的顯示設(shè)備和軟件來進(jìn)行顯示和處理。[7]</p><p>&l
43、t;b> 2.彩色圖像</b></p><p> 彩色圖像的數(shù)據(jù)不僅包含亮度信息,還包含顏色信息。彩色的表示方法是多樣化的,最常見的是三基色模型,例如RGB三基色模型,利用RGB三基色可以混合成任意顏色。因此RGB模型在各種彩色成像設(shè)備和彩色顯示設(shè)備中使用,常規(guī)的彩色圖像也都是用RGB三基色來表示的,每個像素包括RGB三基色數(shù)據(jù),每個基色用1個字節(jié)(8位二進(jìn)制位)表示,則每個像素的數(shù)據(jù)為3個
44、字節(jié)(即24位二進(jìn)制位),這就是人們常說的24位真彩色。</p><p><b> 3.3位圖</b></p><p><b> 1.GDI位圖</b></p><p> GDI是圖形設(shè)備接口(Graphics Device Interface)的縮寫。GDI位圖是一種GDI對象,在Microsoft基本類(MFC)
45、庫中Cbitmap類來表示。在Cbitmap類對象中,包含一種和Windows的GDI模塊有關(guān)的Windows數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)是與設(shè)備相關(guān)的。應(yīng)用程序可以得到GDI位圖數(shù)據(jù)的一個備份,但是其中位圖的安排則完全依賴于顯示設(shè)備。我們可以將GDI位圖數(shù)據(jù)在同一臺計算機(jī)內(nèi)的不同應(yīng)用程序間任意傳遞,但是由于其對設(shè)備的依賴性,在不同類型計算機(jī)間的傳遞是沒有任何意義的。</p><p> Cbitmap類封裝了Windo
46、ws GDI位圖,同時提供了一些位圖的成員函數(shù)。在使用CBitmap對象時,首先要創(chuàng)建一個Cbitmap對象,然后把它選進(jìn)設(shè)備環(huán)境中,再調(diào)用其成員函數(shù)進(jìn)行處理,使用完畢后,把它從設(shè)備環(huán)境中選出并刪除。</p><p> 2.設(shè)備無關(guān)位圖(DIB)</p><p> DIB是設(shè)備無關(guān)位圖(Device-Independent Bitmap)的縮寫,它自帶顏色信息,因此調(diào)色板管理非常容易。
47、DIB也使打印時的灰度陰影的控制更加容易。任何運行Windows操作系統(tǒng)的計算機(jī)都可以處理DIB,它通常以BMP文件的形式被保存在磁盤中或者作為資源保存在EXE文件和DLL文件中。</p><p> (1)BMP圖像的DIB結(jié)構(gòu)</p><p> DIB 是標(biāo)準(zhǔn)的Windows位圖格式,BMP文件中包含了一個DIB。一個BMP文件大體上分成如下4個部分:</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個表項</p><p> 調(diào)色板16色DIB有16個表項或更少</p><p> 256色DIB誘256個表項或更少</p><p> 真彩色DIB沒有調(diào)色板</p><p> 每個表項長度為4字節(jié)(32位)</p><p> DIB Pixel
52、s像素按照每行每列的順序排列</p><p> DIB 圖像數(shù)據(jù)每一行的字節(jié)數(shù)必須是4的整倍數(shù)</p><p> 第1部分為位圖文件頭BITMAPFILEHEADER,它是一個結(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)的長度是固定的,為14個字節(jié)(WORD為無符號16位整數(shù),DWORD為無符號32位整數(shù)),各個域的說明如下:</p><p> bfType:指定文件類型,必須是0x4D42,即字符串“MB”,也就是說所有的“.bmp”文件的頭兩個字節(jié)都是“MB”。</p><p> bfSize:指定文件大
55、小,包括14個字節(jié)。</p><p> bfReserved1,bfReserved2:為保留字,不用考慮。</p><p> bfOffBits:為從文件頭到實際的位圖數(shù)據(jù)的偏移字節(jié)數(shù)。</p><p> 第2部分為位圖信息頭BITMAPINFOHEADER,它也是一個結(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> 這個結(jié)構(gòu)的長度也是固定的,為40個字節(jié)(WORD為無符號16位整數(shù),DWORD為無符號32位整數(shù),LONG為32位整數(shù))。各個域的說明如下。</p><p&g
59、t; biSize:指定這個結(jié)構(gòu)的長度,為40字節(jié)。</p><p> biWidth:指定圖像的寬度,單位是像素。</p><p> biHeight:指定圖像的高度,單位是像素。</p><p> biPlanes:必須是1,不用考慮。</p><p> biBitCount:指定表示顏色時藥用到的位數(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ù)據(jù)占用的字節(jié)數(shù),其實也可以從下面公式計算出來:</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,則該項可能為零。</p><p> biXPelsPerMerter:指定目標(biāo)設(shè)備的水平分辨率,單位是像素/米。</p><p> biYPelsPerMerter:指定目標(biāo)設(shè)備的垂直分辨率,單位是像素/米。</p><p> biClrUsed:指定圖像實際用到的
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ù)組,共有biClrUsed個元素(如果該值為零,則有2的biBitCount次冪個元素)。數(shù)組中每個元素的類型是一個RGBQUAD結(jié)構(gòu),占4個字節(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ù)據(jù)。對于用到調(diào)色板的位圖,圖像數(shù)據(jù)就是該像素顏色在調(diào)色
66、板中的索引值;對于真彩色圖,圖像數(shù)據(jù)就是實際的R、G、B值</p><p> (2)BMP圖像的存取</p><p> BMP文件分為4個部分,那么BMP文件的讀入也按照4個人組成部分依次進(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)來。</p><p> (3)DIB訪問函數(shù)</p><p> Windows支持一些重要的DIB訪問函數(shù)。這些函數(shù)都沒有被封裝到MFC中,所以我們需要參考msdn文檔來添加。下面介紹本程序用的訪問函數(shù):</p><p> SetDIB
68、itsToDevice:該函數(shù)直接在顯示器或打印機(jī)上顯示DIB。顯示時不進(jìn)行縮放,位圖的每一位對應(yīng)一個顯示像素或一個打印點。不能進(jìn)行縮放限制了它的實用。該函數(shù)不能像BitBlt函數(shù)那樣使用,因為BitBlt使用的是邏輯坐標(biāo)。</p><p> StrechDIBits:該函數(shù)按照與StretchBlt函數(shù)類似的方式將DIB直接顯示在顯示器或打印機(jī)上。</p><p> GetDIBit
69、s:該函數(shù)利用申請到的內(nèi)存,由GDI位圖來構(gòu)造DIB??梢詫IB的格式進(jìn)行控制,因為我們可以指定每個像素的顏色位數(shù),并且可以指定是否對它進(jìn)行壓縮。如果使用了壓縮格式,就必須對GetDIBits進(jìn)行兩次調(diào)用,一次用于計算需要的內(nèi)存,另一次來產(chǎn)生DIB數(shù)據(jù)。</p><p> CreateDIBitmap:該函數(shù)從DIB出發(fā)來創(chuàng)建GDI位圖。與所有這些DIB函數(shù)一樣,必須提供一個設(shè)備環(huán)境指針作為參數(shù)。這里我們需要
70、一個顯示器設(shè)備環(huán)境,不需要內(nèi)存設(shè)備環(huán)境。</p><p> CreateDIBSection:該函數(shù)是一個新的Win32函數(shù),它創(chuàng)建一個特殊的DIB,稱為DIB項,然后返回一個GDI位圖句柄。該函數(shù)為我們提供了DIB和GDI位圖最好的特性。我們可以直接訪問DIB的內(nèi)存,而且利用位圖句柄和內(nèi)存設(shè)備環(huán)境,還可以再DIB中調(diào)用GDI函數(shù)畫圖。</p><p> (4)ImgDib類的編寫&l
71、t;/p><p> 利用Windows現(xiàn)有的DIB訪問函數(shù),可以實現(xiàn)位圖的可視化編程。使用MFC編制一個基于單文檔、面向過程的位圖顯示與存儲程序。BMP文件讀寫實例在功能上完全一致的,只不過一個是可視化的編程環(huán)境,一個是控制臺的程序。聲明的這個類叫做ImgDib,里面封裝了DIB位圖處理所需要的基本的成員變量和成員函數(shù),這樣充分利用了面向?qū)ο蟪绦蛟O(shè)計的封裝、繼承等特性,又使得代碼易于維護(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;//每個像素占的位數(shù);</p><p><b> private:</b></p><p> LPBYTE m_pDib;//指向整個DIB的指針(包含BITM
74、APFILEHEHEDER,BITMATPINFOHEADER ,和顏色表)</p><p> LPBITMAPINFOHEADER m_pInfoHead;//圖像信息頭指針;</p><p> HPALETTE m_hPalette;//調(diào)色板指針;</p><p> int m_pColorTableLength;//顏色表長度;</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);//計算顏色表的長度;</p><p> protected:</p><p> int m_imgWidth;//圖像的寬。以像素為單位;</p>
79、<p> int m_imgHeight;//圖像的高,以像素為單位;};</p><p> 通過BMP文件讀取的方式生成DIB,也可以通過參數(shù)的傳遞方式生成DIB,本類始終都是一次為DIB的指針m_pdib分配內(nèi)存。</p><p> ImgDib類的代碼實現(xiàn)在文件ImgDib.cpp中</p><p> 構(gòu)造函數(shù)和析構(gòu)函數(shù):</p>
80、<p> 類的構(gòu)造函數(shù)用來完成數(shù)據(jù)成員的初始化工作,系統(tǒng)在創(chuàng)建類的對象時自動調(diào)用構(gòu)造函數(shù)。類的析構(gòu)函數(shù)用來釋放被分配的內(nèi)存空間,當(dāng)類的對象消失時系統(tǒng)自動調(diào)用該函數(shù)。</p><p> 第4章 經(jīng)典的邊緣檢測提取方法及實現(xiàn)</p><p> 4.1 Roberts算子</p><p> 邊緣,是指周圍像素灰度有階躍變化或屋頂?shù)茸兓哪切┫袼氐募?/p>
81、合。圖像的邊緣對應(yīng)著圖像灰度的不連續(xù)性。顯然圖像的邊緣很少是從一個灰度跳到另一個灰度這樣的理想狀況。真實圖像的邊緣通常都具有有限的寬度呈現(xiàn)出陡峭的斜坡狀。 </p><p> 邊緣的銳利程度由圖像灰度的梯度決定。梯度是一個向量,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> 因此最簡單的邊緣檢測算子是用圖像的垂直和水平差分來逼近梯度算子:</p><p&
83、gt;<b> [3] </b></p><p><b> 公式 4.4</b></p><p> 因此當(dāng)我想尋找邊緣的時候,最簡單的方法是對每一個像素計算出(4.4)的向量,然后求出它的絕對值,然后進(jìn)行閾值操作就可以了。利用這種思想就得到了Roberts算子:</p><p><b> [3]<
84、/b></p><p><b> 公式4.5</b></p><p> 它是一個兩個2*2模板作用的結(jié)果(標(biāo)注“.”的是當(dāng)前像素的位置)</p><p> 能查到的最早的有關(guān)邊緣檢測的文獻(xiàn)就是1959 年 B. Jule的[17],這算是最早的提出邊緣檢測和邊緣檢測算子的文章了。 </p><p> 196
85、3 年 Roberts[23]提出了邊緣檢測和邊緣檢測的這個簡單算子。Machine Perception of 3-D Solids 是 Roberts 在 1963 年寫的(MIT)博士畢業(yè)論文。這是一篇大家都應(yīng)該閱讀的論文。它是最早分析圖像中的邊緣、線、模型和圖形學(xué)的文章。作者提出的系統(tǒng)是第一個 3D 視覺系統(tǒng),其中有許多后來被大家常用的算子。它使用了三維物體的多邊形模型,通過計算圖像中的灰度數(shù)據(jù)尋找圖像中的“塊”然后對他最適當(dāng)
86、的表示,最后通過匹配來尋找物體。復(fù)雜的物體是由很多“塊”組成的,而“塊”是由邊緣組成的。作者使用他的簡單的2×2 算子得到了邊緣。相鄰的邊緣點組成線,如果線比較短,那么這條線就被忽略,如果線比較長,那么我們就把它延長直到它與其它的邊緣線相交與一點。然后通過對這些線的匹配來識別物體。一旦一個物體識別出來,表示這個物體的邊緣就從圖像的邊緣線表示上刪除,然后再對下一個物體進(jìn)行匹配。[4]</p><p>
87、4.2 Prewitt 算子和 Sobel 算子</p><p> Roberts 算子是直觀的也是簡單的,但是顯然效果不好。實踐中人們做了大量的實踐,總結(jié)出了一些經(jīng)驗。 </p><p> 1970 年左右 Prewitt[16]和 Sobel[25]分別提出了一個算子,這就是 Prewitt 算子和 Sobel 算子。 </p><p> Prewitt
88、邊緣檢測算子使用兩個有向算子(一個水平的,一個是垂直的,一般稱為模板),每一個逼近一個偏導(dǎo)數(shù):</p><p> PV= PH=</p><p> 如果我們用 Prewitt算子檢測圖像 M 的邊緣的話,我們可以先分別用水平算子和垂直算子對圖像進(jìn)行卷積,得到的是兩個矩陣,在不考慮邊界的情形下也是和原圖像同樣大小的 M1,M2,他們分別
89、表示圖像 M 中相同位置處的兩個偏導(dǎo)數(shù)。然后把 M1,M2 對應(yīng)位置的兩個數(shù)平方后相加得到一個新的矩陣G,G 表示 M 中各個像素的灰度的梯度值(一個逼近)。然后就可以通過閥值處理得到邊緣圖像。總的過程是: </p><p><b> 公式 4.6</b></p><p> Sobel 算子和 Prewitt算子的不同就在于使用的模板不一樣:</
90、p><p><b> [5]</b></p><p> S1= S2=</p><p> 我們假設(shè)圖像的灰度滿足下面這個關(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> 之所以這樣定義是為了滿足對稱性和電路設(shè)計的需要。 利用這兩個模板對當(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> 哪一個算子比較好?這個問題的答案取決于圖像的噪聲,如果在每個點噪聲都是相同的,那么 Prewitt算子是比較好的;如果靠近邊緣的噪聲是沿著邊緣的2倍,那么 Sobel 算子是比較好的。也就是算子的好壞取決于噪聲的結(jié)構(gòu)。事實上,它們存在
95、一些共同的問題: </p><p> A.他們的結(jié)果對噪聲很敏感,圖像的離散差分對噪聲比對原圖像更敏感; </p><p> B.可以通過先對圖像做平滑以改善結(jié)果,但是又會產(chǎn)生一個問題:會把一些靠在一起的邊緣平滑掉,而且會影響對邊緣的定位;[5]</p><p> 4.3 Kirsch算子</p><p> 1971年,R.Kirsc
96、h[34]提出了一種邊緣檢測的新方法:它使用了8個模板來確定梯度和梯度的方向。假設(shè)原來的 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)如果超過7就用 8去除取余數(shù)。注意到 k=0,1,...7,其實就是使用了 8個
98、模板了</p><p> 4.4 拉普拉斯算子</p><p> 拉普拉斯算子是對二維函數(shù)進(jìn)行運算的二階導(dǎo)數(shù)算子。通常使用的拉普拉斯算子如下面所示:</p><p> 由于拉普拉斯算子是一個二階導(dǎo)數(shù),它將在邊緣處產(chǎn)生一個陡峭的零交叉,如下圖所示由于噪聲點對邊緣檢測有一定的影響,所以高斯拉普拉斯算子是效果較好的邊緣檢測器。它把高斯平滑濾波器和拉普拉斯銳化濾波器結(jié)
99、合起來,先平滑去掉噪聲,再進(jìn)行邊緣檢測,所以效果更好。</p><p> 它的脈沖響應(yīng)和傳遞函數(shù)如下圖:</p><p> 圖4.1 脈沖響應(yīng)和傳遞函數(shù)[4] </p><p> 對數(shù)字圖像來說,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ù)字圖像在點的拉普拉斯算子,只有一個模板,它可以由點的灰度值減去該點鄰域的平均灰度值來求得。 </p><p> 4.5 高斯拉普拉斯邊緣檢測算子
101、</p><p> 因為圖像邊緣有大的灰度變化, 所以圖像的一階偏導(dǎo)數(shù)在邊緣處有局部最大值或最小值, 則二階偏導(dǎo)數(shù)在邊緣處會通過零點 (由正到負(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、對階躍狀邊緣, 二階導(dǎo)數(shù)在邊緣點出現(xiàn)零交叉, 即邊緣點兩旁二階導(dǎo)函數(shù)取異號, 據(jù)此, 對數(shù)字圖像{ f ( i , j) }的每個像素, Laplacian 算子取它關(guān)于 X 軸方向和 Y 軸方向的二階差分之和。</p><p><b> [4]</b></p><p><b> 公式 4.19</b></p><p>
105、; 這是一個與邊緣方向無關(guān)的邊緣檢測算子。若點發(fā)生零交叉, 則為階躍邊緣點。</p><p> 對屋頂狀邊緣, 在邊緣點的二階導(dǎo)數(shù)取極小值。據(jù)此, 對數(shù)字圖像的每個像素取它的關(guān)于 X 方向和 Y 方向的二階差分之和的相反數(shù), 即 Laplacian 算子的相反數(shù):</p><p> 公式 4.20[6]</p><p><b> 稱為邊緣圖像。&l
106、t;/b></p><p> 由于我們關(guān)心的是邊緣點位置而不是其周圍的實際灰度差, 因此, 一般都選擇與方向無關(guān)的邊緣檢測算子。用拉普拉斯算子檢測邊緣就是估算拉普拉斯算子的輸出, 找出它的零點位置。離散情況下, 拉普拉斯算子有幾種不同的模板計算形式:</p><p><b> 或或</b></p><p> 由于拉普拉斯算子是一個
107、二階導(dǎo)數(shù), 它將在邊緣處產(chǎn)生一個陡峭的零交叉。由于噪聲點對邊緣檢測有一定影響, 所以高斯 – 拉普拉斯算子是效果較好的邊緣檢測器。它把高斯平滑濾波器和拉普拉斯銳化濾波器結(jié)合起來, 先平滑掉噪聲, 再進(jìn)行邊緣檢測, 所以效果更好。通常的高斯 – 拉普拉斯算子是一個 5×5 的模板。[5]</p><p> 4.6邊緣檢測算子的實現(xiàn)</p><p> 1.Roberts算子的實現(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 算子的實現(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 算子的實現(xiàn):[1]</p><p> for(i=1;i<m_imgHeight-1;i++){<
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文-圖像邊緣檢測算法的分析實現(xiàn)
- 基于sobel算子的圖像邊緣檢測算法仿真設(shè)計【自動化畢業(yè)論文】
- 基于sobel算子的圖像邊緣檢測算法仿真設(shè)計【自動化畢業(yè)論文】
- 基于蟻群算法的圖像邊緣檢測附代碼畢業(yè)論文
- 畢業(yè)論文---基于matlab的數(shù)字圖像邊緣檢測算法研究
- 圖像邊緣檢測技術(shù)畢業(yè)論文
- 基于邊緣檢測的圖像分割方法研究-畢業(yè)論文
- 基于邊緣檢測的圖像分割方法研究-畢業(yè)論文
- 圖像邊緣檢測與提取算法的比較
- 基于邊緣檢測的圖像分割方法研究-畢業(yè)論文
- 畢業(yè)論文外文翻譯-圖像邊緣檢測
- 數(shù)字圖像邊緣檢測算法研究實現(xiàn)畢業(yè)論文
- 基于形狀的圖像特征提取及檢測算法仿真設(shè)計【自動化畢業(yè)論文】
- 畢業(yè)論文--數(shù)字圖像邊緣檢測算法的分析與實現(xiàn)
- 基于matlab的數(shù)字圖像與邊緣檢測畢業(yè)論文
- 基于matlab的數(shù)字圖像與邊緣檢測畢業(yè)論文
- 彩色圖像邊緣提取、矢量化 畢業(yè)論文
- 數(shù)字圖像邊緣檢測算法的研究和實現(xiàn)畢業(yè)論文
- 基于matlab的圖像邊緣檢測算法研究和仿真設(shè)計
- 基于matlab的圖像邊緣檢測算法研究和仿真設(shè)計
評論
0/150
提交評論