智能圖像處理:Python和OpenCV實現(xiàn)-課件 第十一章 彩色圖像處理_第1頁
智能圖像處理:Python和OpenCV實現(xiàn)-課件 第十一章 彩色圖像處理_第2頁
智能圖像處理:Python和OpenCV實現(xiàn)-課件 第十一章 彩色圖像處理_第3頁
智能圖像處理:Python和OpenCV實現(xiàn)-課件 第十一章 彩色圖像處理_第4頁
智能圖像處理:Python和OpenCV實現(xiàn)-課件 第十一章 彩色圖像處理_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第11章彩色圖像的處理彩色圖像(colorimage)直觀的說對應(yīng)我們周圍彩色環(huán)境的感知(即人的視覺器官的感知)。從計算的角度,一幅彩色圖像被看作一個向量函數(shù)(一般具有三個分量),設(shè)函數(shù)的范圍是一個具有范數(shù)的向量空間,也稱為彩色空間(colorspace)。1666年牛頓發(fā)現(xiàn)了一個現(xiàn)象,當一束太陽光穿過一個玻璃棱鏡時,出現(xiàn)的光束不是白色,而是由從一端為紫色到另一端為紅色的連續(xù)彩色譜組成。彩色譜可分為六個寬的區(qū)域:紫色、藍色、綠色、黃色、橘紅色和紅色。彩色定義:彩色是物體的一種屬性,它依賴于以下三個方面的因素。(1)光源——照射光的譜性質(zhì)或譜能量分布;(2)物體——被照射物體的反射性質(zhì);(3)成像接收器(眼睛或成像傳感器)——光譜能量吸收性質(zhì)。11.1彩色模型彩色模型也稱彩色空間或彩色系統(tǒng),是用來精確標定和生成各種顏色的一套規(guī)則和定義,它的用途是在某些標準下用通??山邮艿姆绞胶喕噬?guī)范。彩色模型通??梢圆捎米鴺讼到y(tǒng)來描述,而位于系統(tǒng)中的每種顏色都可由坐標空間中的單個點來表示。在數(shù)字圖像處理中,實際最通用的面向硬件的模型是RGB(紅、綠、藍)模型。該模型用于彩色監(jiān)視器和一大類彩色視頻攝像機。CMY(青、品紅、黃)、CMYK(青、品紅、黃、黑)模型是針對彩色打印機的。HSI(色調(diào)、飽和度、亮度)模型符合人類描述和解釋顏色的方式。HSI模型還有一個優(yōu)點,就是把圖像分成彩色和灰度信息,這將更便于許多灰度處理技術(shù)的應(yīng)用。CIE顏色空間(CIELuv、CIELab)是另一種符合人類描述和解釋顏色的方式。11.1.1RGB彩色模型RGB彩色模型是工業(yè)界的一種顏色標準,是通過對紅綠藍三個顏色亮度的變化以及他們相互之間的疊加來得到各種各樣的顏色。RGB彩色模型基于笛卡爾坐標系統(tǒng),它的軸表示光的三種原色(R、G和B),一般將它們歸一化到[0,1]范圍,如圖11-1(a)所示。所得到的立方體的8個頂點對應(yīng)光的3種原色、3種二次色、純白色和純黑色。表11-1列出這8個頂點中每個頂點的R、G和B值。(a)RGB彩色模型圖11-1RGB彩色模型和立方體

圖11-1RGB彩色模型和立方體11.1.2CMY和CMYK彩色模型CMY模型基于三種顏料的原色(藍綠、品紅和黃),它用于彩色打印機,其中每個原色常對應(yīng)一種墨水(或墨粉)盒。因為相同數(shù)量的各個原色相加來產(chǎn)生黑色會得到不可接受的渾濁的黑色,所以實際中要加上第4種彩色K(黑色),這樣的模型稱為CMYK模型。其實,CMY值可以很容易通過1減去RGB值得到。即:

在實際圖像處理中,這種彩色模型主要用于產(chǎn)生硬拷貝輸出,因此從CMY到RGB的反向操作通常沒有實際意義。CMYK(Cyan,Magenta,Yellow,blacK)顏色空間應(yīng)用于印刷工業(yè),印刷業(yè)通過青(C)、品(M)、黃(Y)三原色油墨的不同,網(wǎng)點面積率的疊印來表現(xiàn)豐富多彩的顏色和階調(diào),這便是三原色的CMY顏色空間。實際印刷中,一般采用青(C)、品(M)、黃(Y)、黑(BK)四色印刷,在印刷的中間調(diào)至暗調(diào)增加黑版。當紅綠藍三原色被混合時,會產(chǎn)生白色,但是當混合青、品紅和黃三原色時會產(chǎn)生黑色。因為相同數(shù)量的各個原色相加產(chǎn)生的黑色不純正,為了生成純正的黑色,所以實際中要加上第4種彩色K(黑色),這樣的模型稱之為CMYK。從CMY到CMYK的轉(zhuǎn)換公式為:11.1.3HSI彩色模型HSI(Hue,Saturation,Intensity)模型是從人的視覺系統(tǒng)出發(fā),用色調(diào)(Hue)、色飽和度(Saturation)和亮度(Intensity)來描述色彩。色調(diào)是描述純色(純黃色、純橙色或純紅色)的顏色屬性;飽和度是一種純色被白光稀釋一定程度的度量;亮度是一個主觀描述子,體現(xiàn)無色的強度概念。HSI色彩空間可以用一個圓錐空間模型來描述,如圖12-2所示。色彩空間的圓錐模型相當復(fù)雜,但確能把色調(diào)、亮度和色飽和度的變化情形表現(xiàn)得很清楚。HSI色彩空間和RGB色彩空間只是同一物理量的不同表示法,因而它們之間存在著轉(zhuǎn)換關(guān)系。圖11-2HSI彩色模型1.顏色從RGB轉(zhuǎn)換為HIS從RGB到HSI的轉(zhuǎn)換是一個非線性變換。對任何一個在[0,1]范圍內(nèi)的R、G、B值,其對應(yīng)HSI模型中的I、S、H分量可由下面的公式計算。

當S=0時對應(yīng)的是無色的中心點,這時H就沒有意義了,此時定義H為0。當I=0時,S也沒有意義。

11.1.4YIQ(NTSC)彩色模型

11.1.5YCrCb彩色模型

11.2色彩空間的轉(zhuǎn)換上節(jié)我們介紹了一些常用的色彩空間類型,除此之外,還有一些其他的色彩空間。每個色彩空間都有自己擅長的處理問題的領(lǐng)域,因此,為了更方便地處理某個具體問題,就要用到色彩空間類型之間的轉(zhuǎn)換。色彩空間類型轉(zhuǎn)換是指將圖像從一個色彩空間轉(zhuǎn)換到另一個色彩空間。11.2.1色彩空間類型轉(zhuǎn)換函數(shù)表12-2常用色彩空間轉(zhuǎn)換碼轉(zhuǎn)換碼解

釋cv2.COLOR_BGR2RGBBGR色彩空間轉(zhuǎn)RGB色彩空間cv2.COLOR_BGR2GRAYBGR色彩空間轉(zhuǎn)GRAY色彩空間cv2.COLOR_BGR2HSVBGR色彩空間轉(zhuǎn)HSV色彩空間cv2.COLOR_BGR2YCrCbBGR色彩空間轉(zhuǎn)YCrCb色彩空間cv2.COLOR_BGR2HLSBGR色彩空間轉(zhuǎn)HLS色彩空間在OpenCV中,cv2.cvtColor()函數(shù)用于實現(xiàn)色彩空間轉(zhuǎn)換,其一般格式為:image=cv2.cvtColor(src,code,dstCn])其中輸入輸出參數(shù)為:

image:表示與輸入值具有相同類型和深度的輸出圖像;

src:表示原始輸入圖像;

code:是色彩空間轉(zhuǎn)換碼,常見的枚舉值如表12-2所示;

dstCn:表示目標圖像的通道數(shù)。11.2.2RGB色彩空間RGB色彩空間使用三個數(shù)值向量表示色光三基色(Red、Green、Blue)的亮度。每個通道的數(shù)量值被量化為0~255級,因此,RGB圖像的紅、綠、藍三個通道的圖像都是一幅8位灰度圖。在OpenCV中,彩色通道的順序是按照BGR的通道順序存儲的。下面介紹一個由BGR色彩空間轉(zhuǎn)換為RGB色彩空間的例子?!纠?1.1】BGR色彩空間轉(zhuǎn)換為RGB色彩空間,程序代碼如下:importcv2importmatplotlib.pyplotaspltimg_BGR=cv2.imread("d:/pics/lena.jpg")plt.subplot(1,2,1)plt.imshow(img_BGR),plt.title('BGR_image')plt.axis("off")#BGR色彩空間轉(zhuǎn)RGB色彩空間img_RGB=cv2.cvtColor(img_BGR,cv2.COLOR_BGR2RGB)plt.subplot(1,2,2)plt.imshow(img_RGB),plt.title('RGB_image')plt.axis("off")plt.show()程序運行結(jié)果如圖11-3所示:(a)BGR色彩空間圖像(b)RGB色彩空間圖像圖11-3BGR轉(zhuǎn)換為RGB色彩空間11.2.3GRAY色彩空間GRAY色彩空間一般指8位灰度圖,像素值的范圍是0~255,共256個灰度級。由RGB色彩空間轉(zhuǎn)換為GRAY色彩空間的標準公式為:

Gray=0.299*R+0.587*G+0.114*B

11-18上式中,Gray表示灰度圖,R、G、B分別是RGB色彩空間的三個通道的圖像。【例11.2】RGB色彩空間轉(zhuǎn)換為GRAY色彩空間。程序代碼如下:importcv2image1=cv2.imread("d:/pics/lena.jpg",4)cv2.imshow("Origin",image1)#RGB色彩空間轉(zhuǎn)GRAY色彩空間image2=cv2.cvtColor(image1,cv2.COLOR_RGB2GRAY)cv2.imshow("Gray",image2)cv2.waitKey(0)cv2.destroyAllWindows()程序運行結(jié)果如圖11-4所示。(a)原圖像(b)GRAY色彩空間的圖像圖11-4彩色圖像轉(zhuǎn)灰度圖像11.2.4YCrCb色彩空間

【例11.3】RGB色彩空間轉(zhuǎn)換為YCrCb色彩空間。程序代碼如下:importcv2image1=cv2.imread("d:\:/pics\/lena.jpg",4)cv2.imshow("BGRimage1",image1)#RGB色彩空間轉(zhuǎn)YCrCb色彩空間image2=cv2.cvtColor(image1,cv2.COLOR_RGB2YCrCb)cv2.imshow("YCrCbimage",image2)cv2.waitKey(0)cv2.destroyAllWindows()程序運行結(jié)果如圖11-5所示。(a)原圖像(b)YCrCb色彩空間圖像圖11-5RGB轉(zhuǎn)YCrCb色彩空間11.2.5HSV色彩空間RGB色彩模型是從硬件角度提出的顏色模型,與人眼匹配時可能會產(chǎn)生一定的差別。HSV是從心里學(xué)角度提出的,它包括色調(diào)、飽和度和亮度三要素。其中,色調(diào)是指光的顏色,與混合光譜的主要光波長有關(guān);飽和度是指顏色深淺程度或相對純凈度;亮度反映的是人眼感受到光的明暗程度。在具體實現(xiàn)時,將顏色分布在圓周上,不同的角度代表不同的顏色,所以通過調(diào)整色調(diào)值就可以使用不同的顏色,其中色調(diào)值的范圍是0~359。飽和度為比例值,范圍是0~1,具體為所選顏色的純度值與該顏色最大純度值的比值。亮度也是比例值,范圍是0~1。

從RGB色彩空間轉(zhuǎn)到HSV色彩空間時需要將RGB色彩空間的值轉(zhuǎn)換到0~1的范圍內(nèi),之后再進行HSV轉(zhuǎn)換。具體過程為:【例11.4】RGB色彩空間轉(zhuǎn)換為HSV色彩空間。代碼如下:importcv2image1=cv2.imread("d:/pics/lena.jpg")cv2.imshow("BGR_image",image1)#BGR色彩空間轉(zhuǎn)RGB色彩空間image2=cv2.cvtColor(image1,cv2.COLOR_BGR2RGB)#RGB色彩空間轉(zhuǎn)HSV色彩空間image2=cv2.cvtColor(image2,cv2.COLOR_RGB2HSV)cv2.imshow("HSV_image",image2)cv2.waitKey(0)cv2.destroyAllWindows()程序運行結(jié)果如圖11-6所示。(a) 原圖像

(b)HSV色彩空間圖像圖11-6RGB轉(zhuǎn)換為HSV色彩空間11.3彩色圖像通道的分離與合并在彩色圖像RGB色彩模式下通道是指單獨的紅色(R)、綠色(G)、藍色(B)部分。即一幅完整的圖像,是由紅色、綠色、藍色三個通道組成的,他們共同作用產(chǎn)生了完整的彩色圖像。一幅完整的圖像,紅色綠色藍色三個通道缺一不可。即使圖像中看起來沒有藍色,只能說藍色光的亮度均為0或者各像素值的紅色和綠色通道不全為0,但不能說沒有藍色通道存在。如果關(guān)閉了紅色通道,那么圖像就偏青色;如果關(guān)閉了綠色通道,那么圖像就偏洋紅色;如果關(guān)閉了藍色通道,那么圖像就偏黃色。如果察看單個通道,發(fā)現(xiàn)每個通道都顯示為一幅灰度圖像。某個通道的灰度圖像中的明暗對應(yīng)該通道色的明暗,從而表達出該色光在整體圖像上的分布情況。由于通道共有3個,所以也就有了3幅灰度圖像。通道中的純白,代表了該色光在此處為最高亮度,亮度級別是255。通道中的純黑,代表了該色光在此處完全不發(fā)光,亮度級別是0。介于純黑純白之間的灰度,代表了不同的發(fā)光程度,亮度級別介于0~255之間。灰度中越偏白的部分,表示色光亮度值越高,越偏黑的部分則表示亮度值越低。11.3.1彩色圖像的通道分離在OpenCV中有cv2.split函數(shù),主要功能是把一個彩色圖像分割成R、G、B三個通道,方便進一步的圖像處理。函數(shù)cv2.split語法格式為:b,g,r=cv2.split(src)函數(shù)功能是輸入原圖像,返回其各自的通道內(nèi)對應(yīng)的數(shù)組元素的值?!纠?1.5】利用通道分離函數(shù),將彩色圖像分離成RGB三通道圖像,程序代碼如下:importcv2img=cv2.imread('d:/pics/lena.jpg')b,g,r=cv2.split(img)#順序是b,g,r,不是r,g,bcv2.imshow('image',img)cv2.imshow("Blue1",b)cv2.imshow("Green1",g)cv2.imshow("Red1",r)cv2.waitKey(0)cv2.destroyAllWindows()程序運行結(jié)果如圖11-7所示。(a)原彩色圖像(b)B通道圖像(c)G通道圖像(d)R通道圖像從圖11-7中看到,分離出來的圖像顏色都是灰色的,為什么不是藍色通道是藍色,綠色通道是綠色,紅色通道是紅色?這是因為cv2.split函數(shù)分離出的B、G、R是單通道灰度圖像,而不是RGB本身的顏色的,要想得到有顏色單通道圖像,需要擴展通道并對每個通道進行處理?!纠?1.6】擴展通道,使分離出來的RGB三個通道顯示其對應(yīng)的顏色,程序代碼如下:importcv2importnumpyasnpimg=cv2.imread("d:/pics/lena.jpg")B,G,R=cv2.split(img)

#通道擴展zeros=np.zeros(img.shape[:2],np.uint8)img_B=cv2.merge([B,zeros,zeros])img_G=cv2.merge([zeros,G,zeros])img_R=cv2.merge([zeros,zeros,R])cv2.imshow("B_img",img_B)cv2.imshow("G_img",img_G)cv2.imshow("R_img",img_R)cv2.waitKey(0)cv2.destroyAllWindows()程序運行結(jié)果如圖11-8所示。(a)藍通道圖像(b)綠通道圖像(c)紅通道圖像圖11-8帶有顏色的藍綠紅三通道圖像11.3.2彩色圖像的通道合并在OpenCV中有cv2.merge()函數(shù),主要功能是對分離處理后的各個通道進行合并,重新合并成一個多通道的圖像。函數(shù)cv2.merge()語法格式為:merged=cv2.merge([b,g,r])其中輸入?yún)?shù)為要合并的矩陣參數(shù),輸入的所有矩陣必須具有相同尺寸和深度。輸出圖像的通道數(shù)量將是矩陣數(shù)組中的通道總數(shù)?!纠?1.7】利用通道合并函數(shù),將RGB三通道圖像合成為彩色圖像,程序代碼如下:importcv2img=cv2.imread('d:/pics/lena.jpg')b,g,r=cv2.split(img)#分離通道m(xù)erged=cv2.merge([b,g,r])#合并通道cv2.imshow("mergedimage",merged)cv2.waitKey(0)cv2.destroyAllWindows()程序運行結(jié)果如圖11-7(a)所示:11.4全彩色圖像處理

11.4.1彩色變換

11.4.2直方圖處理直方圖的概念可以擴展到彩色圖像,其中每幅圖像可用3個具有N個(一般,4≤N≤256)直方條的直方圖來表示。直方圖技術(shù)(如,直方圖均衡化)可用于使用某個彩色模型表達的圖像,該模型允許將亮度分量與色度分量分開(如,HSI模型):對一幅彩色圖像的亮度(強度I)分量進行處理而保持色度分量(H和S)不變。直方圖均衡化的主要目的是將原始圖像的灰度級均勻的映射到整個灰度級范圍內(nèi),從而得到一個灰度級分布均勻的圖像。這種均衡化從灰度值統(tǒng)計的概率方面和人類視覺系統(tǒng)上實現(xiàn)了均衡。在OpenCV中:在OpenCV中提供了cv2.equalizeHist()函數(shù),用于實現(xiàn)圖像的直方圖均衡化,其語法格式為:image=cv2.equalizeHist(src)其中,src表示輸入的待處理圖像。另外,python模塊matplotlib.pyplot中的hist()函數(shù)能夠方便的繪制直方圖,通常使用該函數(shù)直接繪制直方圖。其語法格式如下:matplotlib.pyplot.hist(image,BINS)其中,image表示原始圖像數(shù)據(jù),必須將其轉(zhuǎn)換為一維數(shù)據(jù)。BINS表示灰度級的分組情況?!纠?1.8】對彩色圖像各個通道分別進行直方圖均衡化,程序代碼如下:importcv2importmatplotlib.pyplotaspltimg=cv2.imread("d:/pics/lena.jpg")cv2.imshow("Original",img)#顯示原始圖像plt.figure(1)#構(gòu)造第一個通道圖像的直方圖hist0=cv2.calcHist([img[:,:,0]],[0],None,[256],[0,256])plt.plot(hist0,color='b')#繪制直方圖#第二個通道圖像的直方圖hist1=cv2.calcHist([img[:,:,1]],[0],None,[256],[0,256])plt.plot(hist1,color='g')#第三個通道圖像的直方圖hist2=cv2.calcHist([img[:,:,2]],[0],None,[256],[0,256])plt.plot(hist2,color='r')#對三個通道的圖像分別進行均衡化處理:img0_equ=cv2.equalizeHist(img[:,:,0])img1_equ=cv2.equalizeHist(img[:,:,1])img2_equ=cv2.equalizeHist(img[:,:,2])#合并通道,也就是合并為彩色圖像:image=cv2.merge([img0_equ,img1_equ,img2_equ])#均衡化后的直方圖plt.figure(2)hist_equ=cv2.calcHist([image],[0],None,[256],[0,256])plt.plot(hist_equ)cv2.imshow("HistogramEqualization",image)#顯示均衡化后的圖像plt.show()cv2.waitKey()cv2.destroyAllWindows()程序運行結(jié)果如圖11-9所示??梢钥闯?,直方圖均衡化達到了圖像像素均勻分布的結(jié)果。(a)原始圖像

(b)

原始圖像的直方圖(c)均衡化后的圖像

(d)均衡化后圖像的直方圖11.4.3彩色圖像平滑和銳化

從11-30式中可以看出,通過對各個單獨的彩色通道用標準的灰度鄰域處理方法來執(zhí)行鄰域平均得到平滑的效果。類似的,對用RGB彩色模型表示的彩色圖像的銳化可通過對各個分量圖像分別使用銳化操作符(如,拉普拉斯算子)再將結(jié)果結(jié)合起來實現(xiàn)。在RGB彩色模型中,向量c的Laplacian變換為:

平滑和銳化操作也可通過處理一幅采用合適彩色模型(如,YIQ或HSI)表示的圖像強度(亮度)分量并將結(jié)果與原始色度通道結(jié)合來進行。用均值濾波來實現(xiàn)圖像平滑,在OpenCV中,提供了cv2.blur()函數(shù)來實現(xiàn)圖像的均值濾波。其一般語法格式為:dst=cv2.blur(src,ksize,anchor,borderType)其中,dst表示返回的均值濾波處理的結(jié)果圖像;src表示原始圖像,該圖像不限制通道數(shù)目;ksize表示濾波卷積核的大??;Anchor表示圖像處理的錨點,其默認值為(-1,-1),表示位于卷積核中心點;borderType表示以哪種方式處理邊界值。通常情況下,在使用均值濾波時,anchor和borderType參數(shù)直接使用默認值即可?!纠?1.9】定義不同卷積核大小,對彩色加噪圖像進行平滑處理。程序代碼如下:importcv2importnumpyasnp#加椒鹽噪聲的函數(shù)defsaltPepper(image,salt,pepper):height,width=image.shape[0:2]pertotal=salt+pepper#總噪聲占比

noiseImage=image.copy()noiseNum=int(pertotal*height*width)foriinrange(noiseNum):rows=np.random.randint(0,height-1)cols=np.random.randint(0,width-1)if(np.random.randint(0,100)<salt*100):noiseImage[rows,cols]=255else:noiseImage[rows,cols]=0returnnoiseImageif__name__=="__main__":image=cv2.imread("d:/pics/lena.jpg")cv2.imshow("image",image)imageNoise=saltPepper(image,0.1,0.1)imageAver3=cv2.blur(imageNoise,(3,3))#卷積核為3×3imageAver5=cv2.blur(imageNoise,(5,5))#卷積核為5×5imageAver7=cv2.blur(imageNoise,(7,7))#卷積核為7×7imageAver9=cv2.blur(imageNoise,(9,9))#卷積核為9×9cv2.imshow("imageNoise",imageNoise)cv2.imshow("imageAver3",imageAver3)cv2.imshow("imageAver5",imageAver5)cv2.imshow("imageAver7",imageAver7)cv2.imshow("imageAver9",imageAver9)cv2.waitKey()cv2.destroyAllWindows()程序運行結(jié)果如圖11-10所示:從圖中對比可以看出,隨著卷積核的增大,圖像的失真情況越來越嚴重。(a) 原始圖像(b)椒鹽噪聲的圖像(c)卷積核為3×3平滑圖像(d)卷積核為5×5平滑圖像(e)卷積核為7×7平滑圖像(f)卷積核為9×9平滑圖像【例11.10】定義不同卷積核大小,對彩色圖像進行銳化處理。程序代碼如下:importcv2image=cv2.imread("d:\pics\lena.jpg")imageLap3=cv2.Laplacian(image,cv2.CV_64F,ksize=3)imageLap5=cv2.Laplacian(image,cv2.CV_64F,ksize=5)imageLap7=cv2.Laplacian(image,cv2.CV_64F,ksize=7)imageLap9=cv2.Laplacian(image,cv2.CV_64F,ksize=9)imageLap11=cv2.Laplacian(image,cv2.CV_64F,ksize=11)cv2.imshow("RGB",image)cv2.imshow("imageLap3",imageLap3)cv2.imshow("imageLap5",imageLap5)cv2.imshow("imageLap7",imageLap7)cv2.imshow("imageLap9",imageLap9)cv2.imshow("imageLap11",imageLap11)cv2.waitKey()cv2.destroyAllWindows()(a) 原始圖像(b) ksize=3銳化圖像(c) ksize=5銳化圖像(d) ksize=7銳化圖像(e) ksize=9銳化圖像(f) ksize=11銳化圖像程序運行結(jié)果如圖11-11所示:通過圖中圖像的對比,隨著卷積核增大,圖像的細節(jié)越來越粗糙。11.4.4基于彩色的圖像分割在彩色圖像閾值化分割中,要將單色圖像中常用的圖像閾值化方法推廣到彩色圖像中有若干種可能的方法?;镜乃悸肥鞘褂们‘斶x擇的閾值將彩色空間分解成若干個區(qū)域。一幅圖像包括目標物體、背景還有噪聲,要想從數(shù)字圖像中直接提取出目標物體,常用的方法就是設(shè)定一個閾值T,用T將圖像的數(shù)據(jù)分成兩部分:大于T的像素群和小于T的像素群。閾值分割法的特點是:適用于目標與背景灰度有較強對比的情況,重要的是背景或物體的灰度比較單一,而且總可以得到封閉且連通區(qū)域的邊界。1.全閾值處理函數(shù)為cv2.threshold(),其一般格式為:ret,dst=cv2.threshold(src,thresh,maxval,type)其中,ret表示返回的閾值;dst表示輸出的圖像;src表示要進行閾值分割的輸入圖像,可以是多通道的圖像;thresh表示設(shè)定的閾值;maxval表示type參數(shù)為THRESH_BINARY或THRESH_BINARY_INV類型時所設(shè)定的最大值。在顯示二值化圖像時,一般設(shè)置為255。type表示閾值分割的類型,常用的有:cv2.THRESH_BINARYcv2.THRESH_BINARY_INVcv2.THRESH_TRUNCcv2.THRESH_TOZEROcv2.THRESH_TOZERO_INV【例11.11】對彩色圖像進行全局閾值分割處理。程序代碼如下:importcv2img=cv2.imread('d:/pics/lena.jpg')#二值化閾值處理ret,thresh1=cv2.threshold(img,127,255,cv2.THRESH_BINARY)#反二值化閾值處理ret,thresh2=cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)#截斷閾值處理ret,thresh3=cv2.threshold(img,127,255,cv2.THRESH_TRUNC)#低閾值零處理ret,thresh4=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)#超閾值零處理ret,thresh5=cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)cv2.imshow('origin_img',img)cv2.imshow('thresh1_img',thresh1)cv2.imshow('thresh2_img',thresh2)cv2.imshow('thresh3_img',thresh3)cv2.imshow('thresh4_img',thresh4)cv2.imshow('thresh5_img',thresh5)cv2.waitKey(0)cv2.destroyAllWindows()程序運行結(jié)果如圖11-12所示。(a)圖為原始圖像;(b)圖是二值化閾值處理的結(jié)果,可以看出圖像被處理為二值圖像;(c)圖是反二值化閾值處理的結(jié)果,與(b)圖對比,二者的顏色剛好相反;(d)圖是截斷閾值處理;(e)圖是低閾值零處理;(f)圖是超閾值零處理。(a)原始圖像(b)二值化閾值處理(c)反二值化閾值處理(d)截斷閾值處理(e)低閾值零處理(f)超閾值零處理2.局部閾值處理在比較理想的情況下,如色彩均衡的圖像,對整個圖像使用單個閾值進行閾值化就會成功。但是,受到多種因素的影響,圖像的色彩并不會很均衡,在這種情況下,使用局部閾值(又稱自適應(yīng)值)進行分割可以產(chǎn)生很好的結(jié)果。OpenCV中提供了函數(shù)cv2.adaptiveThreshold()來實現(xiàn)自適應(yīng)閾值處理,其語法格式為:dst=cv2.adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blockSize,c)其中:dst表示輸出的圖像;src表示原始圖像,且圖像必須是8位單通道的圖像;maxValue表示最大值;adaptiveMethod表示自適應(yīng)方法;thresholdType表示閾值處理方式;blockSize表示塊大小;c是常量?!?1.12】對彩色圖像進行自適應(yīng)局部閾值處理。程序代碼如下:importcv2img=cv2.imread('d:/pics/lena.jpg')#全局閾值中的二值化閾值處理的彩色圖像ret,th1=cv2.threshold(img,127,255,cv2.THRESH_BINARY)#采用權(quán)重相等方式的局部閾值處理的彩色圖像img_b,img_g,img_r=cv2.split(img)ath2_b=cv2.adaptiveThreshold(img_b,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)ath2_g=cv2.adaptiveThreshold(img_g,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)ath2_r=cv2.adaptiveThreshold(img_r,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)mean_ada_img=cv2.merge([ath2_b,ath2_g,ath2_r])#合并通道#采用權(quán)重為高斯分布的局部閾值處理的彩色圖像ath3_b=cv2.adaptiveThreshold(img_b,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)ath3_g=cv2.adaptiveThreshold(img_g,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)ath3_r=cv2.adaptiveThreshold(img_r,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)gauss_ada_img=cv2.merge([ath3_b,ath3_g,ath3_r])#合并通道cv2.imshow('origin_img',img)cv2.imshow('threshold_img',th1)cv2.imshow('mean_ada_thr',mean_ada_img)cv2.imshow('gauss_ada_thr',gauss_ada_img)

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論