




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第6章數(shù)學形態(tài)學處理6.1引言6.2二值形態(tài)學6.3灰值形態(tài)學6.4形態(tài)學的應(yīng)用6.5應(yīng)用實例——角點檢測習題6.1引言
6.1.1數(shù)學形態(tài)學
數(shù)學形態(tài)學誕生于1964年。法國巴黎礦業(yè)學院的賽拉(J.Serra)和導(dǎo)師馬瑟榮(G.Matheron)在鐵礦核的定量巖石學分析及開采價值預(yù)測研究中提出“擊中/擊不中變換”,并首次引入了形態(tài)學的表達式,建立了顆粒分析方法,奠定了數(shù)學形態(tài)學的理論基礎(chǔ)。數(shù)學形態(tài)學的基本思想是用具有一定形態(tài)的結(jié)構(gòu)元素去量度和提取圖像中的對應(yīng)形狀,以達到圖像分析和識別的
目的。數(shù)學形態(tài)學由一組形態(tài)學的代數(shù)運算子組成,其基本運算有:膨脹、腐蝕、開和閉運算。基于這些基本運算還可推導(dǎo)和組合成各種數(shù)學形態(tài)學實用算法,用它們可進行各種復(fù)雜的圖像分析及處理,包括圖像分割、特征抽取、邊界檢測、圖像濾波、圖像增強和恢復(fù)等。6.1.2基本符號和術(shù)語
1.元素和集合
在數(shù)字圖像處理的數(shù)學形態(tài)學運算中,把一幅圖像稱為一個集合。對于二值圖像而言,習慣上認為取值為1的點對應(yīng)于景物,用陰影表示,而取值為0的點構(gòu)成背景,用白色表示。這類圖像的集合是直接表示的。考慮所有值為
1的點的集合V,則集合V與景物圖像A是一一對應(yīng)的。對于圖像A,如果點a在A的區(qū)域以內(nèi),則a是A的元素,記作a∈A,否則記為a∈A。
2.交集、并集、補集和差集
交集、并集、補集和差集運算是集合的最基本運算。如圖6-1所示。圖6-1集合的交、并、補和差
3.擊中(Hit)與擊不中(Miss)
設(shè)兩幅圖像A和B,如果A∩B≠○(空集合),則稱B擊中A,記為B↑A。如果A∩B=○,則稱B擊不中A,如圖6-2所示。圖6-2擊中與擊不中
4.平移、反射
設(shè)A是一幅數(shù)字圖像,b是一個點,則定義A被b平移
后的結(jié)果為A+b={a+b|a∈A},即取出A中的每個點a的坐標值,將其與b的坐標值相加,得到一個新的點的坐標值a+b。所有這些新點所構(gòu)成的圖像就是A被b平移的結(jié)果,記為A+b,如圖6-3(c)所示。圖6-3平移與反射
A關(guān)于圖像原點的反射記為AV={a|-a∈A},即將A中
的每個點的坐標取相反數(shù)后得到的新圖像,如圖6-3(d)所示。5.目標圖像和結(jié)構(gòu)元素
被處理的圖像稱為目標圖像。為確定目標圖像的結(jié)構(gòu),需逐個考察圖像各部分之間的關(guān)系,并且進行檢驗,最后得到一個各部分之間關(guān)系的集合。在考察目標圖像各部分之間的關(guān)系時,需要設(shè)計一種收集信息的“探針”,稱為“結(jié)構(gòu)元素”。“結(jié)構(gòu)元素”一般用大寫英文字母S表示。在圖像中不斷移動結(jié)構(gòu)元素,就可以考察圖像中各部間的關(guān)系。
結(jié)構(gòu)元素形狀包含矩形、十字形、橢圓形和菱形等(見圖6-4),如果結(jié)構(gòu)元素長寬相等,矩形和橢圓形將退化為正方形和圓形。一般來說,結(jié)構(gòu)元素尺寸要明顯小于目標圖像的尺寸,選擇不同形狀和尺寸的結(jié)構(gòu)元素可提取目標圖像中的不同特征,具體應(yīng)用中需根據(jù)實際處理效果決定結(jié)構(gòu)元素形狀及尺寸的大小。圖6-45×5結(jié)構(gòu)元素形狀6.2二值形態(tài)學
二值形態(tài)學中的運算對象是集合,但實際運算中,當涉及兩個集合時并不把它們看作是互相對等的。一般設(shè)A為圖像集合,S為結(jié)構(gòu)元素,數(shù)學形態(tài)學運算是用S對A進行操作。結(jié)構(gòu)元素本身也是一個圖像集合,不過通常其尺寸要比目標圖像小得多。對結(jié)構(gòu)元素可指定一個原點,將其作為結(jié)構(gòu)元素參與形態(tài)學運算的參考點。原點可包含在結(jié)構(gòu)元素中,也可不包含在結(jié)構(gòu)元素中,但運算的結(jié)果常不相同。以下用黑點代表值為1的區(qū)域,白點代表值為0的區(qū)域,運算對于值為1的區(qū)域進行。6.2.1腐蝕
腐蝕是一種最基本的數(shù)學形態(tài)學運算。對給定的目標圖像X和結(jié)構(gòu)元素S,將S在圖像上移動,則在每一個當前位置x,S+x只有3種可能的狀態(tài),如圖6-5所示
第(1)種情形說明S+x與X相關(guān);第(2)種情形說明S+x與X不相關(guān);而第(3)種情形說明S+x與X只是部分相關(guān)。因而滿足(6-1)式的點x的全體構(gòu)成結(jié)構(gòu)元素與圖像的最大相關(guān)點集。稱該點集為S對X的腐蝕(簡稱腐蝕,也稱X用S腐蝕),記為X
S。腐蝕也可以用集合的方式定義
式(6-2)表明,X用S腐蝕的結(jié)果是所有使S平移x后仍在X中的x的集合。換句話說,用S來腐蝕X得到的集合是S完全包含在X中時S的原點位置的集合。
腐蝕在數(shù)學形態(tài)學運算中的作用是消除物體邊界點、去除小于結(jié)構(gòu)元素的物體、清除兩個物體間的細小連通等。如果結(jié)構(gòu)元素取3×3的像素塊,腐蝕將使物體的邊界沿周邊減少1個像素。(6-2)圖6-5S+x的3種可能狀態(tài)下面通過具體例子來進一步理解腐蝕運算的操作過程。例6-1腐蝕運算圖解。圖6-6給出腐蝕運算的1個簡單示例。其中圖6-6(a)中的黑點部分為集合X,圖6-6(b)中的黑點部分為結(jié)構(gòu)元素S,而圖6-6(c)中黑點部分給出X
S
(白點部分為原屬于X現(xiàn)腐蝕掉的部分)。由圖可見腐蝕將圖像(區(qū)域)縮小了。圖6-6腐蝕運算示例定和圖像腐蝕操作。對二值圖像實現(xiàn)腐蝕操作的具體步驟如下:
(1)讀入圖像,若為真彩色圖像,則轉(zhuǎn)化為二值圖像:
MatsrcImg=imread("figure6_7_a.jpg");
MatgrayImg(srcImg.size(),CV_8U);
cvtColor(srcImg,grayImg,CV_BGR2GRAY);
MatbinaryImg(grayImg.size(),grayImg.type());
threshold(grayImg,binaryImg,100,255,THRESH_BINARY);
(2)設(shè)置結(jié)構(gòu)元素類型、大小及錨點(結(jié)構(gòu)元素中心點)位置。OpenCV中定義了3種基本結(jié)構(gòu)元素形狀,對應(yīng)為矩形(MORPH_RECT)、十字形(MORPH_CROSS)和橢圓形(MORPH_ELLIPSE),設(shè)定錨點為(1,1)的3×3矩形結(jié)構(gòu)元素代碼如下:
intelemType=MORPH_RECT;
MatelemStruct=getStructuringElement(elemType,Size
(3,3),Point(1,1));
(3)調(diào)用erode()函數(shù)實現(xiàn)腐蝕操作并保存圖像:
MatdstImg;
erode(binaryImg,dstImg,elemStruct);
imwrite("figure6_7_b.bmp",dstImg);圖6-7圖像腐蝕運算圖6-7(a)是原始圖像,圖6-7(b)是對應(yīng)的二值圖像,圖6-7(c)是采用3×3矩形結(jié)構(gòu)元素進行腐蝕運算得到的結(jié)果。與圖6-7(c)相比,圖6-7(d)采用5×5矩形結(jié)構(gòu)元素得到的
圖像幾乎去掉了所有魚鱗部分。圖6-7(d)、圖6-7(e)與圖6-7(f)均采用5×5結(jié)構(gòu)元素,但結(jié)構(gòu)元素形狀不一樣,可以看出,不同形狀結(jié)構(gòu)元素腐蝕得到的圖像在魚頭、魚背和魚鰭部分都體現(xiàn)了一定的差異性。通過滾動條設(shè)置結(jié)構(gòu)元素并實現(xiàn)二值圖像腐蝕操作的完整代碼請讀者登錄出版社網(wǎng)
站下載,文件路徑:code\src\chapter06\code0601erode.cpp。6.2.2膨脹
腐蝕可以看作是將圖像X中每一個與結(jié)構(gòu)元素S全等的子集S+x收縮為點x。反之,也可以將X中的每一個點x擴大為S+x,即膨脹運算,記為X○S。用集合語言定義為
(6-4)
與式(6-4)等價的膨脹運算的定義形式為(6-5)+式(6-6)利用擊中輸入圖像,即與輸入圖像交集不為空的原點對稱結(jié)構(gòu)元素SV的平移表示膨脹。利用式(6-6)進行膨
脹的例子如圖6-8所示,圖6-8(a)中黑點部分為集合X,圖
6-8(b)中黑點部分為結(jié)構(gòu)元素S,它的反射見圖6-8(c),而圖
6-8(d)中的黑點與灰點部分(灰點為擴大的部分)合起來為集合X○S。由圖可見膨脹將圖像區(qū)域擴大了。+該例表明用S膨脹X的過程是:先對S做關(guān)于原點的映射,再將其反射平移x,這里X與S反射的交集不為空集。換句話說,用S來膨脹X得到的集合是SV的平移與X至少有
1個公共的非零元素相交時,S的原點位置的集合。根據(jù)這個解釋,式(6-6)也可寫成(6-7)圖6-8按式(6-6)膨脹的結(jié)果腐蝕和膨脹運算與集合運算的關(guān)系如下:從式(6-8)可知,腐蝕和膨脹運算對集合運算的分配律只有在特定情況下才能成立。另外,用腐蝕和膨脹運算還可以實現(xiàn)圖像的平移。如果在自定義結(jié)構(gòu)元素時選擇不在原點的一個點作為結(jié)構(gòu)元素,則得到的圖像形狀沒有任何改變,只是位置發(fā)生了移動。與腐蝕操作類似,在OpenCV中采用getStructuringElement()和dilate()函數(shù)實現(xiàn)結(jié)構(gòu)元素的設(shè)定和圖像膨脹操作。圖6-9(b)是對二值圖像6-9(a)執(zhí)行膨脹運算后的結(jié)果,經(jīng)過膨脹,魚鱗上的黑色孔洞已大部分被填充,如果選擇較大尺寸的結(jié)構(gòu)元素,可實現(xiàn)魚身體主要區(qū)域的提取。通過滾動條設(shè)置結(jié)構(gòu)元素并實現(xiàn)二值圖像膨脹操作的完整代碼請讀者登錄出版社網(wǎng)站下載,文件路徑:
code\src\chapter06\code0602dilate.cpp。圖6-9用5×5矩形結(jié)構(gòu)元素進行膨脹6.2.3開、閉運算
1.基本概念
如果結(jié)構(gòu)元素為圓形,則膨脹操作可填充圖像中比結(jié)構(gòu)元素小的孔洞以及圖像邊緣處小的凹陷部分。而腐蝕可以消除圖像中的毛刺及細小連接成分,并將圖像縮小,從而使其補集擴大。但是,膨脹和腐蝕并非互為逆運算,所以它們可以結(jié)合使用。在腐蝕和膨脹兩個基本運算的基礎(chǔ)上,可以構(gòu)造出形態(tài)學運算簇,它由膨脹和腐蝕兩個運算的復(fù)合與集合操作(并、交、補等)組合成的所有運算構(gòu)成。例如,可使用同一結(jié)構(gòu)元素,先對圖像進行腐蝕然后膨脹其結(jié)果,該運算稱為開運算;或先對圖像進行膨脹然后腐蝕其結(jié)果,稱其為閉運算。開運算和閉運算是形態(tài)學運算族中兩種最為重要的運算。對于圖像X及結(jié)構(gòu)元素S,用符號X。S表示S對圖像X
作開運算,用符號X·S表示S對圖像X作閉運算,它們的定義為
(6-9)(6-10)圖6-10給出了1個采用25×25圓形結(jié)構(gòu)元素S實現(xiàn)開運
算的例子,其中圖6-10(a)是原始圖像X,圖6-10(b)是用S對X進行開運算的結(jié)果。當使用圓形結(jié)構(gòu)元素時,開運算對邊界進行了平滑,去掉了凸角。在凸角點周圍,圖像的幾何構(gòu)形無法容納給定的圓,從而使凸角點周圍的點被開運算刪除。圖6-10(c)給出了原圖像與開運算后圖像的差值圖像,可見X-X。S體現(xiàn)了圖像的凸出特征。圖6-10開運算去掉了凸角由腐蝕和膨脹的對偶性,可知(6-12)開、閉變換也是一對對偶變換,因此,閉運算的幾何意義可以由補集開運算的幾何意義導(dǎo)出。圖6-11給出了1個閉運算的例子,其中圖6-11(a)是原始圖像,圖6-11(b)是用25×25圓形結(jié)構(gòu)元素S對X進行閉運算的結(jié)果,可見閉運算填充了圖像的凹角,圖6-11(c)是閉運算圖像與原圖像的差值圖像,X·S-X給出的是圖像的凹入特征。圖6-11閉運算填充了凹角
2.開閉運算的代數(shù)性質(zhì)
由于開、閉運算是在腐蝕和膨脹運算的基礎(chǔ)上定義的,根據(jù)腐蝕和膨脹運算的代數(shù)性質(zhì),不難得到開閉運算下面的性質(zhì)。
1)對偶性
2)擴展性(收縮性)即開運算恒使原圖像縮小,而閉運算恒使原圖像擴大。
3)單調(diào)性
如果XY,則如果Y
Z,且Z·Y=Z,則根椐這一性質(zhì)可知,結(jié)構(gòu)元素的擴大只有在保證擴大后的結(jié)構(gòu)元素對原結(jié)構(gòu)元素開運算不變的條件下方能保持單調(diào)性。
4)平移不變性
該性質(zhì)表明開運算和閉運算不受原點是否在結(jié)構(gòu)元素之中的影響。
5)等冪性
開、閉運算的等冪性意味著一次濾波即可將所有特定于結(jié)構(gòu)元素的噪聲濾除干凈,而作重復(fù)的運算不會再有效果。這是一個與中值濾波、線性卷積等經(jīng)典方法不同的性質(zhì)。
6)開運算和閉運算與集合的關(guān)系
在操作對象為多個圖像的情況下,可借助集合的性
質(zhì)來進行開和閉運算,開和閉運算與集合的關(guān)系可用下
式給出上述開和閉運算與集合的關(guān)系可用語言描述如下:
(1)開運算與并集:并集的開運算包含了開運算的
并集;
(2)開運算與交集:交集的開運算包含在開運算的交
集中;
(3)閉運算與并集:并集的閉運算包含了閉運算的
并集;
(4)閉運算與交集:交集的閉運算包含在閉運算的交
集中。
3.開運算的實現(xiàn)
根據(jù)上述理論,在OpenCV中先調(diào)用一次erode()函數(shù),再調(diào)用一次dilate()函數(shù)即可實現(xiàn)開運算。實現(xiàn)開運算更簡潔的方法是調(diào)用函數(shù)morphologyEx(),不同于前面介紹的腐蝕與膨脹函數(shù),morphologyEx()可通過設(shè)置第3個參數(shù)實現(xiàn)5種形態(tài)學操作,包括開(MORPH_OPEN)、閉(MORPH_CLOSE)、形態(tài)梯度(MORPH_GRADIENT)、頂帽(MORPH_TOPHAT)和黑帽(MORPH_BLACKHAT)運算,具體操作步驟如下:
(1)讀入圖像,若為真彩色圖像,則轉(zhuǎn)化為二值圖像
MatsrcImg=imread(“figure6_12_a.jpg”);
MatgrayImg(srcImg.size(),CV_8U);
cvtColor(srcImg,grayImg,CV_BGR2GRAY);
MatbinaryImg(grayImg.size(),grayImg.type());
threshold(grayImg,binaryImg,100,255,THRESH_BINARY);
(2)設(shè)置類型為圓形(MORPH_ELLIPSE)、大小為17×17的結(jié)構(gòu)元素代碼如下:
intelemType=MORPH_ELLIPSE;
MatelemStruct=getStructuringElement(elemType,Size(17,17),Point(8,8));
(3)指定形態(tài)學操作為開運算,調(diào)用morphologyEx()函數(shù)實現(xiàn)腐蝕操作并保存圖像:
MatdstImg;
morphologyEx(binaryImg,dstImg,MORPH_OPEN,elemStruct);
imwrite(“figure6_12_b.bmp”,dstImg);
對圖6-12(a)所示圖像進行開運算的結(jié)果如圖6-12(b)所示,可以發(fā)現(xiàn),開運算去掉了凸角且將原圖像中的連通區(qū)域變成了非連通區(qū)域。通過滾動條設(shè)置結(jié)構(gòu)元素并實現(xiàn)二值圖像開運算操作的完整代碼請讀者登錄出版社網(wǎng)站下載,文件路徑:code\src\chapter06\code0603opening.cpp。圖6-12開、閉運算效果示意圖
4.閉運算的實現(xiàn)
在OpenCV中閉運算的實現(xiàn)與開運算類似,只需將morphologyEx()函數(shù)中的第3個參數(shù)設(shè)為MORPH_CLOSE即可。采用17×17圓形結(jié)構(gòu)元素對圖6-12(a)進行閉運算的
效果如圖6-12(c)所示,與開運算正好相反,閉運算去掉了凹角且將原圖像中的非連通區(qū)域變成了連通區(qū)域。通過滾動條設(shè)置結(jié)構(gòu)元素并實現(xiàn)二值圖像閉運算操作的完整代碼請讀者登錄出版社網(wǎng)站下載,文件路徑:code\src\chapter06\code0604closing.cpp。6.2.4擊中/擊不中變換
在6.1.2節(jié)中簡要給出了擊中/擊不中的概念,下面討論擊中/擊不中的嚴格定義及其在數(shù)字圖像處理中的意義。一般地,一個物體的結(jié)構(gòu)可以由物體內(nèi)部各種成分之間的關(guān)系來確定。為了研究圖像的結(jié)構(gòu),可以逐個地利用各種成分(例如各種結(jié)構(gòu)元素)對其進行檢驗,判定哪些成分包括在圖像之內(nèi),哪些在圖像之外,從而最終確定圖像的結(jié)構(gòu)。擊中/擊不中變換就是在基于該思路提出的。設(shè)X是被研究的圖像,S是結(jié)構(gòu)元素,而且S由兩個不相交的部分
S1和S2組成,即S=S1∪S2,且S1∩S2=○。擊中/擊不中定
義為
X⊙S={x|S1+x
X,且S2+x
XC} (6-13)
由式(6-13)可以看出,X被S擊中的結(jié)果仍是一個圖像,其中每點x必須同時滿足兩個條件:S1被平移后包含在X內(nèi);S2被x平移后不在X內(nèi)。圖6-13給出了一個X與S進行擊中/擊不中運算的例子。圖6-13擊中/擊不中示意擊中/擊不中運算還有另外一種表達形式:
(6-14)
式(6-14)表明,X與S進行擊中/擊不中運算的結(jié)果等價于X被S1腐蝕的圖像與X的補集被S2腐蝕圖像的交集。圖
6-14解釋了這一過程。可見,擊中/擊不中運算可借助腐蝕運算實現(xiàn)。在圖6-14中,如果S中不包含S2,則X⊙S與X
S1相同,即X中包含3個形如S1的結(jié)構(gòu)元素;將S2加入S后,相當于對X⊙S增加了一個約束條件:不僅要從X中找出那些形如S1的點,而且要在X的補集中找出形如S2的點,經(jīng)過求交運算,最終構(gòu)成X⊙S。圖6-14按照式(6-14)X與S進行擊中/不擊中運算示意圖由此可見,擊中/擊不中運算相當于一種條件比較嚴格的模板匹配,它不僅指出被匹配點所應(yīng)滿足的性質(zhì)即模板的形狀,同時也指出這些點所不應(yīng)滿足的性質(zhì),即對周圍環(huán)境背景的要求。因此擊中/擊不中變換可以用于形狀識別和端點定位。圖6-15描述了一個骨架端點定位的示例,由于骨架端點必定滿足圖6-15(a)~圖6-15(d)所示的4種結(jié)構(gòu)元素,結(jié)構(gòu)元素S=S1∪S2,S1對應(yīng)黑色點集,S2對應(yīng)白色點集,對圖6-15(a)所示骨架圖像,依次采用這4種結(jié)構(gòu)元素進行擊中/擊不中運算,最后將4次運算的端點圖像合并得到的結(jié)果如圖6-15(f)所示。圖6-15用擊中/擊不中變換定位端點根據(jù)上述思想,在OpenCV中實現(xiàn)的骨架端點定位代碼如下:
//*************************************
//函數(shù)名稱:MatfindEndPoints(constMat&binaryImg)
//基本功能:采用擊中/擊不中運算提取二值骨架圖像所有端點
//參數(shù)說明:輸入二值圖像,該圖像中背景色為0,前景色(目標)為255
//返回值:返回包含所有端點的二值圖像
//*************************************
MatfindEndPoints(constMat&binaryImg)
{
inti,elemSize=3;
MatdstImg,maskImg=Mat::zeros(binaryImg.size(),CV_8UC1);
//設(shè)置上端點3×3結(jié)構(gòu)元素S2
MatelemStruct(elemSize,elemSize,CV_8U,Scalar(1));
elemStruct.at<uchar>(1,1)=0;
for(i=0;i<elemSize;i++) elemStruct.at<uchar>(2,i)
=0;
dstImg=255-binaryImg;
//計算原圖像的補集
erode(dstImg,dstImg,elemStruct); //腐蝕圖像
//與結(jié)構(gòu)元素S1腐蝕后的圖像求交,端點存入圖像maskImg maskImg=binaryImg&dstImg;
elemStruct=Mat::ones(elemSize,elemSize,CV_8U);//設(shè)置左端點3×3結(jié)構(gòu)元素S2
elemStruct.at<uchar>(1,1)=0;
for(i=0;i<elemSize;i++)elemStruct.at<uchar>(i,2)=0;
dstImg=255-binaryImg;
erode(dstImg,dstImg,elemStruct);
//與結(jié)構(gòu)元素S1腐蝕后的圖像求交,并與上次求得的端點圖像合并
maskImg|=binaryImg&dstImg;
//設(shè)置下端點3×3結(jié)構(gòu)元素S2
elemStruct=Mat::ones(elemSize,elemSize,CV_8U);
elemStruct.at<uchar>(1,1)=0;
for(i=0;i<elemSize;i++)elemStruct.at<uchar>(0,i)=0; dstImg=255-binaryImg;
erode(dstImg,dstImg,elemStruct);
//與結(jié)構(gòu)元素S1腐蝕后的圖像求交,并與上次求得的端點圖像合并
maskImg|=binaryImg&dstImg;
elemStruct=Mat::ones(elemSize,elemSize,CV_8U);//設(shè)置右端點3×3結(jié)構(gòu)元素S2
elemStruct.at<uchar>(1,1)=0;
for(i=0;i<elemSize;i++)elemStruct.at<uchar>(i,0)=0; dstImg=255-binaryImg;
erode(dstImg,dstImg,elemStruct);
//與結(jié)構(gòu)元素S1腐蝕后的圖像求交,并與上次求得的端點圖像合并
maskImg|=binaryImg&dstImg;
returnmaskImg; //返回端點圖像
}
6.3灰值形態(tài)學
二值形態(tài)學的4種基本運算,即腐蝕、膨脹、開和閉運算,可方便地推廣到灰值圖像空間。
與二值形態(tài)學中不同的是,這里操作對象不再是集合而是圖像函數(shù)。設(shè)f(x,y)是輸入圖像,b(x,y)是結(jié)構(gòu)元素子圖像。6.3.1灰值腐蝕
用結(jié)構(gòu)元素b對輸入圖像f(x,y)進行灰值腐蝕運算,記為f○b,其定義為
(6-15)
式中,Df和Db分別是f和b的定義域,這里限制(s+x)和(t+y)在f的定義域之內(nèi),類似于二值腐蝕定義中要求結(jié)構(gòu)元素完全包括在被腐蝕集合中。-為簡單起見,用一維函數(shù)來簡單介紹式(6-15)的含義和運算操作原理。則式(6-15)可簡化為
(6-16)
在相關(guān)計算中,對正的s,f(s+x)移向右邊,對負的
s,f(s+x)移向左邊。在OpenCV中,erode()和dilate()函數(shù)也可處理灰度圖
像和真彩色圖像,圖6-16(b)是采用7×7圓形結(jié)構(gòu)元素對圖6-16(a)進行灰度腐蝕后的結(jié)果,可見灰度腐蝕后的蘋果圖像上的黑色斑點被擴大了,同時蘋果上的光斑區(qū)域(亮細節(jié))變小了。設(shè)置結(jié)構(gòu)元素并實現(xiàn)灰度圖像腐蝕和膨脹運算的完整代碼請讀者登錄出版社網(wǎng)站下載,文件路徑:
code\src\chapter06\code0606grayMorphology.cpp。圖6-16灰值腐蝕與膨脹前后的圖像6.3.2灰值膨脹
用結(jié)構(gòu)元素b對輸入圖像f(x,y)進行灰值膨脹定義為
(6-17)
式中,Df、Db分別是f和b的定義域。這里限制s-x和t-y在f的定義域之內(nèi),類似于在二值膨脹定義中要求兩個運算集合至少有1個(非零)元素相交。式(6-17)與二維離散函數(shù)的卷積的形式很類似,區(qū)別是這里用max替換了卷積中的求和,用加法替換了卷積中的相乘。圖6-16(c)是采用7×7圓形結(jié)構(gòu)元素對圖6-16(a)進行灰度膨脹后的結(jié)果,可見灰度膨脹后的蘋果圖像上的黑色斑點被去除了,同時蘋果上的光斑區(qū)域(亮細節(jié))變大了。
膨脹和腐蝕滿足下列對偶關(guān)系
這里函數(shù)的補定義為fC(x,y)=-f(x,y),而函數(shù)的反射定義為:bV(x,y)=b(-x,-y)。(6-19)(6-20)6.3.3灰值開、閉運算
數(shù)學形態(tài)學中灰值圖像開、閉運算的定義與二值圖像開、閉運算的定義是一致的。用結(jié)構(gòu)元素b(灰值圖像)對灰值圖像f做開運算記為f。b,其定義為(6-21)用結(jié)構(gòu)元素b對灰值圖像f做閉運算記為f·b,其定義為(6-22)開、閉運算相對于函數(shù)的補和反射也是對偶的,對偶關(guān)系為
灰值開、閉運算簡單的幾何解釋如圖6-17所示。在圖6-17(a)中,給出一幅圖像f(x,y)在y為常數(shù)時的一個剖面f(x),其
形狀為一連串的波峰波谷。假設(shè)結(jié)構(gòu)元素b是球狀的,投
影到x和f(x)平面上是一個圓形。(6-23)(6-24)圖6-17灰度圖像剖面開、閉運算示意圖若用b對f做閉運算,即f·b,可看作將b貼著f的上沿從一端滾到另一端。圖6-17(d)給出b在閉運算操作中的幾個位置,圖6-17(e)給出閉運算操作的結(jié)果。從圖6-17(e)可看
出,波峰基本沒有變化,而所有比b直徑小的波谷則被填充。換句話說,當b貼著f的上沿滾動時,f中沒有與b接觸的部位都得到填充。灰度圖像的開閉運算也可采用OpenCV中的morphologyEx()函數(shù)實現(xiàn)。圖6-18(b)和圖6-18(c)是對圖6-18(a)進行灰值開、閉運算的結(jié)果。經(jīng)過開、閉運算后圖像均變得光滑了,圖6-18(b)蘋果圖像上的亮點和較小的亮斑基本上看不到了,可見灰值開運算消除了尺寸較小的亮細節(jié)。另一方面,圖6-18(c)中蘋果表面的小黑點消除了且底部凹陷部分的黑色區(qū)域模糊了,這表明灰值閉運算能夠消除尺寸較小的暗細節(jié)。圖6-18灰值開閉運算實例6.4形態(tài)學的應(yīng)用
6.4.1形態(tài)學濾波
由于開、閉運算所處理的信息分別與圖像的凸、凹處相關(guān),因此,它們本身均為單邊算子,可以利用開、閉運算去除圖像的噪聲、恢復(fù)圖像,也可以交替使用開、閉運算以達到雙邊濾波的目的。一般地,可以將開、閉運算
結(jié)合起來構(gòu)成形態(tài)學噪聲濾除器,例如(X。S)·S
或(X·S)
。S等。圖6-19給出消除噪聲的一個示例。圖6-19(a)是1幅細胞圖像,在細胞內(nèi)外均有一些椒鹽噪聲。首先采用3×3圓形結(jié)構(gòu)元素對圖像進行腐蝕得到圖6-19(b),然后對腐蝕結(jié)果進行膨脹得到圖6-19(c),這兩組操作的結(jié)合就是開運算,它消除了細胞周圍的白色噪聲點;再對圖6-19(c)進行膨脹得到圖6-19(d),最后對膨脹結(jié)果進行腐蝕得到圖6-19(e),這兩組操作的結(jié)合構(gòu)成了閉運算,從實驗結(jié)果來看,它消除了細胞內(nèi)部的黑色噪聲點。圖6-19形態(tài)學去噪示例相似的方法也可應(yīng)用于灰值圖像處理。灰值開運算可用于過濾最大噪聲(高亮度噪聲),因為被濾掉的噪聲位于信號的上方。如果將圖6-17(a)信號上方的尖峰視為噪聲,則灰值開運算后可得到很好的濾波效果,如圖6-17(c)所示。根據(jù)對偶性,閉運算可以濾掉信號下方的噪聲尖峰。圖
6-17(e)給出了利用圓形結(jié)構(gòu)元素進行灰值閉濾波的結(jié)果。與二值情況相似,可以利用適當?shù)慕Y(jié)構(gòu)元素進行開-閉濾波,此時適當?shù)剡x擇結(jié)構(gòu)元素的尺寸是非常關(guān)鍵的。此
外,若信號中混雜有未能分離的不同尺寸的噪聲脈沖,則可以選用一種交變序列濾波器,該濾波器使用逐漸增加寬度的結(jié)構(gòu)元素,交替地做灰值開、閉運算。若這些噪聲很好分離開來,則可以利用開運算和閉運算的迭代運算或閉運算和開運算的迭代運算將其消除。6.4.2骨架提取
利用骨架提取技術(shù)得到區(qū)域的骨架結(jié)構(gòu)是將平面區(qū)域簡化成圖常用的方法。在文字識別、地質(zhì)構(gòu)造識別和工業(yè)零件形狀識別等領(lǐng)域,提取圖像骨架有助于突出形狀特點和減少冗余信息量。骨架提取(Skeletonization)可通過距離變換(DistanceTransform)、Voronoi圖或基于形態(tài)學運算的細化算法(Thinning)實現(xiàn),下面介紹兩種基于形態(tài)學思想的骨架提取算法。
1.基于腐蝕和開運算的細化
骨架可從形態(tài)學的角度進行定義。對于k=0,1,2,…,n,定義骨架子集Sk(X)為圖像X內(nèi)所有最大圓形結(jié)構(gòu)元素kB的圓心x構(gòu)成的集合。從骨架的定義可知,骨架是所有骨架子集的并,即(6-26)可以證明骨架子集可表示為圖6-20給出了采用上述思想提取圖像骨架的實例。其中圖6-20(a)為一幅樹的二值圖像,圖6-20(b)是用3×3十字形結(jié)構(gòu)元素得到的骨架,圖6-20(c)為采用5×5十字形結(jié)構(gòu)元素得到的骨架。比較不同大小結(jié)構(gòu)元素處理結(jié)果可見,采用較大尺寸結(jié)構(gòu)元素得到的骨架要比較小尺寸結(jié)構(gòu)元素得到的骨架粗,此外,兩組細化后的骨架均無法保持原始圖像的連通性。圖6-20骨架抽取示例
2.快速形態(tài)學細化算法
設(shè)已知目標點標記為1,背景點標記為0。邊界點是指本身標記為1而其8連通鄰域中至少有一個標記為0的點。
如圖6-21(a)所示,考慮以邊界點為中心的8鄰域,設(shè)p1為中
心點,對其鄰域的8個點逆時針繞中心點分別標記為p2,p3,…,p9,其中p2位于p1的上方。
(1)獲取當前圖像像素點顏色值p1,若p1=0(背景點),則跳過判斷條件獲取下一像素點;否則,若同時滿足下面4個條件,則刪除p1(將p1設(shè)為0):
①2≤N(p1)≤6,其中N(p1)是p1的非零點的個數(shù);
②S(p1)=1,其中S(p1)是以p2,p3,p4,…,
p9為序時這些點的值從0到1變化的次數(shù);
③p2×p4×p6=0或者S(p1)≠1;
④p4×p6×p8=0或者S(p1)≠1。
(2)與第(1)步類似,僅將③中的條件改為p2×p4×p8
=0和④中的條件改為p2×p6×p8=0。當對所有點都檢驗完畢后,將所有滿足條件的點刪除。以上兩步操作構(gòu)成一次迭代,算法反復(fù)迭代,直至刪除所有滿足條件的目標點,剩下的點將組成區(qū)域骨架。圖6-21給出了該算法的應(yīng)用示例。其中,圖6-21(b)、圖6-21(c)和圖6-21(d)是p1不可刪除的3種情況,在圖6-21(b)中刪除p1會分割區(qū)域,圖6-21(c)中刪除p1會分割區(qū)域且縮短邊緣,圖6-21(d)中滿足2≤N(p1)≤6但p1不可刪除。圖6-21細化算法示意圖根據(jù)上述細化算法,在OpenCV中采用3×3結(jié)構(gòu)元素的細化代碼如下:
//*****************************************
//函數(shù)名稱:Matthinning()
//基本功能:對二值圖像進行細化運算
//參數(shù)說明:待細化二值圖像,該圖像中背景色為0,前景色(目標)為255
//返回值:返回細化后二值圖像
//*****************************************
Matthinning(constMat&binaryImg)
{
inti,j,k;
ucharp[11];
intpos[9][2]={{0,0},{-1,0},{-1,1},
{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};
intcond1,cond2,cond3,cond4,counter=0;
boolpointsDeleted=true;
Matmask,dstImg;
dstImg=binaryImg/255; //轉(zhuǎn)化為0,1二值圖像
while(pointsDeleted)//若存在可刪除像素點,執(zhí)行迭代
{
mask=Mat::zeros(dstImg.size(),CV_8UC1);//初始化模板為全0
pointsDeleted=false;
for(i=1;i<dstImg.rows-1;i++)
{
for(j=1;j<dstImg.cols-1;j++){
//獲取3×3結(jié)構(gòu)元素p1~p9對應(yīng)像素值,其中p1為中心點
for(k=1;k<10;k++)
p[k]=dstImg.at<uchar>(i+pos[k-1][0],j+pos[k-1][1]);
if(p[1]==0)continue;//若中心點為背景色(黑色),跳過
cond1=0;//計算中心點周圍所有像素值之和 for(k=2;k<10;k++)cond1+=p[k];//計算p2~p9從0到1變化的次數(shù)
cond2=0;
p[10]=p[2];//用于處理k=8,p[k+2]越界情況
for(k=2;k<10;k+=2)
cond2+=((p[k]==0&&p[k+1]==1)+(p[k+1]==0&&p[k+2]==1));
if(counter%2==0)//偶數(shù)次迭代判斷條件{
cond3=p[2]*p[4]*p[6];
cond4=p[4]*p[6]*p[8];
}
else//奇數(shù)次迭代判斷條件
{
cond3=p[2]*p[4]*p[8];
cond4=p[2]*p[6]*p[8]; }//若同時滿足條件1~條件4
if((2<=cond1&&cond1<=6)&&(cond2==1)&&(cond3==0)&&(cond4==0))
{
pointsDeleted=true;
mask.at<uchar>(i,j)=1;//寫入待刪除的像素點至模板
}
}
}dstImg&=~mask;//通過邏輯與操作刪除目標像素點(白色)
counter++;//記錄迭代次數(shù)
}
dstImg*=255;//恢復(fù)為0,255二值圖像
returndstImg;
}
6.5應(yīng)用實例——角點檢測
角點一般定義為圖像邊緣曲線上曲率取極大值的點。角點是圖像中重要的特征,它們在保留圖像目標重要特征的同時有效地減少了信息的存儲量,在目標跟蹤與識別、圖像配準與匹配等領(lǐng)域有著重要作用。角點檢測算法可分為基于灰度圖像、基于二值圖像和基于輪廓曲線的檢測方法。下面將結(jié)合本章中的形態(tài)學運算介紹一種灰度圖像角點檢測算法。灰度圖像角點檢測算法的基本思想如下:對如圖6-22(a)所示的矩形圖像f,先采用十字形結(jié)構(gòu)元素bc(圖6-22(b))對其進行膨脹運算,然后采用菱形結(jié)構(gòu)元素bd(圖6-22(d))對膨
脹后的圖像進行腐蝕運算,最后計算原始圖像與腐蝕后圖像的差得到包含直角點的圖像f′(圖6-22(f))。該過程可用公式表示為(6-28)式(6-28)中的先膨脹后腐蝕操作類似于閉運算,但兩次運算采用了不同形狀的結(jié)構(gòu)元素。采用式(6-28)僅能對直角點進行有效檢測,對于非直角點的提取,需選用其他結(jié)構(gòu)元素的組合。考慮對圖6-22(a)進行45°旋轉(zhuǎn)將產(chǎn)生非直角點,為檢測這些角點,同時對十字形和菱形結(jié)構(gòu)元素進行旋轉(zhuǎn),對應(yīng)結(jié)構(gòu)元素相應(yīng)變?yōu)閄形和矩形,分別記為bx和br。則非直角點的檢測公式為
(6-29)
對輸入灰度圖像采用式(6-28)和式(6-29)即可提取圖像中的所有角點。圖6-22采用不同結(jié)構(gòu)元素對矩形圖像f先膨脹后腐蝕根據(jù)上述思想,在OpenCV中采用5×5結(jié)構(gòu)元素實現(xiàn)的角點檢測代碼如下:
//************************************
//函數(shù)名稱:MatfindCorners(constMat&binaryImg)
//基本功能:提取圖像中的角點
//參數(shù)說明:輸入灰度圖像
//返回值:返回含角點的二值圖像
//*****************************************
MatfindCorners(constMat&grayImg){
inti,elemSize=5;
MatdstImg1,dstImg2,diffImg;
//設(shè)置十字形結(jié)構(gòu)元素
MatcrossStruct=getStructuringElement(MORPH_CROSS,
Size(elemSize,elemSize),
Point(elemSize/2,elemSize/2));
//設(shè)置矩形結(jié)構(gòu)元素MatrectStruct=getStructuringElement(MORPH_RECT,
Size(elemSize,elemSize),
Point(elemSize/2,elemSize/2));
//自定義X形結(jié)構(gòu)元素
MatxStruct(elemSize,elemSize
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省合肥市廬巢八校聯(lián)考2023-2024學年高一上學期期中考試化學 無答案
- 2024屆浙江省寧波十校聯(lián)盟高三上學期一模考試物理 無答案
- DB62T 4122-2020 鹽堿荒地快速改良技術(shù)規(guī)程
- 糖果行業(yè)生產(chǎn)污染控制措施
- 兒童投擲游戲與發(fā)展計劃
- 電子商務(wù)平臺運作流程優(yōu)化措施
- 2025年度幼兒園家庭德育合作計劃
- 幼兒園膳食營養(yǎng)改善計劃報告范文
- 實驗安全培訓(xùn)課件
- 腎內(nèi)科護理人員的業(yè)務(wù)能力
- Photoshop圖像處理試題及答案
- 小型設(shè)備購買協(xié)議書
- 2025年農(nóng)村宅基地房屋買賣合同樣本
- 難點02:總集篇·十六種陰影部分面積法【十六大考點】-2024年小升初數(shù)學典型例題系列(解析版)
- 2025年銷售管理能力評估考試題及答案
- 廠房設(shè)備拆除協(xié)議書
- 2025屆高三高考押題預(yù)測卷 數(shù)學(新高考Ⅱ卷02) 含解析
- 智能家居安裝與調(diào)試協(xié)議
- 擔保貸款免責協(xié)議書
- 2025年高考數(shù)學二輪熱點題型歸納與演練(上海專用)專題02函數(shù)(九大題型)(原卷版+解析)
- 租金折抵欠款協(xié)議書
評論
0/150
提交評論