版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第6章基于OPENCV和PYTHON的圖像預處理6.1圖像增強 6.1.1灰度變換 6.1.2直方圖變換 6.1.3色彩增強6.2閾值處理及圖像濾波 6.2.1Otsu閾值處理 6.2.2高斯濾波 6.2.3均值濾波 6.2.4中值濾波 6.2.5雙邊濾波 6.2.6自適應閾值處理6.3圖像的代數(shù)運算 6.3.1圖像相加
6.3.2圖像相減 6.3.3圖像相乘 6.3.4圖像相除6.4二值圖像的幾何性質與操作 6.4.1二值圖像的連通性 6.4.2像素間的距離 6.4.3二值圖像連通成分標記 6.4.4腐蝕 6.4.5膨脹6.5基于OpenCV和Python的機器視覺 6.5.1主成分分析(PCA)
第6章基于OPENCV和PYTHON的圖像預處理 6.5.2SIFT(尺度不變特征變換)
6.5.3SURF(加速魯棒特征) 6.5.4ORB(定向FAST和旋轉BRIEF)第6章基于OPENCV和PYTHON的圖像預處理前面幾章已經(jīng)詳細介紹了Python及OpenCV編程基礎,視覺測量基礎、視覺圖像基礎及圖像傅里葉變換。為了更深入地提取圖像特征,本章詳細介紹圖像增強的灰度變化、直方圖變換及色彩增強,同時對比線性濾波器和非線性濾波器濾波效果,圖像腐蝕與膨脹及最新的特征提取方法。6.1
圖像增強圖像增強包含基于灰度變換的增強、基于直方圖變換的增強和基于顏色的彩色增強,其中灰度變化包含線性灰度變化和對數(shù)變換;基于直方圖變換以概率論為基礎,常用的方法有直方圖均衡化和直方圖規(guī)定化;彩色增強包含假彩色增強、偽彩色增強和彩色變換增強。6.1.1
灰度變換直接灰度變換屬于空域處理方法中的點運算操作,點運算與相鄰的像素之間無運算關系,而是輸入圖像與輸出圖像之間的映射關系。輸出圖像上每個像素的灰度值僅由相應輸入像素的灰度值決定,而與像素點所在的位置無關。直接灰度變換包括線性和非線性灰度變換,而非線性灰度變換主要包括對數(shù)變換和冪次變換。6.1.1
灰度變換線性灰度變換當圖像成像時,由于曝光不足或過度、成像設備的非線性以及圖像記錄設備動態(tài)范圍不夠等因素,都會產(chǎn)生對比度不足的弊病,從而造成圖像中細節(jié)分辨不清。這種情況下,可以使用線性灰度變換技術,通過逐段線性變換拉伸感興趣的灰度級、壓縮不感興趣的灰度級,以達到增強圖像對比度、提高灰度動態(tài)范圍的目的(1)線性點運算線性點運算的灰度變換函數(shù)可以采用如下線性方程描述, (6-1)6.1.1
灰度變換1)如果>1,輸出圖像的對比度增大(灰度級擴展),如圖6-1所示。
圖6-1對比度增大6.1.1
灰度變換2)如果0<<1,輸出圖像的對比度減?。ɑ叶燃墘嚎s),如圖6-2所示。
圖6-2對比度減小6.1.1
灰度變換3)如果<0,暗區(qū)域將變亮,亮區(qū)域將變暗。
圖6-3反色變換當a=-1時,稱為反色變換(negativetransformation),就是將圖像灰度反轉產(chǎn)生等同照片負片的效果,適合增強埋藏在黑暗區(qū)域中的白色或灰色細節(jié),反色變換的處理結果如圖6-3所示。假設對灰度級范圍
的圖像進行反色變換到
,變換函數(shù)為:
(6-2)6.1.1
灰度變換(2)分段線性點運算分段線性點運算可以將圖像中感興趣的灰度范圍線性擴展,相對抑制不感興趣的灰度范圍。典型的增強對比度的變換函數(shù)是三段線性變換,其數(shù)學表達式如下:
(6-3)例如,如圖6-4所示的分段線性變換處理,
,
。由圖中變換曲線可以看出,原圖像中灰度值在
和
的動態(tài)范圍減小了;而灰度值在
的動態(tài)范圍增加了,從而增加了中間范圍內(nèi)的對比度。
6.1.1
灰度變換
圖6-4分段線性變換由此可見,通過調(diào)整s1,z1,s2,z2,可以控制分段直線的斜率,可對任一灰度區(qū)間進行擴展或壓縮,從而得到不同的效果。6.1.1
灰度變換另一種分段線性點運算稱為灰度切片(gray-levelslicing),其目的是用來凸顯一幅圖像中的特定灰度范圍,也稱灰度窗口變換。常用的方法有兩種:第一種是對感興趣的灰度級以較大的灰度z2來顯示,而對另外的灰度級則以較小的灰度z1來顯示。這種灰度變換的表達式為: (6-4)如圖6-5(a)所示,給出了式(6-4)所述的灰度變換曲線,它可將s1和s2間的灰度值突出,而將其余灰度值變?yōu)槟硞€低灰度值,實際是窗口二值化處理。第二種方法是對感興趣的灰度級以較大的灰度值來顯示,而其他灰度級則保持不變,即保留背景的灰度窗口變換,應用于“藍幕”技術。這種變換可以用下面的表達式來描述,其變換曲線如圖6-5(b)所示。(6-5)6.1.1
灰度變換圖6-5灰度切片變換曲線
6.1.1
灰度變換對數(shù)變換在某些情況下,例如,在顯示傅里葉頻譜時,其動態(tài)范圍遠遠超出顯示設備的顯示能力,此時僅有圖像中最亮部分可在顯示設備上顯示,而頻譜中的低值部分將顯示為黑色,所顯示的圖像相對于原圖像就存在失真。解決此問題的有效方法是對原圖像進行對數(shù)變換,使圖像低灰度級區(qū)域擴展、高灰度級區(qū)域壓縮對數(shù)變換數(shù)學表達式為: (6-6)式中c——尺度比例常數(shù),取值可以結合原圖像的動態(tài)范圍以及顯示設備的顯示能力來確定,
。
6.1.1
灰度變換傅里葉頻譜的對數(shù)變換如圖6-6所示。相比之下,變換后圖像中細節(jié)部分的可見程度是很顯然的。這說明,對數(shù)變換可以使一窄帶低灰度輸入圖像值映射為一寬帶輸出值,利用這種變換可以擴展被壓縮的高值圖像中的暗像素。
圖6-6對數(shù)變換
6.1.2
直方圖變換直方圖是從圖像內(nèi)部灰度級的角度對圖像進行表示,體現(xiàn)圖像中各灰度值在整個圖像中出現(xiàn)的概率?;叶绕祷蚱恋膱D像,其直方圖分布集中在灰度級較低(或較高)的一側。動態(tài)范圍偏小(低對比度)的圖像,其直方圖分布范圍較窄;而動態(tài)范圍正常的圖像,其直方圖分布覆蓋很寬的灰度級范圍。因此,可以通過改變灰度直方圖的形狀來達到增強圖像對比度的效果。這種方法以概率論為基礎,常用的方法有直方圖均衡化和直方圖規(guī)定化。1.直方圖均衡化直方圖均衡化是指將原圖像的直方圖通過變換函數(shù)修正為均勻的直方圖,然后按均衡直方圖修正原圖像。例如,將一幅灰度分布如圖6-7(a)所示的圖像的直方圖變換為如圖6-7(b)所示的形式,并以具有均衡特性的直方圖6-7(b)去映射修正圖像灰度分布,則修正后的圖像將比原圖像協(xié)調(diào)。這一過程即為直方圖均衡化(histogramequalization)。
6.1.2
直方圖變換圖6-7圖像直方圖均衡化圖像均衡化處理后,圖像的直方圖是“平坦”的,即各灰度級具有近似相同的出現(xiàn)頻數(shù),那么由于灰度級具有均勻的概率分布,圖像看起來就更清晰了。圖6-7反映了直方圖均衡化的主要目的是將原始圖像的灰度級均勻地映射到整個灰度級范圍內(nèi),得到一個灰度級分布均勻的圖像。
6.1.2
直方圖變換這種均衡化,既實現(xiàn)了灰度值統(tǒng)計上的概率均衡,也實現(xiàn)了人類視覺系統(tǒng)(HumanVisualSystem,HVS)上的視覺均衡。直方圖均衡化的算法主要包括三個步驟:(1)計算圖像的統(tǒng)計直方圖;(2)計算統(tǒng)計直方圖的累積直方圖;(3)對累積直方圖記性區(qū)間轉換。下面我們用數(shù)學表達式描述直方圖均衡化的過程。假設圖像中像素的總數(shù)是N,圖像的灰度級是L,灰度級空間是[0,L-1],用表示第k級灰度(第k個灰度級,像素值為k)在圖像內(nèi)的像素點個數(shù),那么該圖像中灰度級為(第k個灰度級)出現(xiàn)的概率為: (6-7)6.1.2
直方圖變換根據(jù)灰度級概率,對其進行均衡化處理的計算公式為:(6-8)式中,表示累計概率,將該值與灰度級的最大值L-1相乘,即得到均衡化后的新灰度級(像素值),當計算結果不是整數(shù)時,選擇距離最近的灰度級作為當前灰度級。在OpenCV中,提供了cv2.equalHist()函數(shù),用于實現(xiàn)圖像的直方圖均衡化,其一般格式為: dst=cv2.equalHist(src)其中
dst表示直方圖均衡化后的圖像;
src表示輸入的待處理圖像;
6.1.2
直方圖變換例6-1使用cv2.equalHist()函數(shù)實現(xiàn)圖像直方圖均衡化。importcv2ascvimportmatplotlib.pyplotaspltimage=cv.imread("D:\Python\pic\smalldog52.jpg",cv.IMREAD_GRAYSCALE)cv.imshow("image",image)equ=cv.equalizeHist(image)#直方圖均衡化處理cv.imshow("equcartree",equ)#顯示均衡化后的圖像plt.figure("原始圖像直方圖")#構建窗口plt.hist(image.ravel(),256)#顯示原始圖像的直方圖plt.figure("均衡化圖像直方圖")#構建窗口plt.hist(equ.ravel(),256)#顯示均衡化后的圖像直方圖plt.show()#顯示直方圖cv.waitKey()cv.destroyAllWindows()程序運行結果如圖6-8所示。
6.1.2
直方圖變換 a)原始圖像 b)均衡化后的圖像
c)原始圖像直方圖 d)均衡化后的圖像直方圖圖6-8均衡化圖像和均衡化直方圖
6.1.2
直方圖變換在圖6-8中,圖6-8a)是待處理的原始圖像,圖6-8b)是均衡化后的圖像,圖6-8c)是原始圖像的直方圖,可以看出其像素值的灰度級主要分布在0~200之間,圖6-8d)是均衡化后的圖像直方圖??梢钥闯?,利用OpenCV中的cv2.equalHist()函數(shù)實現(xiàn)圖像直方圖均衡化達到了圖像像素均勻分布的效果。
6.1.2
直方圖變換2.直方圖規(guī)定化直方圖均衡化的優(yōu)點是能自動增強整個圖像的對比度,但它的具體增強效果不易控制,處理的結果總是得到全局均衡化的直方圖。另外,均衡化處理后的圖像雖然增強了圖像的對比度,但它并不一定適合人的視覺。實際中有時要求突出圖像中人們感興趣的灰度范圍,這時,可以變換直方圖使之成為所要求的形狀,從而有選擇地增強某個灰度值范圍內(nèi)的對比度,這種方法稱為直方圖規(guī)定化或直方圖匹配。一般來說正確選擇規(guī)定化的函數(shù)可獲得比直方圖均衡化更好的效果。令為原始圖像的灰度密度函數(shù),是期望的圖像灰度密度函數(shù),如圖6-9所示。對及做直方圖均衡變換,通過直方圖均衡為橋梁,實現(xiàn)與
變換。
6.1.2
直方圖變換圖6-9原圖像直方圖和規(guī)定直方圖
6.1.2
直方圖變換直方圖規(guī)定化主要有三個步驟(這里只考慮
的情況,和分別為原始圖像和規(guī)定圖像中的灰度級數(shù)):(1)對原始圖像進行直方圖均衡化處理:
(6-9)(2)對希望的直方圖(規(guī)定化函數(shù))用同樣的方法進行直方圖均衡化處理:
(6-10)(3)使用與靠近的代替,并求逆變換得到規(guī)定化后圖像的灰度級。
6.1.3彩色增強人眼只能區(qū)分20多種不同的灰度級,而對于不同亮度和色調(diào)的色彩則可分辨上千種。因而灰度圖像中,微小灰度差別的細節(jié)無法讓人眼所察覺,但若給它們賦予不同的顏色后,就有可能分辨出。彩色增強的目的就是為了增強圖像的視覺效果。彩色增強包括假彩色增強、偽彩色增強和彩色變換增強,它們之間的區(qū)別在于處理對象或處理目的不同。
6.1.3彩色增強與真彩色圖像相區(qū)別的另外兩種彩色圖像分別為偽彩色圖像和假彩色圖像。①偽彩色圖像是由灰度圖像經(jīng)過偽彩色處理后得到的,其像素值是所謂的索引值,是按照灰度值進行彩色指定的結果,其色彩并不一定忠實于外界景物的真實色彩。在顯示或記錄時,根據(jù)黑白圖像各像素灰度的大小按一定的規(guī)則賦予它們不同的顏色,于是就將黑白圖像變換成彩色圖像,這種處理方法稱為偽彩色增強。②假彩色圖像是自然圖像經(jīng)過假彩色處理后形成的彩色圖像。假彩色處理與偽彩色處理一樣,也是通過彩色映射增強圖像效果,但其處理的原始圖像不是灰度圖像,而是一幅真實的自然彩色圖像,或是遙感多光譜圖像。
6.1.3彩色增強1.假彩色增強(1)假彩色增強的目的假彩色增強處理的對象是三基色描繪的自然圖像或同一景物的多光譜圖像。假彩色增強的主要目的包括三方面內(nèi)容。1)把景物映射成奇怪的彩色,會比原來的自然彩色更引人注目,留下深刻的印象2)適應人眼對顏色的靈敏度,提高鑒別能力。例如,人眼對綠色亮度的響應最靈敏,可把原來是其他顏色顯示的細節(jié)映射成綠色,這樣就易鑒別。人眼對藍色的強弱對比靈敏度最大,可把細節(jié)豐富的物體映射成深淺與亮度不一的藍色。3)將多光譜圖像處理成假彩色圖像,不僅看起來自然、逼真,更主要的是通過與其他波段圖像配合可從中獲得更多的信息,便于區(qū)分地形、地物及礦產(chǎn)。
6.1.3彩色增強(2)對自然圖像的假彩色處理的兩種方法1)將關注的目標物映射為與原色不同的彩色。例如,綠色草原置成紅色,藍色海洋置成綠色等。這樣做的目的是使目標物置于奇特的環(huán)境中以引起觀察者的注意。2)根據(jù)人眼的色覺靈敏度,重新分配圖像成分的顏色。人眼對可見光中的綠色波長比較敏感,于是可將原來非綠色描述的圖像細節(jié)或目標物經(jīng)假彩色處理變成綠色以達到提高目標分辨率的目的。自然圖像的假彩色映射可定義為:(6-11)
6.1.3彩色增強式中,Rf、Gf、Bf為原基色分量;Rg、Gg、Bg為假彩色三基色分量;
為轉移函數(shù)。例如,(6-12)三基色與具有n個波段的多光譜圖像之間的關系為(6-13)式中,f為第I波段圖像;
、
、
表示通用的函數(shù)運算。
6.1.3彩色增強2.偽彩色增強偽彩色增強(pseudocolorenhancement),就是將單一波段或灰度圖像變換為彩色圖像,從而把人眼不能區(qū)分的微小的灰度差別,顯示為明顯的色彩差異,更便于識別和提取有用信息。偽彩色增強適用于航攝和遙感圖片、云圖等方面,也可以用于醫(yī)學圖像的判讀。偽彩色增強可以在空域或頻域中實現(xiàn),主要包括灰度分層法、空域灰度級彩色變換和頻域偽彩色增強。
6.1.3彩色增強(1)灰度分層法灰度分層法也稱密度分割,是偽彩色增強中最簡單的一種方法,它是對圖像灰度范圍進行分割,使一定灰度間隔對應于某一種顏色,從而有利于圖像的增強和分類。也就是把灰度圖像的灰度級從0(黑)到M(黑)分成M個區(qū)間
,
。給每個區(qū)間指定一種彩色,這樣,便可以把一幅灰度圖像變成一幅偽彩色圖像,灰度分層法示意圖如圖6-10所示
圖6-10灰度分層法示意圖
6.1.3彩色增強灰度分層法的缺點是變換出的彩色數(shù)目有限,偽彩色生硬且不夠柔和,量化噪聲大。增強效果與分割層數(shù)成正比,層次越多,細節(jié)越豐富,彩色越柔和。增強處理結果如圖6-11(b)所示。
6.1.3彩色增強(2)空域灰度級彩色變換空域灰度級彩色變換是一種更為常用的、比灰度分層法更為有效的偽彩色增強方法。它是根據(jù)色度學的原理,將原圖像
的灰度分段經(jīng)過紅、綠、藍三種不同變換,變成三基色分量,然后用它們分別去控制彩色顯示器的紅、綠、藍電子槍,這樣就可得到一幅由三個變換函數(shù)調(diào)制的與
幅度相對應的彩色圖像。彩色的含量由變換函數(shù)的形狀而定。典型的變換函數(shù)如圖6-12所示,其中前三個圖分別表示紅色、綠色、藍色三種變換函數(shù),而最后一幅圖是把三種變換函數(shù)顯示在同一坐標系上以清楚地看出相互間的關系,橫坐標表示原圖像灰度
。由最后一圖可見,只有在灰度為零時呈藍色,灰度為時呈綠色,灰度為 L時呈紅色,而在其他灰度時呈其他彩色。這種技術可以將灰度圖像變換為具有多種顏色漸變的連續(xù)彩色圖像,增強結果如圖6-11(c)所示
6.1.3彩色增強實際應用中,變換函數(shù)常用取絕對值的正弦,其特點是在峰值處比較平緩而在低谷處比較尖銳。通過改變每個正弦波的相位和頻率就可以改變相應灰度值所對應的彩色。6.1.3彩色增強(3)頻域偽彩色增強頻域偽彩色增強的處理步驟如圖6-13所示,首先將輸入的灰度圖像經(jīng)傅里葉變換到頻域,在頻域內(nèi)用三個不同傳遞特性的濾波器分離成三個獨立分量,然后對它們進行逆傅里葉變換,便得到三幅代表不同頻率分量的單色圖像,接著對這三幅圖像做進一步的處理,如直方圖均衡化,最后將它們作為三基色分量分別加到彩色顯示器的紅、綠、藍顯示通道,從而得到一幅彩色圖像。
6.1.3彩色增強偽彩色增強不改變像素的幾何位置,而僅僅改變其顯示的顏色,它是一種很實用的圖像增強技術,主要用于提高人眼對圖像的分辨能力。這種處理可以用計算機來完成,也可以用專用硬件設備來實現(xiàn)。偽彩色增強技術已經(jīng)被廣泛應用于遙感和醫(yī)學圖像處理,例如,云圖判讀,X光片、超聲圖片增強等。
6.2
閾值處理及圖像濾波圖像閾值處理是指剃除圖像內(nèi)像素高于一定值或低于一定值的像素點。常用的閾值處理方法有全局閾值處理、自適應閾值處理和Otsu處理。實際中任何一幅圖像都或多或少地包含噪聲,過濾掉圖像內(nèi)部的噪聲稱為圖像濾波。常用的圖像濾波方法有: 高斯濾波 均值濾波 中值濾波 方框濾波 雙邊濾波
2D卷積濾波6.2.1Otsu閾值處理在使用函數(shù)cv2.threshold()進行閾值處理時,需要自定義一個閾值。這個閾值對于色彩均衡的圖像較為容易選擇,但是對于色彩不均衡的圖像,閾值的選擇會變得很復雜,使用Otsu方法可以方便地選擇出圖像處理的最佳閾值,它會遍歷當前圖像的所有閾值,選取最佳閾值。Otsu方法(OtsuandThreshold,1979)是最受歡迎的最優(yōu)閾值處理方法之一。Otsu把圖像分割成目標和背景,所選取的分割閾值應使目標區(qū)域的平均灰度、背景區(qū)域的平均灰度與整幅圖像的平均灰度之間的差異最大,這種差異用區(qū)域的方差來表示。Otsu的基本原理是利用正規(guī)化直方圖,其中每個亮度級的概率值為該亮度級的點數(shù)除以圖像總點數(shù)。因此,亮度級的概率分布為 (6-14)其中表示亮度級的概率,表示亮度級為l的點數(shù),
N表示亮度級的總點數(shù)6.2.1Otsu閾值處理由式(6-14)可以計算第個亮度級的零階和一階累積矩,分別如式(6-15)和式(6-16)所示。
(6-15)(6-16)圖像的總平均值為(6-17)類分離方差為(6-18)因此,最優(yōu)閾值是類分離方差最大時的亮度級,也即是說,最優(yōu)閾值的方差滿足(6-19)6.2.1Otsu閾值處理在OpenCV中,實現(xiàn)Otsu處理的函數(shù)是cv2.threshold(),只不過參數(shù)type多傳遞一個參數(shù)“cv2.THRESH_OTSU”,即可實現(xiàn)Otsu的閾值處理。需要注意的是,在使用Otsu方法時,需要把閾值設為0。此時的函數(shù)cv2.threshold()會自動尋找最優(yōu)閾值,并將該閾值返回。該函數(shù)的語法格式是:t,Otsu=cv2.threshold(src,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)其中
src表示原始圖像,即需要處理的圖像;6.2.1Otsu閾值處理例6-1對一幅圖像分別使用二值化閾值函數(shù)cv2.threshold()、自適應閾值函數(shù)cv2.adaptiveThreshold()和Otsu閾值進行處理,顯示處理的結果。代碼如下:importcv2img1=cv2.imread(“D:Python\pic\yuantu1.jpg”,0)cv2.imshow(“original”,img1)t1,thd=cv2.threshold(img1,127,255,cv2.THRESH_BINARY)t2,Otsu=cv2.threshold(img1,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)cv2.imshow(“thd”,thd)cv2.imshow(“Otsu”,Otsu)cv2.waitKey()cv2.destroyAllWindows()6.2.1Otsu閾值處理(a)原始圖像b)原始圖像調(diào)整為單通道灰度圖像d)Otsu閾值處理后的圖像c)二值化閾值處理6.2.1Otsu閾值處理圖6-14中的圖(a)是原始圖像,圖(b)是將原始圖像進行灰度處理后的結果,圖(c)是二值化閾值處理結果,從圖中可以看出,這種閾值處理會丟失大量的信息;圖(d)是Otsu閾值采用cv2.THRESH_BINARY+cv2.THRESH_OTSU類型,通過最優(yōu)閾值,得到了較好的處理結果。6.2.2
高斯濾波假設構造寬(列數(shù))為W,高(行數(shù))為H的高斯卷積算子
,其中W和H均為奇數(shù),錨點的位置在
,構造高斯卷積核的步驟如下:(1)計算高斯矩陣。
其中:
,r和c代表位置索引,
,
,且r和c均為整數(shù)。(2)計算高斯矩陣的和
。(3)高斯矩陣
除以高斯矩陣的和
,即歸一化,得到高斯卷積算子。
6.2.2
高斯濾波在高斯濾波中,卷積核中的值按照距離中心點的遠近分別賦予不同的權重,卷積核中的值不再都是1,例如,一個3*3的卷積核可能如圖6-15所示。(a)卷積核(b)卷積核圖6-15高斯卷積核針對圖6-15中的卷積核b),如果采用小數(shù)定義權重,其各個權重的累加值要等于1。在高斯濾波中,核的寬度和高度可以不相同,但是他們都必須是奇數(shù)。1313271310.010.030.10.030.40.20.10.030.16.2.2
高斯濾波在OpenCV中,實現(xiàn)高斯濾波的函數(shù)是cv2.GaussianBlur(),該函數(shù)的語法格式是:dst=cv2.GaussianBlur(src,ksize,sigmaX,sigmaY,borderType)其中
dst表示返回高斯濾波處理后的結果;
src表示原始圖像,即需要處理的圖像;
ksize表示濾波卷積核的大小,濾波卷積核的大小是指在濾波處理過程中,其鄰域圖像的高度和寬度,需要注意的是濾波卷積核的數(shù)值必須是奇數(shù)。
sigmaX表示卷積核在水平方向上的權重值;6.2.2
高斯濾波
sigmaY表示卷積核在垂直方向上的權重值,如果sigmaY被設置為0,則只采用sigmaX的值;如果sigmaX和sigmaY都是0,則通過ksize.width和ksize.height計算得到:
borderType表示以何種方式處理邊界值,一般情況下,不需要考慮該值,直接采用默認值即可。6.2.3
均值濾波均值濾波是用當前像素點周圍
個像素值的均值來代替當前像素值。使用該方法遍歷處理圖像內(nèi)的每一個像素點,即可完成整幅圖像的均值濾波。假設構造寬(列數(shù))為W,高(行數(shù))為H 的均值卷積算子
,令所有元素均為
即可,則構造的均值卷積核為:
,其中W和H均為奇數(shù),錨點的位置在
。均值卷積核是可分離卷積核,即:
一般來說,選取行列數(shù)相等的卷積核進行均值濾波。在均值濾波中,卷積核中的權重是相等的。選取的卷積核越大,參與運算的像素點數(shù)量就越多,圖像的失真情況就越嚴重。6.2.3
均值濾波在OpenCV中,實現(xiàn)均值濾波的函數(shù)是cv2.blur(),該函數(shù)的語法格式是:dst=cv2.blur(src,ksize,anchor,borderType)其中
dst表示返回均值濾波處理后的結果;
src表示原始圖像,即需要處理的圖像;
ksize表示濾波卷積核的大小,濾波卷積核的大小是指在濾波處理過程中,其鄰域圖像的高度和寬度。
anchor表示圖像處理的錨點,默認值為(-1,-1),表示當前計算均值的點位于卷積核的中心店位置;
borderType表示以何種方式處理邊界值,一般情況下,不需要考慮該值,直接采用默認值即可。6.2.3
均值濾波一般情況下,使用均值濾波函數(shù)時,錨點anchor和邊界樣式borderType采用默認值時,函數(shù)cv2.blur()的一般形式為:dst=cv2.blur(src,ksize)
采用默認值即可。6.2.3
均值濾波
a)原始圖像 b)均值濾波后的圖像(ksize=5)
c)均值濾波后的圖像(ksize=30)d)均值濾波后的圖像(ksize=50)6.2.4
中值濾波中值濾波不同于前面介紹的濾波方法,不再采用加權求均值的方式計算濾波的結果。它用中心點領域內(nèi)所有像素值(一共有奇數(shù)個像素點)的中間值代替當前像素點的像素值,即對鄰域中的像素點按照灰度值進行排序,然后選擇該組的中值作為輸出的灰度值。假設輸入圖像為I,高(行數(shù))為R,寬(列數(shù))為C,對圖像的任意位置,
,
,取以
為中心,寬為W,高為H的鄰域,其中W和H均為奇數(shù),對鄰域中的像素點灰度值進行排序,然后取中值,作為輸出圖像O的
位置處的灰度值。6.2.4
中值濾波在OpenCV中,實現(xiàn)中值濾波的函數(shù)是cv2.medianBlur(),該函數(shù)的語法格式是:dst=cv2.medianBlur(src,ksize)其中
dst表示返回中值濾波處理后的結果;
src表示原始圖像,即需要處理的圖像;
ksize表示濾波卷積核的大小,濾波卷積核的大小是指在濾波處理過程中,其鄰域圖像的高度和寬度。濾波卷積核的大小必須是大于1的奇數(shù),如3、5、7等6.2.4
中值濾波
a)原始圖像 b)中值濾波后的圖像(ksize=15)6.2.5
雙邊濾波雙邊濾波不同于前面介紹的濾波方法,它綜合考慮了空間信息和色彩信息,在濾波過程中有效地保護圖像內(nèi)的邊緣信息。上面介紹的高斯濾波、均值濾波處理會造成邊緣信息模糊。邊界模糊是濾波處理過程中對鄰域像素取均值所造成的結果,上述濾波處理過程只考慮了空間信息,造成了邊界信息模糊和部分信息丟失。雙邊濾波綜合考慮了距離和色彩的權重結果,既能夠有效地去除噪聲,又能夠較好地保護邊緣信息。6.2.5
雙邊濾波在OpenCV中,實現(xiàn)雙邊濾波的函數(shù)是cv2.bilateralFilter(),該函數(shù)的語法格式是:dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace,borderType)其中
dst表示返回雙邊濾波處理后的結果;
src表示原始圖像,即需要處理的圖像;
d表示在濾波時選取的空間距離參數(shù),表示以當前像素點為中心點的直徑。在實際應用中,一般取d=5,對于較大噪聲的離線濾波,d=9。
sigmaColor表示雙邊濾波時選取的色差范圍。如果該值為0,濾波失去意義,該值為255時,指定直徑內(nèi)的所有點都能夠參與運算。
sigmaSpace表示坐標空間中的sigma值,它的值越大,表示越多的點參與濾波
borderType表示以何種方式處理邊界,一般情況下,不需要考慮該值,直接采用默認值即可。6.2.5
雙邊濾波
a)原始圖像 b)雙邊濾波后的圖像6.2.6
自適應閾值處理對于色彩均衡的圖像,直接使用一個閾值就能完成對圖像的閾值化處理。但是,有時圖像的色彩是不均衡的。如果只使用一個閾值,就無法得到清晰的閾值分割圖像。通過使用變化的閾值完成對圖像的閾值處理,稱為自適應閾值處理。自適應閾值處理的方法是通過計算每個像素點周圍臨近區(qū)域的加權平均值獲得閾值,并使用該閾值對當前像素點進行處理。與普通閾值處理方法相比,自適應閾值處理能夠更好地處理明暗差異較大的圖像。在自適應閾值處理中,平滑算子(卷積核)的尺寸決定了分割出來的物體尺寸,如果卷積核的尺寸太小,那么估計出的局部閾值將不理想。卷積核的寬度必須大于被識別物體的寬度,卷積核的尺寸越大,濾波后的結果越能更好地作為每個像素的閾值的參考,但也不能無限大。6.2.6
自適應閾值處理在OpenCV中,實現(xiàn)自適應閾值處理的函數(shù)是cv2.adaptiveThreshold(),該函數(shù)的語法格式是:dst=cv2.adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blockSize,C)其中
dst表示返回自適應閾值處理后的結果;
src表示原始圖像,即需要處理的圖像;
maxValue表示最大值;
adaptiveMethold代表自適應方法,包含cv2.ADAPTIVE_THRESH_MEAN_C和cv2.ADAPTIVE_THRESH_GAUSSIAN_C兩種不同的方法。兩種方法都逐個像素計算自適應閾值,自適應閾值等于每個像素由參數(shù)blockSize所指定鄰域加權平均值減去常量C。6.2.6
自適應閾值處理 thresholdType表示閾值處理方式,該值必須是cv2.THRESH_BINARY或者cv2.THRESH_BINARY_INV中的一個;
blockSize表示塊的大小,也就是一個像素在計算其閾值時所使用的的鄰域尺寸,一般是3、5、7等;
C表示常量。6.2.6
自適應閾值處理例6-6對一幅圖像分別使用二值化閾值函數(shù)cv2.threshold()和自適應閾值函數(shù)cv2.adaptiveThreshold()進行處理,顯示處理的結果。代碼如下:importcv2img1=cv2.imread(“D:Python\pic\yuantu1.jpg”,0)cv2.imshow(“original”,img1)t1,thd=cv2.threshold(img1,127,255,cv2.THRESH_BINARY)athMEAN=cv2.adaptiveThreshold(img1,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)athGAUSS=cv2.adaptiveThreshold(img1,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)cv2.imshow(“thd”,thd)cv2.imshow(“athMEAN”,athMEAN)cv2.imshow(“athGAUSS”,athGAUSS)cv2.waitKey()cv2.destroyAllWindows()6.2.6
自適應閾值處理a)原始圖像b)原始圖像調(diào)整為單通道灰度圖像6.2.6
自適應閾值處理c)二值化閾值處理d)自適應閾值采用cv2.ADAPTIVE_THRESH_MEAN_C處理后的圖像6.2.6
自適應閾值處理e)自適應閾值采用cv2.ADAPTIVE_THRESH_GAUSSIAN_C處理后的圖像6.2.6
自適應閾值處理圖6-20中的圖(a)是原始圖像,圖(b)是將原始圖像進行灰度處理后的結果,圖(c)是二值化閾值處理結果,從圖中可以看出,這種閾值處理會丟失大量的信息;圖(d)是自適應閾值采用cv2.ADAPTIVE_THRESH_MEAN_C處理后的圖像,圖(e)是自適應閾值采用cv2.ADAPTIVE_THRESH_GAUSSIAN_C處理后的圖像。圖(d)和圖(e)閾值處理保留了更多的細節(jié)信息。6.3
圖像的代數(shù)運算圖像的代數(shù)運算是指兩幅或多幅輸入圖像之間進行點對點的加、減、乘、除運算得到輸出圖像的過程。如果輸入圖像為
和
,輸出圖像為,則有如下四種形式:6.3.1
圖像相加在面向Python的OpenCV中有兩種方法可以實現(xiàn)圖像的加法運算。一種是通過運算符“+”對圖像進行加法運算;另一種是通過cv2.add()函數(shù)來實現(xiàn)對圖像的加法運算。計算機一般使用8個比特來表示灰度圖像,所以像素值的范圍是0~255。當像素值的和超過255時,這兩種加法方式的處理方法是不一樣的。1. 運算符“+”在使用運算符“+”對兩個圖像的像素進行加法運算時,具體規(guī)則如式(6-21)所示。(6-21)式中,a和b表示兩幅圖像的像素值,表示“a+b的和除以256取余”。例6-7對兩幅圖像利用“+”進行加法運算,顯示“+”的結果。6.3.1
圖像相加代碼如下:importcv2ascvimg1=cv.imread("D:\Python\pic\smalldog52.jpg")img2=cv.imread("D:\Python\pic\smalldog52.jpg")img=img1+img2cv.imshow("img1",img1)cv.imshow("img",img)cv.waitKey()cv.destroyAllWindows()6.3.1
圖像相加a)原始圖像 b)相加之后的圖像圖6-21兩幅圖像進行“+”運算的結果6.3.1
圖像相加2. cv2.add()函數(shù)在使用cv2.add()函數(shù)實現(xiàn)圖像加法運算時,其一般格式如式為:result=cv2.add(a,b)其中
result表示計算的結果;
a和b表示需要進行加法計算的兩幅圖像的像素值;使用cv2.add()函數(shù)進行圖像加法運算時,會得到像素值的最大值。規(guī)則如下:(6-22)式中,a和b表示兩幅圖像的像素值,當像素a和像素b的和超過255時,會將其截斷,取范圍內(nèi)的最大值,這與運算符“+”是不同的。6.3.1
圖像相加例6-8對兩幅圖像利用cv2.add()函數(shù)進行加法運算,顯示運算結果。代碼如下:importcv2ascvimg1=cv.imread("D:\Python\pic\smalldog52.jpg")img2=cv.imread("D:\Python\pic\smalldog52.jpg")img=cv.add(img1,img2)cv.imshow("img1",img1)cv.imshow("img",img)cv.waitKey()cv.destroyAllWindows()6.3.1
圖像相加a)原始圖像 b)相加之后的圖像圖6-22兩幅圖像使用cv2.add()函數(shù)相加的結果6.3.2
圖像相減在面向Python的OpenCV中有兩種方法可以實現(xiàn)圖像的減法運算。一種是通過運算符“-”對圖像進行減法運算;另一種是通過cv2.subtract()函數(shù)來實現(xiàn)對圖像的減法運算。與加法運算類似,使用運算符“-”和cv2.subtract()函數(shù)進行減法運算時,對于超出范圍的處理是不一樣的。1. 運算符“-”在使用運算符“-”對兩個圖像的像素進行減法運算時,具體規(guī)則如式(6-23)所示。
(6-23)式中,a和b表示兩幅圖像的像素值,表示“a-b的差除以255取余后加1”。6.3.2
圖像相減a)原始圖像 b)相減之后的圖像圖6-23兩幅圖像進行“-”運算的結果6.3.2
圖像相減2. cv2.subtract()函數(shù)在使用cv2.subtract()函數(shù)實現(xiàn)圖像減法運算時,其一般格式如式為:result=cv2.subtract(a,b)其中
result表示計算的結果;
a和b表示需要進行減法計算的兩幅圖像的像素值;使用cv2.subtract()函數(shù)進行圖像減法運算時,規(guī)則如下:(6-24)式中,a和b表示兩幅圖像的像素值,當像素a和像素b的差值小于0時,會將其截斷,這與運算符“-”是不同的。6.3.2
圖像相減a)原始圖像 b)相減之后的圖像圖6-24兩幅圖像使用cv2.subtract()函數(shù)相減的結果6.3.3
圖像相乘圖像乘法運算有矩陣乘法和矩陣的點乘兩種,在面向Python的OpenCV提供了cv2.multiply()函數(shù)進行矩陣的點乘運算,Python為矩陣的乘法運算提供了dot()函數(shù)。矩陣乘法的一般格式為;result=np.dot(a,b)其中
result表示計算的結果;
a和b表示需要進行矩陣乘法的兩幅圖像像素值矩陣;矩陣點乘運算必須滿足行列維數(shù)的規(guī)則,點乘運算的一般格式為;result=cv2.multiply(a,b)其中
result表示計算的結果;
a和b表示需要進行矩陣點乘的兩幅圖像像素值矩陣;6.3.3
圖像相乘a)原始圖像 b)相乘之后的圖像圖6-25兩幅圖像使用cv2.multiply()函數(shù)相乘的結果6.3.4
圖像相除圖像除法運算應用到圖像中即為矩陣的點除運算,在面向Python的OpenCV提供了cv2.divide()函數(shù)進行像素矩陣的點除運算,一般格式為;result=cv2.divide(a,b)其中
result表示計算的結果;
a和b表示需要進行矩陣點除的兩幅圖像像素值矩陣;6.3.4
圖像相除a)原始圖像 b)相乘之后的圖像圖6-26兩幅圖像使用cv2.divide()函數(shù)相除的結果6.4.1
二值圖像的連通性1.4聯(lián)通和8連通作為相同值(0或1)的像素間是相互連通還是分離(連通性,connectivity)的判斷標準,一般用下述的4連通(4-connected)和8連通(8-connected)。4連通如圖6-27(a)所示,是連接位于像素
的上下左右像素,也就是連接
位置上具有相同灰度值像素的標準。8連通如圖6-27(b)所示,是連接處于上下左右以及4個斜鄰近方向上共8個位置的同值像素的標準。4連通的像素群通常也是8連通。4連通和8連通的像素塊稱為連通成分(connectedcomponent)。如果一個像素集合內(nèi)的每一個像素與集合內(nèi)其他像素連通,則稱該集合為一個連通成分??紤]灰度值為0(表示背景)和1(表示對象)的二值圖像,所有1-像素的集合表示前景,用S表示;所有0-像素的集合叫做背景,用S的補集表示。四周被1-像素連通成分所包圍的那些0-像素組成的連通成分叫做孔或洞(hole)。6.4.1
二值圖像的連通性將1-像素的連通性用8連通定義時,則0-像素的連通性使用的是4連通,反之,將1-像素的連通性用4連通定義時,則0-像素的連通性使用的是8連通。也即對前景和背景應使用不同的連通性。例如,在圖6-28中,灰色像素表示1-像素,白色像素表示0-像素,將1-像素的連通性用8連通定義時,這里所示的所有的1-像素都連接在一起。像素A與外側的0-像素不連通,并且被1-像素的連通成分所包圍而形成孔。如果1-像素的連通性用4連通定義時,此圖中的1-像素被分為兩個連通成分。由于此時對0-像素采用8連通,像素A就與外側的0-像素連通起來而不再是孔了。圖6-274連通和8連通
圖6-28連通性的定義6.4.1
二值圖像的連通性2.路徑在前景S中,從像素到像素的一個像素序列表示路徑。4路徑表示像素與其近鄰像素是4連通關系,8路徑表示像素與其近鄰像素是8連通關系,如圖6-29所示。已知像素p和q,如果存在一條從p到q的路徑,且路徑上的全部像素都包含在S中,則稱p與q是連通的。6.4.1
二值圖像的連通性3.歐拉數(shù)在幾何理論中,閉區(qū)域的宏觀形態(tài)可以用它的拓撲性質來度量。除撕裂或扭接外,在任何變形下都不改變的圖像性質稱為拓撲性質(topologicalcharacteristic)。顯然兩點間的距離不是拓撲性質,因為圖像拉伸或壓縮時它都改變。圖像的連通性是拓撲性質,當平移、旋轉、拉伸、壓縮、扭變之后,連通性是不變的。因此,區(qū)域的孔數(shù)H和連通成分數(shù)C是拓撲性質??捎脷W拉數(shù)來度量。歐拉數(shù)(Eulernumber)是圖像的一種拓撲度量。歐拉數(shù)等于連通成分數(shù)減去孔的個數(shù),即:(6-25)當然,這里的連通也取決于所定義的連通類型,即4連通或8連通。6.4.1
二值圖像的連通性MATLAB中用bweuler函數(shù)來計算二值圖像的歐拉數(shù),它的語法格式為:eul=bweuler(BW,n);其中,n為連通類型,n=4表示采用4連通,n=8表示采用8連通,n的默認值為8。在圖6-28中,將1-像素的連通性用4連通定義時,連通成分個數(shù)為2,由于孔的個數(shù)為0,所以歐拉數(shù)為2-0=2。另外,當用8連通定義時,連通成分的個數(shù)為1,由于孔的個數(shù)為1,所以歐拉數(shù)為1-1=0。在視覺應用中,歐拉數(shù)或示性數(shù)(genus)可作為圖形和文字識別時的特征量,并且歐拉數(shù)具有平移、旋轉和比例不變特性的拓撲特征。如圖6-30所示給出了一個歐拉數(shù)計算示例。其中,圖6-30(a)中有1個連通成分和1個孔,歐拉數(shù)為0;圖6-30(b)中有1個連通成分和2個孔,歐拉數(shù)為-1;圖6-30(c)中有2個連通成分和0個孔,歐拉數(shù)為2。6.4.1
二值圖像的連通性a)歐拉數(shù)為0(b)歐拉數(shù)為-1(c)歐拉數(shù)為26.4.1
二值圖像的連通性4.中軸中軸可作為物體的一種簡潔表示。如果對S中像素
的所有鄰點
有式(6-26)成立。(6-26)則S中像素
到
的距離
是局部最大值,距離將在下節(jié)中介紹。S中所有到
的距離是局部最大值的像素集合稱為對稱軸或中軸,通常記為。中軸示意圖如圖6-31所示。6.4.2
像素間的距離在數(shù)字圖像中,所用的像素間的距離除了歐幾里德距離(Euclideandistance)之外,還有棋盤距離(chess-boarddistance)及城區(qū)距離(cityblockdistance)。在數(shù)字圖像中,由于很多情況下只要能判斷距離的大小關系就可以了,而且與歐幾里德距離相比,棋盤距離及城區(qū)距離計算簡單,所以更為常用。如果兩個像素a,b的坐標分別用和表示,則兩像素間的歐幾里德距離可以用下式給出:(6-27)棋盤距離
是指從像素a朝著像素b,通過向縱、橫及斜向45°方向的相鄰像素依次移動,到達b時用最小的移動次數(shù)來定義兩像素間的距離,可用式(6-28)求得:(6-28)6.4.2
像素間的距離城區(qū)距離
是指從像素a向b沿縱、橫相鄰像素反復移動到達時的距離,下式給出其定義(6-29)三種距離的計算示例如圖6-32所示,它們之間存在如下關系(6-30)6.4.2
像素間的距離(a)歐幾里得距離(b)城區(qū)距離(c)棋盤距離6.4.3
二值圖像連通成分標記作為二值圖像的識別和圖形測量的前處理,要將同一連通成分(4連通和8連通)的所有的像素分配相同的標號,對不同的連通成分分配不同的標號,被稱為連通成分的標記(labeling)。舉例來說,如圖6-33所示的4連通標記的例子,互相連通的像素組用相同的標號,而不連通的像素組用不同的標號。這種方法在圖像處理和模式識別的許多領域有廣泛的應用,如光學字符識別(OpticalCharacterRecognition,OCR)、圖文分割、工程圖識別中的圖形或標注符號分割、生物醫(yī)學領域中自動細胞分類計數(shù)、流水線上自動產(chǎn)品質量檢測等。數(shù)字圖像像素間距離6.4.3
二值圖像連通成分標記目前連通成分標記分為兩大類,一類是基于像素點的連通成分標記,另一類是基于行程分析的連通成分標記。這里重點介紹一種基于像素點的連通成分標記方法,即順序標記法。順序標記法作為傳統(tǒng)的連通成分標記方法通常需要對二值圖像執(zhí)行二次掃描。第一次掃描通過逐行逐列掃描像素,判斷像素之間的鄰域關系,對屬于同一連通成分的像素賦予相同的連通標號。這種逐行逐列順序掃描的結果,通常會產(chǎn)生同一像素點被重復標記的現(xiàn)象,同一連通成分的不同子區(qū)域被賦予了不同的標記號。因此需要執(zhí)行第二次掃描消除重復性的標記,合并屬于同一連通成分的而具有不同標記號的子區(qū)域。6.4.3
二值圖像連通成分標記順序標記法算法:以4連通情況為例進行分析。按照從左至右、從上到下的順序對圖像進行掃描,如果當前像素為1-像素時,檢測該像素左邊和上邊的兩個鄰近像素,并按照如下規(guī)則進行標記:(1)如果左邊和上邊的兩個鄰近像素均為0-像素,則給當前像素分配一個新的標號(2)如果左邊和上邊的兩個鄰近像素只有一個1-像素,則把1-像素的標號賦給當前像素;(3)如果左邊和上邊的兩個鄰近像素均為1-像素且有相同的標號,則把該標號賦給當前像素;(4)如果左邊和上邊的兩個鄰近像素均為1-像素且有不同的標號,則把其中一個標號賦給當前像素,并做記號表明這兩個標號等價,即兩個鄰近像素通過當前像素連接在一起。6.4.3
二值圖像連通成分標記掃描結束時,將所有等價的標號對賦予一個唯一標號,最后再重新進行掃描,將各個等價對重新用新標號進行標注。對于8連通的情況,可采用類似的方法,唯一的區(qū)別在于:除了檢測當前像素的左邊和上邊的兩個鄰近像素外,還需檢測左上和右上的兩個鄰近像素。6.4.4
腐蝕腐蝕是形態(tài)學的基本操作之一,它的作用是將圖像的邊界點消除,可以使圖像沿著邊界向內(nèi)收縮。在圖像腐蝕操作過程中,一般使用一個結構元對一幅圖像內(nèi)的像素進行逐個遍歷,然后根據(jù)結構元與被腐蝕圖像的關系來確定腐蝕的結果。幾種常見的結構元如圖6-34所示,有矩形結構、正方形結構、十字交叉形結構和線性結構等。6.4.4
腐蝕腐蝕操作是遍歷像素來決定輸出值的,每一次判定的點都是與結構元中心點所對應的點,腐蝕過程如圖6-35所示。
a)待腐蝕圖像像素點b)結構元
c)遍歷像素點
d)輸出結果圖6-35腐蝕過程示意圖c)遍歷像素點d)輸出結果圖6-35腐蝕過程示意圖6.4.4
腐蝕在圖6-35中,圖6-15a)是待腐蝕的圖像像素點;圖6-35b)是用于腐蝕的結構元;圖6-35c)是結構元遍歷圖像像素的示意圖,圖中的陰影部分是全部可能的位置;圖6-35d)是腐蝕的結果示意圖。在結構元完全在圖像內(nèi)部時,結構元的中心點為1,其余為0,而當結構元不完全在圖像內(nèi)部時,結構元全部為0。6.4.4
腐蝕OpenCV中提供了cv2.erode()函數(shù)來實現(xiàn)圖像的腐蝕操作,其一般格式為:dst=cv2.erode(src,k[,anchor[,iterations[,boderType[,boderValue]]]])其中:
dst表示返回的腐蝕處理結果;
src表示原始圖像,即需要被腐蝕的圖像;
k表示腐蝕操作時所要采取的結構類型。它由兩種方式得到,第一種是通過自定義得到,第二種是通過cv2.getStructuringElement()函數(shù)得到;
anchor表示錨點的位置,默認為(-1,-1),表示在結構元的中心;
iterations表示腐蝕操作的迭代次數(shù);
boderType表示邊界樣式,一般默認使用BORDER_CONSTANT;
boderValue表示邊界值,一般使用默認值。6.4.4
腐蝕a)原始圖像 b)terations=3圖6-36cv2.erode()函數(shù)實現(xiàn)圖像的腐蝕過程6.4.5
膨脹膨脹是形態(tài)學的操作中的一種,膨脹操作與腐蝕操作正好相反,它是由圖像的邊界點處向外部擴張。在圖像膨脹操作過程中,也是逐個像素地遍歷待膨脹圖像,并且根據(jù)結構元與待膨脹圖像的關系來決定膨脹的效果。圖6-37顯示了膨脹操作示意圖。6.4.5
膨脹
a)待膨脹圖像
b)結構元
c)膨脹遍歷 d)輸出結果
圖6-37膨脹過程示意圖6.4.5
膨脹在圖6-37中,圖6-37a)是待膨脹的圖像像素點;圖6-17b)是用于膨脹的結構元;圖6-37c)是結構元遍歷圖像像素的示意圖,圖中的陰影部分是全部可能的位置;圖6-17d)是膨脹的結果示意圖。在結構元不完全在圖像內(nèi)部時,結構元的中心點為1,其余為0,而當結構元完全在圖像內(nèi)部時,結構元全部為0。6.4.5
膨脹OpenCV中提供了cv2.dilate()函數(shù)來實現(xiàn)圖像的膨脹操作,其一般格式為:dst=cv2.dilate(src,k[,anchor[,iterations[,boderType[,boderValue]]]])其中:
dst表示返回的膨脹處理結果;
src表示原始圖像,即需要被膨脹的圖像;
k表示膨脹操作時所要采取的結構類型。它由兩種方式得到,第一種是通過自定義得到,第二種是通過cv2.getStructuringElement()函數(shù)得到;
anchor表示錨點的位置,默認為(-1,-1),表示在結構元的中心;
iterations表示膨脹操作的迭代次數(shù);
boderType表示邊界樣式,一般默認使用BORDER_CONSTANT;
boderValue表示邊界值,一般使用默認值。6.4.5
膨脹a)原始圖像 b)iterations=3圖6-38cv2.dilate()函數(shù)實現(xiàn)圖像的膨脹過程的膨脹過程6.5.1
主成分分析(PCA)PCA是PrincipalComponentAnalysis的縮寫,即主成分分析。PCA主要用于數(shù)據(jù)降維,對于高維的向量,PCA方法求得一個k維特征的投影矩陣,這個投影矩陣可以將特征從高維降到低維。投影矩陣也可以叫做變換矩陣。新的低維特征向量都是正交的。通過求樣本矩陣的協(xié)方差矩陣,然后求出協(xié)方差矩陣的特征向量,這些特征向量構成投影矩陣。特征向量的選擇取決于協(xié)方差矩陣的特征值大小。假設圖像的大小為
,將其按照列相連構成一個
維的列向量。設一共有N張圖像,為第j張圖像的列向量,X為N張圖像所構成的圖像矩陣,則協(xié)方差矩陣V為:(6-31)6.5.1
主成分分析(PCA)其中為樣本集圖像的平均圖像向量,
。通過QR或SVD計算V的前m個特征值
和對應的特征向量
,要求它們是標準正交的。前m個特征向量構成投影矩陣
,m的取值可以根據(jù)特征值的累計貢獻率來確定:(6-32)其中
。主要函數(shù):fromPILimportImagefromnumpyimportim=array(Image.open('test_pic/test.jpg'))shape:用于計算矩陣的維數(shù)6.5.1
主成分分析(PCA)說明:因為im為三維函數(shù),故得到的結果格式為(片數(shù),行數(shù),列數(shù))mean():求取矩陣均值說明:mean(array,axis=n)n可以等于0,1,空,默認求整個矩陣的均值,0時,壓縮行對各列求均值,1時,壓縮列,對各行求均值。dot():計算矩陣乘積,也就是我們所學的矩陣乘積。矩陣.T:求該矩陣的轉置。linalg.eigh():求特征值和特征向量。數(shù)據(jù)中心化:用矩陣減去平均值。6.5.1
主成分分析(PCA)6.5.2SIFT(尺度不變特征變換)由DavidLower提出的尺度不變特征變換(ScaleInvariantFeatureTransform,SIFT)是近十年來最成功的的圖像局部描述子之一,其應用范圍包含物體辨識、機器人地圖感知與導航、影像縫合、3D模型建立、手勢辨識、影像追蹤和動作比對,SIFT的目標是解決低層次特征提取及其在圖像匹配應用中的很多實際問題。SIFT特征包括兩個步驟:興趣點檢測器(特征提?。┖兔枋鲎?。SIFT描述子具有非常強的穩(wěn)健性,這也是SIFT特征能夠成功和流行的主要原因。SIFT特征對于尺度、旋轉和亮度都具有不變性。因此,它可以用于三維視角和噪聲的可靠匹配。6.5.2SIFT(尺度不變特征變換)(1)興趣點檢測神經(jīng)生理學實驗表明,人類視網(wǎng)膜以神經(jīng)細胞實施的操作與LoG(LaplacianofGaussian)算子
(G代表高斯濾波器)極為相似,視網(wǎng)膜對圖像的操作可以描述為圖像與
算子的卷積。SIFT特征使用高斯差分函數(shù)來定位興趣點,如式(6-33)所示。(6-33)函數(shù)L是一個尺度空間函數(shù),可以用來定義不同尺度的平滑圖像,興趣點是在圖像位置和尺度變化下,
的最大值和最小值點。6.5.2SIFT(尺度不變特征變換)(2)描述子為了實現(xiàn)旋轉不變性,基于每個點周圍圖像梯度的方向和大小,SIFT描述子引入了參考方向。SIFT描述子使用主方向描述參考方向。主方向使用方向直方圖來度量。為了描述每個尺度上經(jīng)過濾波的興趣點(關鍵點)特征,梯度幅值和梯度幅角如式(6-34)所示。
(6-34)6.5.2SIFT(尺度不變特征變換)圖6-40圖像拼接及灰度化圖6-42基于SIFT的圖像特征點匹配圖6-41基于SIFT的圖像特征點標注(用紅色圓圈表示)6.5.2SIFT(尺度不變特征變換)FLANN(Fast_Library_for_Approximate_Nearest_Neighbors)為快速最近鄰搜索包,它是一個對大數(shù)據(jù)集和高維特征進行最近鄰搜索的算法的集合,而且這些算法都已經(jīng)被優(yōu)化過了。在面對大數(shù)據(jù)集時它的效果要好于暴力匹配。經(jīng)驗證,F(xiàn)LANN比其他的最近鄰搜索軟件快10倍。使用FLANN匹配,需要傳入兩個字典作為參數(shù)。一個是IndexParams=dict(algorithm=FLANN_INDEX_KDTREE,trees=5),指定待處理核密度樹的數(shù)量(理想的數(shù)量在1-16)。第二個是search_params=dict(checks=50)指定遞歸遍歷的次數(shù),值越高結果越準確,但是消耗的時間也越多。實際上,匹配效果很大程度上取決于輸入。6.5.2SIFT(尺度不變特征變換)針對SIFT圖像匹配算法,進行了實際的電視機背板實驗性能分析,分別進行了尺度不變性、旋轉不變性以及尺度和旋轉不變性的特性驗證和性能分析,圖像匹配結果如圖6-43和圖6-44所示。
(a)縮放尺度圖像匹配結果
(b)旋轉圖像匹配結果
(c)縮放尺度和旋轉圖像匹配結果6.5.2SIFT(尺度不變特征變換)(c)縮放尺度和旋轉圖像匹配結果(b)旋轉圖像匹配結果(a)縮放尺度圖像匹配結果6.5.2SIFT(尺度不變特征變換)由圖像匹配結果圖6-43和圖6-44可以看出,SIFT算法匹配的準確度較高,尺度和旋轉不變特性較好,但是特征點較多,在特征點較多的情況下,誤匹配出現(xiàn)的概率較大,且SIFT算法匹配速度慢,不適用于實時性匹配場景中。6.5.3SURF(加速魯棒特征)SURF全稱為“加速魯棒特征”(SpeededUpRobustFeature),不僅是尺度不變特征,而且是具有較高計算效率的特征。SURF是尺度不變特征變換算法(SIFT算法)的加速版。SURF最大的特征在于采用了haar特征以及積分圖像的概念,SIFT采用的是DoG圖像,而SURF采用的是Hessian矩陣(SURF算法核心)行列式近似值圖
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年中國讀寫器行業(yè)投資前景及策略咨詢研究報告
- 鮮雞鴨蛋購銷合同協(xié)議范本模板(2025年)
- 2025水電購銷的合同范本
- 2024年養(yǎng)殖場廢棄物資源化利用貸款合同3篇
- 2024醫(yī)療事故責任認定與賠償標準實施合同3篇
- 2024至2030年聚甲醛制品項目投資價值分析報告
- 2024至2030年中國三維短纖維牽伸機行業(yè)投資前景及策略咨詢研究報告
- 2025年服務器銷售合同范文
- 2024中小企業(yè)綠色生產(chǎn)技術咨詢服務合同3篇
- 2024年度大米加工生產(chǎn)線設備采購合同模板3篇
- 學校安全教育“一月一主題”內(nèi)容
- 葉徐版語言學綱要復習重點
- 人教版培智一年級上生活適應教案
- 《季羨林自傳 我的前半生》讀書筆記思維導圖PPT模板下載
- 南理工2023運籌學試卷A及答案
- 【讀寫策略】如何編寫班史
- “紅領巾獎章”章樣圖案及說明
- 人教部編版七年級語文上冊課程綱要
- 中職中專Powerpoint 2010 習題匯總(含答案)試卷
- 回流焊Reflow曲線講解
- 威布爾分布課件
評論
0/150
提交評論