基于小波分析的邊緣檢測(cè)技術(shù)研究_第1頁
基于小波分析的邊緣檢測(cè)技術(shù)研究_第2頁
基于小波分析的邊緣檢測(cè)技術(shù)研究_第3頁
基于小波分析的邊緣檢測(cè)技術(shù)研究_第4頁
基于小波分析的邊緣檢測(cè)技術(shù)研究_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、基于小波分析的邊緣檢測(cè)技術(shù)研究摘 要:隨著數(shù)字圖像采集技術(shù)和處理技術(shù)的飛速發(fā)展,圖像已成為人們獲取信息的重要途徑,圖像的邊緣信息反映了圖像中最有價(jià)值的信息,邊緣檢測(cè)是圖像處理和計(jì)算機(jī)視覺中最重要、最經(jīng)典的課題之一。邊緣檢測(cè)方法比較多,但這些算法各有自己的特點(diǎn)和特定的應(yīng)用領(lǐng)域?,F(xiàn)在提出一種新的邊緣檢測(cè)算法,該算法以小波分析為基礎(chǔ),通過對(duì)原始圖像進(jìn)行小波變換實(shí)現(xiàn)邊緣檢測(cè),具有良好的檢測(cè)效果。小波變換在空域中分辨率隨頻率的大小而調(diào)節(jié),低頻粗疏,高頻精密,在小尺度參數(shù)的邊緣檢測(cè)算子能夠檢測(cè)出灰度發(fā)生的細(xì)變化,而大尺度參數(shù)的邊緣檢測(cè)算子能夠檢測(cè)出灰度發(fā)生的粗變化,使用小波多尺度變換可以更好的檢測(cè)圖像的邊

2、緣和細(xì)節(jié),能夠很好的將信號(hào)與噪聲分離關(guān)鍵詞:邊緣檢測(cè);小波變換;濾波;檢測(cè)1引言當(dāng)今社會(huì)可以說已經(jīng)進(jìn)入了數(shù)字化的信息時(shí)代,而占存儲(chǔ)空間最大的信息量就是圖像,圖像中所包含的信息量比所有其他媒體信息量的總和還要多。圖像處理簡(jiǎn)單的說就是把一副圖像根據(jù)一定的目的變成另一幅經(jīng)過修改的圖像,就是對(duì)圖像進(jìn)行加工和處理來滿足人們實(shí)際需求。邊緣是圖像的最基本的特征之一。邊緣的定義有很多種,常用的定義為:邊緣是指圖像中灰度發(fā)生急劇變化的區(qū)域,或者說是指周圍像素灰度有階躍變化或屋頂變化的那些像素的集合。它廣泛存在于物體與背景之間、物體與物體之間以及區(qū)域與區(qū)域之間。圖像邊緣和圖像內(nèi)在物理特性是直接相聯(lián)系的,所以邊緣蘊(yùn)

3、含著圖像的大量的內(nèi)在信息,也能夠反映出目標(biāo)輪廓的位置。而這些輪廓常常包含著我們?cè)趫D像處理時(shí)所感興趣目標(biāo)的重要特征,為人們描述或識(shí)別目標(biāo)以及解譯圖像提供了重要的特征信息,是圖像分割所依賴的重要特征。圖像邊緣是描述圖像最基本、最有意義的特征,故邊緣檢測(cè)是計(jì)算機(jī)視覺和圖像處理領(lǐng)域最經(jīng)典的研究課題之一,邊緣檢測(cè)的主要目的是對(duì)一圖像灰度變化進(jìn)行度量、檢測(cè)和定位。邊緣檢測(cè)器的工作既要將高頻信號(hào)從圖像中分離出來,又要區(qū)分邊緣和噪聲,準(zhǔn)確的標(biāo)定邊緣位置。小波被譽(yù)為“數(shù)學(xué)顯微鏡”,在時(shí)域和頻域都有良好的局部特性,以平滑函數(shù)的一階導(dǎo)數(shù)作為小波函數(shù)對(duì)圖像進(jìn)行小波變換,小波系數(shù)的模極大值即對(duì)應(yīng)圖像的邊緣。2 圖像邊緣

4、檢測(cè)技術(shù)圖像的邊緣是圖像的基本特征之一,它包含了圖像豐富的內(nèi)在信息(如方向、階躍性質(zhì)與形狀等)。邊緣檢測(cè)是圖像處理、視覺計(jì)算的最基礎(chǔ)的內(nèi)容,它直接決定著高層次的圖像處理、計(jì)算機(jī)視覺處理的成功與否。從噪聲中提取圖像邊界是圖像測(cè)試與分析的基礎(chǔ),邊緣檢測(cè)效果的好壞對(duì)圖像特征提取影響很大,是圖像預(yù)處理的關(guān)鍵一步。由于這些原因使得邊緣檢測(cè)在圖像處理、計(jì)算機(jī)視覺的預(yù)處理算法中占有著重要的地位。圖像邊緣檢測(cè)主要是對(duì)圖像灰度變化的度量、檢測(cè)和定位,自從1959年提出邊緣檢測(cè)以來,經(jīng)過五十多年的發(fā)展歷程,已提出許多不同的邊緣檢測(cè)方法。邊緣檢測(cè)的基本思想是先利用邊緣增強(qiáng)算子,突出圖像局部邊緣,然后定義像素的“邊緣

5、強(qiáng)度”,通過設(shè)置閾值的方法提取邊緣點(diǎn)集合。但是由于噪聲、圖像模糊等因素,導(dǎo)致檢測(cè)到的邊界可能會(huì)有間斷情況發(fā)生。邊緣檢測(cè)包含以下兩項(xiàng)內(nèi)容: (1) 用邊緣檢測(cè)算子求取邊緣點(diǎn)集合稱為瑣細(xì)邊緣檢測(cè)。(2) 在邊緣點(diǎn)集合中,依據(jù)某些準(zhǔn)則去除偽邊緣點(diǎn),并依據(jù)鄰域邊緣點(diǎn)的性質(zhì)來填充一些邊緣點(diǎn),將邊緣點(diǎn)連接成邊緣線。2.1圖像邊緣檢測(cè)基本步驟2.1.1 濾波邊緣檢測(cè)算法主要是基于圖像強(qiáng)度的一階和二階導(dǎo)數(shù),但導(dǎo)數(shù)的計(jì)算對(duì)噪聲很敏感,因此必須使用濾波器來改善與噪聲有關(guān)的邊緣檢測(cè)方法的性能。去除噪聲,但是大部分濾波器在去除噪聲的同時(shí)也丟失了部分邊緣信息,所以去除噪聲和增強(qiáng)邊緣是邊緣檢測(cè)中的一個(gè)矛盾問題,因此邊緣增

6、強(qiáng)和降低圖像噪聲之間需要取得一種平衡。實(shí)際應(yīng)用中圖像中不可避免的會(huì)含有噪聲,既要去除噪聲又要盡最大可能的保留邊緣的完整性是邊緣檢測(cè)的一個(gè)難點(diǎn)。2.1.1增強(qiáng)增強(qiáng)邊緣的基礎(chǔ)是確定圖像各點(diǎn)鄰域強(qiáng)度的變化值。增強(qiáng)算法可以將鄰域(或局部)強(qiáng)度有顯著變化的點(diǎn)突顯出來。邊緣增強(qiáng)一般都是通過計(jì)算梯度幅值來完成的。2.1.3檢測(cè)確定哪些是邊緣點(diǎn),哪些不是邊緣點(diǎn)。在圖像中有許多點(diǎn)的梯度幅值比較大,而這些點(diǎn)在特定的應(yīng)用領(lǐng)域中并不都是邊緣,所以應(yīng)該用某種條件來判定哪些是邊緣點(diǎn),哪些為非邊緣點(diǎn)。最簡(jiǎn)單的邊緣檢測(cè)判據(jù)是梯度幅值,通過某種方法確定一個(gè)臨界點(diǎn)即閾值,梯度幅值大于閾值的為邊緣點(diǎn),否則為非邊緣點(diǎn)。2.1.4定位

7、如果某一應(yīng)用場(chǎng)合要求確定邊緣位置,則邊緣的位置可在子像素分辨率上來估計(jì),邊緣的方位也可以被估計(jì)出來。原始圖像平滑圖像增強(qiáng)梯度或含過零點(diǎn)的圖像檢測(cè)邊緣點(diǎn)定位邊緣位置、方向?yàn)V波圖1 邊緣檢測(cè)的基本步驟在邊緣檢測(cè)算法中,前三個(gè)部分用得十分普遍。這是由于大多數(shù)場(chǎng)合下,僅僅需要指出邊緣出現(xiàn)在圖像某一像素點(diǎn)的附近,而沒有必要指出邊緣的精確位置。邊緣檢測(cè)的經(jīng)典檢測(cè)方法,是對(duì)原始圖像中像素的某個(gè)鄰域來構(gòu)造邊緣檢測(cè)算子。2.2經(jīng)典的邊緣檢測(cè)技術(shù)圖像邊緣檢測(cè)就是研究更好的邊緣檢測(cè)方法和檢測(cè)算子。邊緣檢測(cè)的實(shí)質(zhì)是采用某種算法來提取出圖像中對(duì)象與背景間的交線。我們將邊緣定義為圖像中灰度發(fā)生急劇變化的區(qū)域邊界。圖像灰度

8、的變化情況可以用圖像灰度分布的梯度來反映,因此我們可以用局部圖像微分技術(shù)來獲得邊緣檢測(cè)算子。經(jīng)典的邊緣檢測(cè)方法有一階導(dǎo)數(shù)極大值點(diǎn)算法(例如Robert算子、Sobel算了、Canny算子),二階導(dǎo)數(shù)零交叉點(diǎn)算法(例如LoG算子)等等。新的邊緣檢測(cè)方法有數(shù)學(xué)形態(tài)學(xué)的方法、模糊算子法、神經(jīng)網(wǎng)絡(luò)法、小波分析法、遺傳算法、動(dòng)態(tài)規(guī)劃法、分形理論法等等。下表列舉了幾個(gè)經(jīng)典的邊緣檢測(cè)算子及各算子特點(diǎn)。表1 各個(gè)算子的特點(diǎn)算子檢測(cè)邊緣最佳情況Roberts對(duì)具有陡峭的低噪聲的圖像效果較好。但是利用 Roberts 算子提取邊緣的結(jié)果是邊緣比較粗,因此邊緣定位不是很準(zhǔn)確。Sobel對(duì)灰度漸變和噪聲較多的圖像值處

9、理效果比較好。Sobel 算子對(duì)邊緣定位比較準(zhǔn)確。Prewitt對(duì)灰度漸變和噪聲較多的圖像值處理效果比較好。 Laplace經(jīng)常出現(xiàn)雙像素邊界,并且該檢測(cè)方法對(duì)噪聲比較敏感,所以很少用 Log算子來檢測(cè)邊緣,而是用它來判斷邊緣像素是位于圖像的明區(qū)還是暗區(qū)。Canny此方法不容易受噪聲的干擾,能夠檢測(cè)到真正的弱邊緣。該方法的優(yōu)點(diǎn)在于,使用兩種不同的閾值分別檢測(cè)強(qiáng)邊緣和弱邊緣,并且僅當(dāng)弱邊緣和強(qiáng)邊緣相連時(shí),才將弱邊緣包含在輸出圖像中。因此,這種方法不容易被噪聲“填充”,更容易檢測(cè)出真正的弱邊緣。3 小波變換理論基礎(chǔ)由于各種原因,圖像常常受到隨機(jī)噪聲的干擾。經(jīng)典的邊緣檢測(cè)方法由于引入了各種形式的微分

10、運(yùn)算,從而必然引起對(duì)噪聲的極度敏感,在其上執(zhí)行邊緣檢測(cè)的結(jié)果常常是把噪聲當(dāng)作邊緣點(diǎn)檢測(cè)出來,而真正的邊緣也由于受到噪聲干擾而沒有被檢測(cè)出來。因而對(duì)于有噪聲圖像來說,一種好的邊緣檢測(cè)方法應(yīng)具有良好的各種噪聲抑制能力,同時(shí)又有完備的邊緣檢測(cè)保持特性。3.1小波變換的特點(diǎn)小波變換是近年來興起的一種熱門信號(hào)處理方法,它良好的時(shí)一頻局部特性非常適合于圖像處理,所以得到了廣泛的應(yīng)用。不同尺度下,圖像灰度的急劇變化點(diǎn)的集合對(duì)應(yīng)圖像的邊緣,即表現(xiàn)為信號(hào)的奇異性,這就要求在提取邊緣時(shí)運(yùn)用多尺度思想,而小波對(duì)圖像信號(hào)的多分辨率分析非常適合檢測(cè)信號(hào)的奇異性,所以小波是圖像邊緣處理的一種有力工具。在小波多分辨分析中,

11、引入了尺度函數(shù)和小波函數(shù)。多尺度小波邊緣檢測(cè)就是利用一個(gè)平滑函數(shù),在不同尺度下平滑所檢測(cè)的信號(hào),根據(jù)一次、二次微分找出它的突變點(diǎn)。一次微分的極大值點(diǎn)對(duì)應(yīng)二次微分的零交叉點(diǎn)和平滑后信號(hào)的拐點(diǎn)。用小波變換提取邊緣的思想如下:利用小波的多尺度特性可以實(shí)現(xiàn)在大尺度下抑制噪聲,可靠地識(shí)別邊緣;在小尺度下精確定位;綜合不同尺度下的邊緣圖像得到提取結(jié)果。多分辨分析框架為正交(包括單正交和雙正交)小波基的構(gòu)造提供了理論基礎(chǔ)。在這一框架下,基本小波的選取具有很大的靈活性,從這點(diǎn)看,小波分析比傅立葉分析具有更廣泛的適用性。我們知道,小波變換的原理是來源于傅立葉變換,但是它比傳統(tǒng)的傅立葉變換有更多優(yōu)點(diǎn),比如:(1)

12、小波變換可以覆蓋整個(gè)頻域;(2)可以通過選取合適濾波器,減少或除去提取的不同特征之間的相關(guān)性;(3) 具有“變焦特性”,低頻段可用高頻率分辨率和低時(shí)間分辨率,在高頻段可用低頻率分辨率和高時(shí)間分辨率;(4) 小波變換在實(shí)現(xiàn)上有快速算法(Mallat小波分析算法);(5) 小波變換具有良好的時(shí)頻局部化、尺度變換和方向特征。所以小波變換是一種多分辨率分析工具,為不同尺度上信號(hào)的的分析和表征提供了精確和統(tǒng)一框架。當(dāng)小波函數(shù)尺度較大時(shí),抑制噪聲能力增強(qiáng),提取邊緣細(xì)節(jié)的能力變差;當(dāng)小波函數(shù)尺度較小時(shí),抑制噪聲能力變?nèi)?,但提取邊緣?xì)節(jié)的能力增強(qiáng)。這樣很好解決了噪聲抑制與圖像邊緣細(xì)節(jié)提取之間的矛盾。并且小波變

13、換具有檢測(cè)局域突變的能力(即小波變換的奇異性),而圖像邊緣正是信號(hào)變化率最大的地方,因此小波變換是檢測(cè)邊緣的良好工具3.2小波變換中的多尺度思想圖像在不同尺度上的小波變換都提供了一定的邊緣信息。當(dāng)小尺度時(shí),圖像的邊緣細(xì)節(jié)信息較為豐富,邊緣定位精度較高,但易受到噪聲的干擾;大尺度時(shí),圖像的邊緣穩(wěn)定,抗噪性好,但定位精度差。在實(shí)際應(yīng)用中經(jīng)常存在著去除噪聲和準(zhǔn)確定位之間的矛盾。多尺度邊緣檢測(cè)的基本思想就是沿梯度方向,分別用幾個(gè)不同尺度的邊緣檢測(cè)算子在相應(yīng)點(diǎn)上檢測(cè)模極大值的變換情況,并通過對(duì)閾值的選取,再在不同尺度上進(jìn)行綜合得到最終邊緣圖像,可以較好的解決噪音和定位精度之間的矛盾。多尺度邊緣綜合不是把

14、各個(gè)尺度的邊緣簡(jiǎn)單的加在一起,我們知道在不同的尺度下同一個(gè)邊緣的響應(yīng)是不相同的,在不同的尺度下邊緣增強(qiáng)的位置也是不相同的,多個(gè)尺度下的邊緣簡(jiǎn)單相加的結(jié)果會(huì)造成邊緣冗余,同時(shí)濾除噪聲的目的也沒有達(dá)到。根據(jù)多尺度邊緣在位置、強(qiáng)度和方向上的聯(lián)系,通過邊緣繼承和擴(kuò)展來實(shí)現(xiàn)多尺度邊緣的融合。4 基于小波變換的圖像邊緣檢測(cè)小波分析作為新興學(xué)科迅速發(fā)展起來,由于其具有良好的時(shí)頻局部特征,被廣泛的應(yīng)用到圖像處理中。小波具有天然的多尺度特征,對(duì)圖像信號(hào)的多分辨率分析能夠把圖像分解成交織在一起的多尺度成分,并對(duì)大小不同的尺度成分采用相應(yīng)粗細(xì)的時(shí)域或空域取樣步長,從而不斷地聚焦到對(duì)象的任意微小細(xì)節(jié),被譽(yù)為“數(shù)學(xué)顯微

15、鏡”。非常適合提取圖像信號(hào)的局部特征,給圖像邊緣檢測(cè)帶來了新的方法。邊緣檢測(cè)算子的尺度是指平滑算子的尺寸,尺度越大濾除噪聲的能力越強(qiáng),但得到的圖像的一些弱邊緣會(huì)被濾除掉;相反小尺度能得到圖像的更多的弱邊緣,但是也把更多的噪聲點(diǎn)當(dāng)作了邊緣點(diǎn)檢測(cè)出來。多尺度算子就是盡量在兩者之間取得一種平衡,既要有效的濾除噪聲又能得到較完整的邊緣。4.1基于邊緣檢測(cè)的小波基函數(shù)選取準(zhǔn)則在圖像邊緣檢測(cè)中,小波函數(shù)的選取對(duì)圖像邊緣的檢測(cè)結(jié)果影響非常大,在尺度一定時(shí),小波變換的效果就相當(dāng)于對(duì)圖像進(jìn)行帶通濾波,抑制了一部分噪聲,同時(shí)也濾除一部分模糊邊緣。因此合理的選擇小波函數(shù)非常重要,應(yīng)該選擇一個(gè)去噪特性好的小波,在濾除

16、噪聲的同時(shí)又能提取到效果好的邊緣。邊緣在圖像中為灰度發(fā)生突變的點(diǎn),表現(xiàn)為圖像的高頻分量,而圖像中的主要部分為低頻部分,為“直流”分量。為了得到好的邊緣檢測(cè)效果,選取邊緣檢測(cè)小波基的一般應(yīng)遵循的準(zhǔn)則為:準(zhǔn)則一:作為圖像邊緣檢測(cè)濾波器,邊緣檢測(cè)小波應(yīng)選用是高通(或帶通)濾波器,它對(duì)“直流”分量的濾波響應(yīng)為零,對(duì)低頻分量的響應(yīng)受到抑制。將濾波器的脈沖響應(yīng)函數(shù)分解為奇對(duì)稱和偶對(duì)稱兩部分: 其中, ??梢宰C明,當(dāng)邊緣信號(hào)函數(shù)是奇函數(shù)時(shí),濾波器的脈沖響應(yīng)的偶函數(shù)分量的作用僅僅是降低緣檢測(cè)質(zhì)量,當(dāng)邊緣信號(hào)函數(shù)是偶函數(shù)時(shí),濾波器的脈沖響應(yīng)的奇數(shù)分量的作用也僅僅是降低邊緣檢測(cè)質(zhì)量。由此,我們得到選擇小波基的準(zhǔn)則

17、二。準(zhǔn)則二:小波基函數(shù)應(yīng)與被檢測(cè)邊緣函數(shù)的奇偶對(duì)稱性一致,檢測(cè)階躍邊緣的小波應(yīng)是奇函數(shù)。圖像邊緣點(diǎn)的灰度突變指的是局部范圍內(nèi)圖像灰度有較大的起落。每一個(gè)孤立的邊緣點(diǎn)都是圖像的一個(gè)局部特性。上面提到的階躍邊緣點(diǎn)對(duì)應(yīng)于圖像灰度變化函數(shù)的一階導(dǎo)數(shù)的極值點(diǎn)或二階導(dǎo)數(shù)的過零點(diǎn)都是針對(duì)圖像局部范圍來說的。為了檢測(cè)圖像灰度的這種局部變化,則有選擇小波基的準(zhǔn)則三。準(zhǔn)則三:圖像邊緣檢測(cè)的小波應(yīng)該是一個(gè)窗口函數(shù),最好是緊支窗口函數(shù)。準(zhǔn)則一事實(shí)上就是一個(gè)函數(shù)稱為小波函數(shù)的必要條件,當(dāng)我們選擇小波函數(shù)作為圖像邊緣檢測(cè)濾波器時(shí),這一點(diǎn)自然就滿足。小波基函數(shù)種類很多,也可以自己構(gòu)造,根據(jù)上述三準(zhǔn)則,我們選擇的用于檢測(cè)階躍

18、邊緣的小波基應(yīng)是一個(gè)緊支的奇函數(shù)小波,在選擇小波的時(shí)候,結(jié)合Canny提出的判定邊緣檢測(cè)算子的三個(gè)準(zhǔn)則,來選擇最優(yōu)的用于邊緣檢測(cè)的小波函數(shù) 。4.2利用小波變換提取邊緣根據(jù)上面所述的利用小波變換進(jìn)行邊緣提取的基本原理,對(duì)于數(shù)字圖像可設(shè)計(jì)出下述計(jì)算機(jī)實(shí)現(xiàn)方法:(1)選擇MRA濾波器、邊界拓展方式、分解尺度J和閾值T。(2)對(duì)圖像的每一行像素做一維小波變換,并取絕對(duì)值。(3)對(duì)圖像的每一列像素做一維小波變換重復(fù)步驟(2)。(4) 分別求取行列小波變換的模值極大值點(diǎn),其余點(diǎn)置0。(5) 若,則令,否則。(6) 將顯示出來即為所求邊緣圖像。(7) 重復(fù)步驟2-5,直至分解尺度J。4.3利用小波變換提取

19、邊緣原理設(shè)是二維平滑函數(shù)。把它沿x1,x2兩個(gè)方向上的一階導(dǎo)數(shù)作為兩個(gè)基本小波: (1) (2)再令: (3) (4)其中,對(duì)任意二維函數(shù)f(x1,x2)L2(R2),其小波變換有兩個(gè)分量:沿x1方向: (5)沿x2方向: (6)其中*代表而為卷積,他的具體含義是:,i=1或2。 (7)小波分量可簡(jiǎn)記成矢量形式: (8)其中是被平滑后的圖像。(8)式表明WT1和WT2分別反映此圖像灰度沿x1和x2方向的梯度。通常取a為2j(jZ),而f(x1,x2)的二進(jìn)小波變換為矢量: (9)其模值是: (10)其幅角(與x1方向的夾角)是: (11)邊緣定義為ModWTf取極值之處,其方向則沿與ArgWT

20、f垂直的方向。但是噪聲也是灰度突變點(diǎn),也是極大值點(diǎn)。因?yàn)樾〔ň哂心芰考械男阅?,它能將信?hào)能量集中在少數(shù)小波系數(shù)上,所以邊緣的小波系數(shù)幅值比較大,而噪聲能量比較分散,小波系數(shù)幅值較小。所以用平滑函數(shù)的一階導(dǎo)數(shù)作小波函數(shù)對(duì)圖像進(jìn)行小波變換,大于一定閾值的小波系數(shù)的模極大值點(diǎn)即對(duì)應(yīng)圖像的邊緣點(diǎn),這就是小波變換用于邊緣檢測(cè)的原理。4.4小波多尺度邊緣檢測(cè)算法多尺度邊緣檢測(cè)是將圖像f(x) ,通過個(gè)函數(shù)的伸縮作卷積,然后使用canny算法實(shí)現(xiàn)圖像的邊緣檢測(cè)計(jì)算上就是與兩個(gè)小波函數(shù)的兩個(gè)偏導(dǎo)數(shù)作用: (12) (13)應(yīng)用小波的圖像邊緣檢測(cè)在小同尺度上的變換結(jié)果都提供了一定的邊緣信息。小尺度的時(shí)候,圖像

21、邊緣細(xì)節(jié)豐富,定位精度高,但是容易受到噪聲的干擾;大尺度的時(shí)候,邊緣穩(wěn)定,抗噪性好,但是定位精度低。多尺度邊緣檢測(cè)在不同尺度的小波變換圖像上,沿梯度力向檢測(cè)模極大值,并通過閉值的選取,得到對(duì)應(yīng)尺度上的邊緣圖像在各尺度上進(jìn)行綜合得到最終邊緣圖像,可以較好的解決噪聲和定位的矛盾。4.5實(shí)驗(yàn)結(jié)果分析基于小波變換的模極大值理論對(duì)圖像進(jìn)行邊緣檢測(cè),得到了較好的檢測(cè)效果,利用小波變換來檢測(cè)圖像的邊緣,其特點(diǎn)是可以調(diào)整尺度當(dāng)尺度較小時(shí),產(chǎn)生了具有噪聲的小連續(xù)邊界;當(dāng)尺度較大時(shí),此時(shí)抗噪較好當(dāng)圖像的信噪比較小時(shí),選用小尺度可以確定邊界的位置,但小能區(qū)分實(shí)際邊界和噪聲信號(hào);選用大尺度可以有效的濾除噪聲信號(hào),卻無

22、法確定實(shí)際邊界的位置。因此,根據(jù)圖像的特征和檢測(cè)的要求選取適當(dāng)?shù)某叨取K惴ú捎胢atlab語言進(jìn)行仿真實(shí)驗(yàn),圖2為邊緣檢測(cè)的原lena圖像,圖3為多尺度檢測(cè)結(jié)果。 圖2 原lena圖像 圖3多尺度檢測(cè)結(jié)果5 結(jié)論由仿真結(jié)果可以發(fā)現(xiàn):基于小波多尺度相關(guān)的特征邊緣提取算法不僅保留了圖像中重要的細(xì)節(jié)邊緣信息,而且又剔除了大量的兀余邊緣和虛假邊緣,從而有效地提取出了圖像的特征邊緣,為后續(xù)的目標(biāo)識(shí)別提供了可靠的信息。小波分析作為新興學(xué)科迅速發(fā)展起來,由于其具有良好的時(shí)頻局部特征和天然的多尺度分析能力,被廣泛的應(yīng)用到圖像處理中。由于小波變換有多尺度的特點(diǎn),可以利用多尺度特性,通過細(xì)節(jié)和粗節(jié)的逼近,將圖像的

23、空間信息較好的描述。在邊緣和噪聲的取舍中, 由于二者均為高頻信號(hào),很難用頻帶劃分。小波變換的方法,使得在大尺度下抑制噪聲,小尺度下得到邊緣的真實(shí)位置;而傳統(tǒng)的和經(jīng)典的邊緣檢測(cè)算法則在此問題上不能提供有效的解決辦法,與傳統(tǒng)的和經(jīng)典的邊緣檢測(cè)算法相比,小波變換方法在識(shí)別邊緣特征方面較強(qiáng)。參考文獻(xiàn):張雪基于小波變換的圖像邊緣檢測(cè)的研究D濟(jì)南:山東大學(xué)廖劍利基于小波變換的圖像邊緣檢測(cè)方法的研究D長沙:湖南大學(xué)董鴻燕邊緣檢測(cè)的若干技術(shù)研究D長沙:國防科技大學(xué),2008.馬艷,張治輝幾種邊緣檢測(cè)算子的比較J工礦自動(dòng)化,2004,(1): 54 56.王雪松,宋凱基于多尺度小波變換的邊緣檢測(cè)算法J沈陽理工人

24、學(xué)學(xué)報(bào),2008, 8: 1619.王瑋釗,李占賢,張進(jìn)基于小波變換的多尺度圖像邊緣檢測(cè)算法J河北理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2009, 8: 8893.孫琰基于小波變換的圖像邊緣檢測(cè)技術(shù)D西安,2004, 2-4. 楊福生.小波變換的工程分析與應(yīng)用M.北京:科學(xué)出版社.1999.彭玉華.小波變換與工程應(yīng)用M.北京:科學(xué)出版社.1999.Z11ANG Lei, Paul Bao. A Wavelet-Based Edge Detection Method by Scale Multiplication.C /16th International Conference on Pattern Re

25、cognition, 2002: 501-504.賈天旭,鄭南寧.基于Bubble小波的多尺度邊緣提取J.電子報(bào),1996,24(4):1212123附錄資料:不需要的可以自行刪除 C語言圖形模式速成第一節(jié) 圖形模式的初始化Turbo C 提供了非常豐富的圖形函數(shù),所有圖形函數(shù)的原型均在graphics. h 中,本節(jié)主要介紹圖形模式的初始化、獨(dú)立圖形程序的建立、基本圖形功能、圖形窗口以及圖形模式下的文本輸出等函數(shù)。另外,使用圖形函數(shù)時(shí)要確保有顯示器圖形驅(qū)動(dòng)程序*.BGI,同時(shí)將集成開發(fā)環(huán)境options/Linker中的Graphics lib選為on,只有這樣才能保證正確使用圖形函數(shù)。 不

26、同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器,在不同模式下也有不同分辨率。因此,在屏幕作圖之前,必須根據(jù)顯示器適配器種類將顯示器設(shè)置成為某種圖形模式,在未設(shè)置圖形模式之前,微機(jī)系統(tǒng)默認(rèn)屏幕為文本模式(80列,25行字符模式),此時(shí)所有圖形函數(shù)均不能工作。設(shè)置屏幕為圖形模式,可用下列圖形初始化函數(shù):void far initgraph(int far *gdriver, int far *gmode,char *path);其中g(shù)driver和gmode分別表示圖形驅(qū)動(dòng)器和模式,path是指圖形驅(qū)動(dòng)程序所在的目錄路徑。有關(guān)圖形驅(qū)動(dòng)器、圖形模式的符號(hào)常數(shù)及對(duì)應(yīng)的分辨率見graphics

27、. h。圖形驅(qū)動(dòng)程序由Turbo C出版商提供,文件擴(kuò)展名為.BGI。 根據(jù)不同的圖形適配器有不同的圖形驅(qū)動(dòng)程序。例如對(duì)于EGA、 VGA 圖形適配器就調(diào)用驅(qū)動(dòng)程序EGAVGA.BGI。#include stdio.h#include graphics.hint main()int gdriver, gmode;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;有時(shí)編程者并

28、不知道所用的圖形顯示器適配器種類,或者需要將編寫的程序用于不同圖形驅(qū)動(dòng)器,Turbo C 提供了一個(gè)自動(dòng)檢測(cè)顯示器硬件的函數(shù),其調(diào)用格式為:void far detectgraph(int *gdriver, *gmode);其中g(shù)driver和gmode的意義與上面相同。 自動(dòng)進(jìn)行硬件測(cè)試后進(jìn)行圖形初始化:#include stdio.h#include graphics.hint main()int gdriver, gmode;detectgraph(&gdriver, &gmode); /*自動(dòng)測(cè)試硬件*/printf(the graphics driver is %d, mode i

29、s %dn,gdriver,gmode); /*輸出測(cè)試結(jié)果*/getch();initgraph(&gdriver, &gmode, C:TC2.0BGI);/* 根據(jù)測(cè)試結(jié)果初始化圖形*/bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;上例程序中先對(duì)圖形顯示器自動(dòng)檢測(cè),然后再用圖形初始化函數(shù)進(jìn)行初始化設(shè)置,但Turbo C提供了一種更簡(jiǎn)單的方法, 即用gdriver=DETECT 語句后再跟initgraph()函數(shù)就行了。采用這種方法后,上例可改為:#include stdio.h#incl

30、ude graphics.hint main()int gdriver=DETECT, gmode;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(50, 50, 150, 30, 50, 1);getch();closegraph();return 0;另外,Turbo C 提供了退出圖形狀態(tài)的函數(shù)closegraph(),其調(diào)用格式為:void far closegraph(void);第二節(jié) 屏幕顏色的設(shè)置和清屏函數(shù)對(duì)于圖形模式的屏幕顏色設(shè)置,同樣分為背景色的設(shè)置和前景色的設(shè)置。在Turbo C中分別用下面兩個(gè)函數(shù): 設(shè)置背景色: void f

31、ar setbkcolor(int color);設(shè)置作圖色: void far setcolor(int color);其中color 為圖形方式下顏色的規(guī)定數(shù)值,對(duì)EGA,VGA顯示器適配器,有關(guān)顏色的符號(hào)常數(shù)及數(shù)值見graphics.h。清除圖形屏幕內(nèi)容但不清除圖形背景使用清屏函數(shù),其調(diào)用格式如下: voide far cleardevice(void);#include stdio.h#include graphics.hint main()int gdriver, gmode, i,aa;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2

32、.0BGI); /*圖形初始化*/setbkcolor(0); /*設(shè)置圖形背景*/cleardevice();for(i=0; i=15; i+)setcolor(i); /*設(shè)置不同作圖色*/circle(320, 240, 20+i*10); /*畫半徑不同的圓*/getch();for(i=0; i=15; i+)setbkcolor(i); /*設(shè)置不同背景色*/cleardevice();circle(320, 240, 20+i*10);getch();aa=getmaxcolor();printf(maxcolor=%d,aa);getch();closegraph();ret

33、urn 0;另外,TURBO C也提供了幾個(gè)獲得現(xiàn)行顏色設(shè)置情況的函數(shù)。 int far getbkcolor(void); 返回現(xiàn)行背景顏色值。int far getcolor(void); 返回現(xiàn)行作圖顏色值。int far getmaxcolor(void); 返回最高可用的顏色值。第三節(jié) 基本畫圖函數(shù)基本圖形函數(shù)包括畫點(diǎn),線以及其它一些基本圖形的函數(shù)。本節(jié)對(duì)這些函數(shù)作一全面的介紹。 、畫點(diǎn). 畫點(diǎn)函數(shù) void far putpixel(int x, int y, int color); 該函數(shù)表示有指定的象元畫一個(gè)按color 所確定顏色的點(diǎn)。對(duì)于顏色color的值可從表3中獲得而對(duì)

34、x, y是指圖形象元的坐標(biāo)。在圖形模式下,是按象元來定義坐標(biāo)的。對(duì)VGA適配器,它的最高分辨率為640 x480,其中640為整個(gè)屏幕從左到右所有象元的個(gè)數(shù),480為整個(gè)屏幕從上到下所有象元的個(gè)數(shù)。屏幕的左上角坐標(biāo)為(0,0),右下角坐標(biāo)為(639, 479),水平方向從左到右為x 軸正向,垂直方向從上到下為y軸正向。TURBO C的圖形函數(shù)都是相對(duì)于圖形屏幕坐標(biāo),即象元來說的。關(guān)于點(diǎn)的另外一個(gè)函數(shù)是: int far getpixel(int x, int y); 它獲得當(dāng)前點(diǎn)(x, y)的顏色值。 II、有關(guān)坐標(biāo)位置的函數(shù) int far getmaxx(void);返回x軸的最大值。in

35、t far getmaxy(void);返回y軸的最大值。int far getx(void); 返回游標(biāo)在x軸的位置。void far gety(void); 返回游標(biāo)有y軸的位置。void far moveto(int x, int y); 移動(dòng)游標(biāo)到(x, y)點(diǎn),不是畫點(diǎn),在移動(dòng)過程中亦畫點(diǎn)。void far moverel(int dx, int dy); 移動(dòng)游標(biāo)從現(xiàn)行位置(x, y)移動(dòng)到(x+dx, y+dy)的位置,移動(dòng)過程中不畫點(diǎn)。、畫線I. 畫線函數(shù)TURBO C提供了一系列畫線函數(shù): void far line(int x0, int y0, int x1, int y

36、1); 畫一條從點(diǎn)(x0, y0)到(x1, y1)的直線。void far lineto(int x, int y); 畫一作從現(xiàn)行游標(biāo)到點(diǎn)(x, y)的直線。void far linerel(int dx, int dy); 畫一條從現(xiàn)行游標(biāo)(x,y)到按相對(duì)增量確定的點(diǎn)(x+dx, y+dy)的直線。void far circle(int x, int y, int radius); 以(x, y)為圓心,radius為半徑,畫一個(gè)圓。void far arc(int x, int y, int stangle, int endangle,int radius); 以(x,y)為圓心,r

37、adius為半徑,從stangle開始到endangle結(jié)束(用度表示)畫一段圓弧線。在TURBO C中規(guī)定x軸正向?yàn)? 度,逆時(shí)針方向旋轉(zhuǎn)一周, 依次為90,180, 270和360度(其它有關(guān)函數(shù)也按此規(guī)定,不再重述)。 void ellipse(int x, int y, int stangle, int endangle,int xradius,int yradius);以(x, y)為中心,xradius,yradius為x軸和y軸半徑,從角stangle 開始到endangle結(jié)束畫一段橢圓線,當(dāng)stangle=0,endangle=360時(shí), 畫出一個(gè)完整的橢圓。void far

38、 rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)為左上角,(x2, y2)為右下角畫一個(gè)矩形框。 void far drawpoly(int numpoints, int far *polypoints); 畫一個(gè)頂點(diǎn)數(shù)為numpoints,各頂點(diǎn)坐標(biāo)由polypoints給出的多邊形。polypoints整型數(shù)組必須至少有2 倍頂點(diǎn)數(shù)個(gè)無素。每一個(gè)頂點(diǎn)的坐標(biāo)都定義為x,y,并且x在前。值得注意的是當(dāng)畫一個(gè)封閉的多邊形時(shí),numpoints 的值取實(shí)際多邊形的頂點(diǎn)數(shù)加一,并且數(shù)組polypoints中第一個(gè)和最后一個(gè)點(diǎn)的坐標(biāo)相同。下面舉一

39、個(gè)用drawpoly()函數(shù)畫箭頭的例子。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;int arw16=200,102,300,102,300,107,330,100,300,93,300,98,200,98,200,102;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(12); /*設(shè)置作圖顏色*/drawpoly(8, arw); /*畫一箭頭*/getch

40、();closegraph();return 0;II、設(shè)定線型函數(shù)在沒有對(duì)線的特性進(jìn)行設(shè)定之前,TURBO C 用其默認(rèn)值,即一點(diǎn)寬的實(shí)線,但TURBO C 也提供了可以改變線型的函數(shù)。線型包括:寬度和形狀。其中寬度只有兩種選擇:一點(diǎn)寬和三點(diǎn)寬。而線的形狀則有五種。下面介紹有關(guān)線型的設(shè)置函數(shù)。void far setlinestyle(int linestyle,unsigned upattern,int thickness);該函數(shù)用來設(shè)置線的有關(guān)信息,其中l(wèi)inestyle是線形狀的規(guī)定,見graphics.h。對(duì)于upattern,只有l(wèi)inestyle選USERBIT_LINE 時(shí)才

41、有意義 (選其它線型,uppattern取0即可)。此時(shí)uppattern的16位二進(jìn)制數(shù)的每一位代表一個(gè)象元,如果那位為1,則該象元打開,否則該象元關(guān)閉。 void far getlinesettings(struct linesettingstypefar *lineinfo);該函數(shù)將有關(guān)線的信息存放到由lineinfo 指向的結(jié)構(gòu)中,表中l(wèi)inesettingstype的結(jié)構(gòu)如下:struct linesettingstypeint linestyle;unsigned upattern;int thickness;例如下面兩句程序可以讀出當(dāng)前線的特性 struct linesetti

42、ngstype *info;getlinesettings(info);void far setwritemode(int mode);該函數(shù)規(guī)定畫線的方式。如果mode=0,則表示畫線時(shí)將所畫位置的原來信息覆蓋了(這是TURBO C的默認(rèn)方式)。如果mode=1, 則表示畫線時(shí)用現(xiàn)在特性的線與所畫之處原有的線進(jìn)行異或(XOR)操作,實(shí)際上畫出的線是原有線與現(xiàn)在規(guī)定的線進(jìn)行異或后的結(jié)果。因此,當(dāng)線的特性不變,進(jìn)行兩次畫線操作相當(dāng)于沒有畫線。有關(guān)線型設(shè)定和畫線函數(shù)的例子如下所示。#include stdio.h#include graphics.hint main()int gdriver, g

43、mode, i;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(GREEN);circle(320, 240, 98);setlinestyle(0, 0, 3); /*設(shè)置三點(diǎn)寬實(shí)線*/setcolor(2);rectangle(220, 140, 420, 340);setcolor(WHITE);setlinestyle(4, 0 xaaaa, 1);/*設(shè)置一點(diǎn)寬用戶定義線*/line(220, 240, 420, 240);line(320,

44、140, 320, 340);getch();closegraph();return 0;第四節(jié) 基本圖形的填充填充就是用規(guī)定的顏色和圖模填滿一個(gè)封閉圖形。 一般是先畫輪廓再填充。TURBO C提供了一些先畫出基本圖形輪廓, 再按規(guī)定圖模和顏色填充整個(gè)封閉圖形的函數(shù)。在沒有改變填充方式時(shí),TURBO C 以默認(rèn)方式填充。 void far bar(int x1, int y1, int x2, int y2);確定一個(gè)以(x1,y1)為左上角,(x2,y2)為右下角的矩形窗口,再按規(guī)定圖模和顏色填充。說明:此函數(shù)不畫出邊框,所以填充色為邊框。void far bar3d(int x1, int

45、 y1, int x2, int y2,int depth,int topflag);當(dāng)topflag為非0時(shí), 畫出一個(gè)三維的長方體。當(dāng)topflag為0時(shí),三維圖形不封頂,實(shí)際上很少這樣使用。說明: bar3d()函數(shù)中,長方體第三維的方向不隨任何參數(shù)而變,即始終為45度的方向。void far pieslice(int x,int y,int stangle,int endangle,int radius);畫一個(gè)以(x, y)為圓心,radius為半徑,stangle為起始角度,endangle 為終止角度的扇形,再按規(guī)定方式填充。當(dāng)stangle=0,endangle=360 時(shí)變成

46、一個(gè)實(shí)心圓,并在圓內(nèi)從圓點(diǎn)沿X軸正向畫一條半徑。void far sector(int x, int y,int stanle,intendangle,int xradius, int yradius);畫一個(gè)以(x, y)為圓心分別以xradius, yradius為x軸和y軸半徑,stangle 為起始角,endangle為終止角的橢圓扇形,再按規(guī)定方式填充。第五節(jié) 設(shè)定填充方式TURBO C有四個(gè)與填充方式有關(guān)的函數(shù)。下面分別介紹: void far setfillstyle(int pattern, int color); color的值是當(dāng)前屏幕圖形模式時(shí)顏色的有效值。pattern

47、的值及與其等價(jià)的符號(hào)常數(shù)見graphics.h。除USER_FILL(用戶定義填充式樣)以外,其它填充式樣均可由setfillstyle() 函數(shù)設(shè)置。當(dāng)選用USER_FILL時(shí),該函數(shù)對(duì)填充圖模和顏色不作任何改變。 之所以定義USER_FILL主要因?yàn)樵讷@得有關(guān)填充信息時(shí)用到此項(xiàng)。void far setfillpattern(char * upattern,int color); 設(shè)置用戶定義的填充圖模的顏色以供對(duì)封閉圖形填充。其中upattern是一個(gè)指向8個(gè)字節(jié)的指針。這8個(gè)字節(jié)定義了8x8點(diǎn)陣的圖形。每個(gè)字節(jié)的8位二進(jìn)制數(shù)表示水平8點(diǎn),8個(gè)字節(jié)表示8行,然后以此為模型向個(gè)封閉區(qū)域填充

48、。void far getfillpattern(char * upattern); 該函數(shù)將用戶定義的填充圖模存入upattern指針指向的內(nèi)存區(qū)域。void far getfillsetings(struct fillsettingstypefar * fillinfo); 獲得現(xiàn)行圖模的顏色并將存入結(jié)構(gòu)指針變量fillinfo中。其中fillsettingstype結(jié)構(gòu)定義如下:struct fillsettingstypeint pattern; /* 現(xiàn)行填充模式 * /int color; /* 現(xiàn)行填充模式 * /; 有關(guān)圖形填充圖模的顏色的選擇,請(qǐng)看下面例程。#include

49、stdio.h#include graphics.hmain()char str8=10,20,30,40,50,60,70,80; /*用戶定義圖模*/int gdriver,gmode,i;struct fillsettingstype save;/*定義一個(gè)用來存儲(chǔ)填充信息的結(jié)構(gòu)變量*/gdriver=DETECT;initgraph(&gdriver,&gmode,C:TC2.0BGI);setbkcolor(BLUE);cleardevice();for(i=0;i13;i+)setcolor(i+3);setfillstyle(i,2+i); /* 設(shè)置填充類型 */bar(100

50、,150,200,50); /*畫矩形并填充*/bar3d(300,100,500,200,70,1); /* 畫長方體并填充*/pieslice(200, 300, 90, 180, 90);/*畫扇形并填充*/sector(500,300,180,270,200,100);/*畫橢圓扇形并填充*/getch();cleardevice();setcolor(14);setfillpattern(str, RED);bar(100,150,200,50);bar3d(300,100,500,200,70,0);pieslice(200,300,0,360,90);sector(500,300

51、,0,360,100,50);getch();getfillsettings(&save);/*獲得用戶定義的填充模式信息*/closegraph();clrscr();printf(The pattern is %d, The color of filling is %d,save.pattern, save.color);/*輸出目前填充圖模和顏色值*/getch();第六節(jié) 任意封閉圖形的填充截止目前為止,我們只能對(duì)一些特定形狀的封閉圖形進(jìn)行填充,但還不能對(duì)任意封閉圖形進(jìn)行填充。為此,TURBO C 提供了一個(gè)可對(duì)任意封閉圖形填充的函數(shù),其調(diào)用格式如下: void far floodfi

52、ll(int x, int y, int border); 其中:x, y為封閉圖形內(nèi)的任意一點(diǎn),border為邊界的顏色,也就是封閉圖形輪廓的顏色。調(diào)用了該函數(shù)后,將用由函數(shù)setfillstyle()規(guī)定的顏色和模式填滿整個(gè)封閉圖形。注意:a. 如果x或y取在邊界上,則不進(jìn)行填充。b. 如果不是封閉圖形則填充會(huì)從沒有封閉的地方溢出去,填滿其它地方。c. 如果x或y在圖形外面,則填充封閉圖形外的屏幕區(qū)域。d. 由border指定的顏色值必須與圖形輪廓的顏色值相同, 但填充色可選任意顏色。下例是有關(guān)floodfill()函數(shù)的用法,該程序填充了bar3d()所畫長方體中其它兩個(gè)未填充的面。#i

53、nclude stdio.h#include graphics.hmain()int gdriver, gmode;struct fillsettingstype save;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(LIGHTRED);setlinestyle(0,0,3);setfillstyle(1,14); /*設(shè)置填充方式*/bar3d(100,200,400,350,200,1); /*畫長方體并填充*/floodfill(450,300

54、,LIGHTRED);/*填充長方體另外兩個(gè)面*/floodfill(250,150, LIGHTRED);rectangle(450,400,500,450); /*畫一矩形*/floodfill(470,420, LIGHTRED); /*填充矩形*/getch();closegraph();第七節(jié)屏幕操作函數(shù)除了清屏函數(shù)以外,關(guān)于屏幕操作還有以下函數(shù): void far setactivepage(int pagenum); void far setvisualpage(int pagenum);這兩個(gè)函數(shù)只用于EGA,VGA 以及HERCULES圖形適配器。setctivepage()

55、函數(shù)是為圖形輸出選擇激活頁。所謂激活頁是指后續(xù)圖形的輸出被寫到函數(shù)選定的pagenum頁面,該頁面并不一定可見。setvisualpage()函數(shù)才使pagenum所指定的頁面變成可見頁。頁面從0開始(Turbo C默認(rèn)頁)。如果先用setactivepage() 函數(shù)在不同頁面上畫出一幅幅圖像,再用setvisualpage() 函數(shù)交替顯示,就可以實(shí)現(xiàn)一些動(dòng)畫的效果。void far getimage(int xl,int yl, int x2,int y2,void far *mapbuf); void far putimge(int x,int,y,void * mapbuf, int

56、 op); unsined far imagesize(int xl,int yl,int x2,int y2);這三個(gè)函數(shù)用于將屏幕上的圖像復(fù)制到內(nèi)存,然后再將內(nèi)存中的圖像送回到屏幕上。首先通過函數(shù)imagesize() 測(cè)試要保存左上角為(xl,yl),右上角為(x2,y2)的圖形屏幕區(qū)域內(nèi)的全部?jī)?nèi)容需多少個(gè)字節(jié),然后再給mapbuf分配一個(gè)所測(cè)數(shù)字節(jié)內(nèi)存空間的指針。通過調(diào)用getimage()函數(shù)就可將該區(qū)域內(nèi)的圖像保存在內(nèi)存中,需要時(shí)可用putimage()函數(shù)將該圖像輸出到左上角為點(diǎn)(x, y)的位置上,其中g(shù)etimage()函數(shù)中的參數(shù)op規(guī)定如何釋放內(nèi)存中圖像。 關(guān)于這個(gè)參數(shù)的

57、定義參見下表。對(duì)于imagesize()函數(shù),只能返回字節(jié)數(shù)小于64K字節(jié)的圖像區(qū)域,否則將會(huì)出錯(cuò),出錯(cuò)時(shí)返回-1。本節(jié)介紹的函數(shù)在圖像動(dòng)畫處理、菜單設(shè)計(jì)技巧中非常有用。下面程序模擬兩個(gè)小球動(dòng)態(tài)碰撞過程。#include stdio.h#include graphics.h#include malloc.hint main()int i, gdriver, gmode, size;void *buf;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(LIG

58、HTRED);setlinestyle(0,0,1);setfillstyle(1, 10);circle(100, 200, 30);floodfill(100, 200, 12);size=imagesize(69, 169, 131, 231);buf=malloc(size);if(!buf) return -1;getimage(69, 169, 131, 231,buf);putimage(500, 269, buf, COPY_PUT);for(i=0; i185; i+)putimage(70+i, 170, buf, COPY_PUT);putimage(500-i, 170

59、, buf, COPY_PUT);for(i=0;i185; i+)putimage(255-i, 170, buf, COPY_PUT);putimage(315+i, 170, buf, COPY_PUT);getch();closegraph();第八節(jié)用戶對(duì)文本字符大小的設(shè)置前面介紹的settextstyle()函數(shù),可以設(shè)定圖形方式下輸出文本字符這字體和大小但對(duì)于筆劃型字體(除8*8點(diǎn)陣字以個(gè)的字體),只能在水平和垂直方向以相同的放大倍數(shù)放大。 為此Turbo C2.0又提供了另外一個(gè)setusercharsize() 函數(shù),對(duì)筆劃字體可以分別設(shè)置水平和垂直方向的放大倍數(shù)。該函數(shù)的調(diào)

60、用格式為: void far setusercharsize(int mulx, intdivx, int muly, int divy); 該函數(shù)用來設(shè)置筆劃型字和放大系數(shù),它只有在settextstyle()函數(shù)中的charsize為0(或USER_CHAR_SIZE)時(shí)才起作用,并且字體為函數(shù)settextstyle()規(guī)定的字體。 調(diào)用函數(shù)setusercharsize()后,每個(gè)顯示在屏幕上的字符都以其缺省大小乘以mulx/divx為輸出字符寬,乘以muly/divy為輸出字符高。 #include stdio.h#include graphics.hint main()int gd

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論