智能圖像處理:Python和OpenCV實(shí)現(xiàn)-課件 第四章 圖像空域增強(qiáng)_第1頁(yè)
智能圖像處理:Python和OpenCV實(shí)現(xiàn)-課件 第四章 圖像空域增強(qiáng)_第2頁(yè)
智能圖像處理:Python和OpenCV實(shí)現(xiàn)-課件 第四章 圖像空域增強(qiáng)_第3頁(yè)
智能圖像處理:Python和OpenCV實(shí)現(xiàn)-課件 第四章 圖像空域增強(qiáng)_第4頁(yè)
智能圖像處理:Python和OpenCV實(shí)現(xiàn)-課件 第四章 圖像空域增強(qiáng)_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四章

圖像空域增強(qiáng)目錄Contents4.1灰度線性變換4.2非線性變換4.3圖像噪聲4.4直方圖均衡化4.5直方圖規(guī)定化

圖像增強(qiáng)的目的是改善圖像的視覺效果或使圖像更適合于人或機(jī)器的分析處理。通過(guò)圖像增強(qiáng)可以減少圖像噪聲,提高目標(biāo)與背景的對(duì)比度,亦可以強(qiáng)調(diào)或抑制圖像中的某些細(xì)節(jié)。根據(jù)處理的空間可以將圖像增強(qiáng)分為空域法和頻域法,圖像空域增強(qiáng)意為直接在圖像的空間域(或圖像空間)中對(duì)像素進(jìn)行處理。圖像空域增強(qiáng)4.1

灰度線性變換圖像的灰度線性變換通過(guò)建立灰度映射來(lái)調(diào)整原始圖像的灰度,將圖像的像素值通過(guò)指定的線性函數(shù)進(jìn)行變換,以此增強(qiáng)或減弱圖像的灰度,從而改善圖像的質(zhì)量,凸顯圖像的細(xì)節(jié),提高圖像的對(duì)比度,達(dá)到圖像增強(qiáng)的目的?;叶染€性變換的計(jì)算公式如下:g(x,y)=k?f(x,y)+b該公式中g(shù)(x,y)表示灰度線性變換后的灰度值,f(x,y)表示變換前輸入圖像的灰度值,k和b為線性變換方程f(x,y)的參數(shù),分別表示斜率和截距。當(dāng)k=1,b=0時(shí),保持原始圖像;當(dāng)k=1,b≠0時(shí),圖像所有的灰度值增加或降低(通過(guò)調(diào)整b,實(shí)現(xiàn)對(duì)圖像亮度的調(diào)整);當(dāng)k=-1,b=255時(shí),原始圖像的灰度值反轉(zhuǎn);當(dāng)k>1時(shí),輸出圖像的對(duì)比度增強(qiáng),圖像的像素值在變換后全部增大,整體效果被增強(qiáng);當(dāng)0<k<1時(shí),輸出圖像的對(duì)比度被削弱;當(dāng)k<0時(shí),原始圖像暗區(qū)域變亮,亮區(qū)域變暗,圖像求補(bǔ)。4.1.1用OpenCV做灰度變換與顏色空間變換

在做線性變換之前,需要將彩色圖像變成灰度圖像。在OpenCV中通常使用cv2.cvtColor()函數(shù)來(lái)進(jìn)行顏色空間之間的變換。該函數(shù)語(yǔ)法格式為:dst=cv2.cvtColor(image,

flag)其中輸入輸出參數(shù)為:dst:表示變換后的圖像;image:表示原始圖像;flag:決定轉(zhuǎn)換的類型,常見的轉(zhuǎn)換類型如下Flag含義cv2.COLOR_BGR2GRAY將彩色圖像變換為灰度圖像cv2.COLOR_BGR2RGBBGR三通道順序變換RGB順序cv2.COLOR_BGR2HSV變換至HSV空間cv2.COLOR_BGR2YCrCb變換至YCrCb空間cv2.COLOR_BGE2HLS轉(zhuǎn)換至HLS空間cv2.COLOR_BGR2XYZ轉(zhuǎn)換至XYZ空間cv2.COLOR_BGR2LAB轉(zhuǎn)換至LAB空間cv2.COLOR_BGR2YUV轉(zhuǎn)換至YUV空間Flag常見轉(zhuǎn)換類型表【例4.1】使用cv2.cvtColor進(jìn)行圖像的顏色空間之間的轉(zhuǎn)換importcv2importmatplotlib.pyplotasplt#載入原圖img=cv2.imread('d:/pics/lena.jpg')#利用plot函數(shù)畫出圖像并放置在一個(gè)窗口中顯示plt.subplot(3,3,1),plt.imshow(img)plt.axis('off'),plt.title('BGR’)#原圖變換灰度圖img_GRAY=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)plt.subplot(3,3,3),plt.imshow(img_GRAY)plt.axis('off'),plt.title('GRAY’)#變換HSV空間img_HSV=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)plt.subplot(3,3,4),plt.imshow(img_HSV)plt.axis('off'),plt.title('HSV’)#變換YCrCb空間img_YcrCb=cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)plt.subplot(3,3,5),plt.imshow(img_YcrCb)plt.axis('off'),plt.title('YcrCb’)#變換HLS空間img_HLS=cv2.cvtColor(img,cv2.COLOR_BGR2HLS)plt.subplot(3,3,6),plt.imshow(img_HLS)plt.axis('off'),plt.title('HLS')#變換XYZ空間img_XYZ=cv2.cvtColor(img,cv2.COLOR_BGR2XYZ)plt.subplot(3,3,7),plt.imshow(img_XYZ)plt.axis('off'),plt.title('XYZ’)#變換LAB空間img_LAB=cv2.cvtColor(img,cv2.COLOR_BGR2LAB)plt.subplot(3,3,8),plt.imshow(img_LAB)plt.axis('off'),plt.title('LAB')#變換YUV空間img_YUV=cv2.cvtColor(img,cv2.COLOR_BGR2YUV)plt.subplot(3,3,9),plt.imshow(img_YUV)plt.axis('off'),plt.title('YUV')plt.show()程序中調(diào)用了matplotlib.pyplot模塊plot()函數(shù),將cv2.cvtColor()返回值繪制成圖。注意灰度化后的圖像,在matplotlib里顯示的圖像不是灰色的,這里因?yàn)橥ǖ擂D(zhuǎn)換問(wèn)題,在OpenCV中顯示則正常,程序運(yùn)行結(jié)果如圖4-1圖4-1圖像顏色空間之間的轉(zhuǎn)換4.1.2圖像亮度增加或降低根據(jù)公式g(x,y)=k?f(x,y)+b所示改變b的值可使實(shí)現(xiàn)圖像灰度值的增加或降低,從而提升圖像的亮度或降低圖像的亮度?!纠?.2】對(duì)圖像進(jìn)行灰度變換,改變圖像亮度。程序代碼如下:importcv2importnumpyasnp#讀取原始圖像img=cv2.imread('d:/pics/lena.jpg')#圖像灰度轉(zhuǎn)換img_Gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#獲取圖像高度和寬度height,width=img_Gray.shape[0:2]#創(chuàng)建一幅圖像,新圖寬高與原灰度圖一致img_GrayUP=np.zeros((height,width),np.uint8)img_GrayDown=np.zeros((height,width),np.uint8)#圖像灰度增強(qiáng)變換foriinrange(height):forjinrange(width):if(int(img_Gray[i,j]+70)>255):gray_up=255else:gray_up=int(img_Gray[i,j]+70)img_GrayUP[i,j]=np.uint8(gray_up)#圖像灰度減弱變換foriinrange(height):forjinrange(width):if(int(img_Gray[i,j]-70)<0):gray_down=0else:gray_down=int(img_Gray[i,j]-70)img_GrayDown[i,j]=np.uint8(gray_down)#顯示原圖與灰度變換后圖像cv2.imshow("OriginImage",img_Gray)cv2.imshow("UpGray",img_GrayUP)cv2.imshow("DownGray",img_GrayDown)cv2.waitKey(0)cv2.destroyAllWindows()程序運(yùn)行結(jié)果如圖4-2所示。圖像經(jīng)過(guò)灰度增強(qiáng)后的圖像明顯比原圖像亮了許多,而圖像經(jīng)過(guò)灰度降低后的圖像明顯比原圖像暗了許多。圖4-2圖像亮度增強(qiáng)或降低變換4.1.3圖像對(duì)比度增強(qiáng)或減弱圖像對(duì)比度增強(qiáng)就是增強(qiáng)圖像各部分的反差。根據(jù)公式

g(x,y)=k?f(x,y)+b當(dāng)k>1時(shí),輸出圖像的對(duì)比度增強(qiáng),圖像的像素值在變換后全部增大,整體效果被增強(qiáng)。而當(dāng)k<1時(shí),輸出圖像的對(duì)比度減弱,圖像的像素值在變換后全部降低,整體效果被減弱。importcv2importnumpyasnpimg=cv2.imread('d:/pics/lena.jpg')#讀取原始圖像img_Gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#圖像灰度轉(zhuǎn)換height,width=img_Gray.shape[0:2]#獲取圖像高度和寬度Contrast_enhancement=np.zeros((height,width),np.uint8)#創(chuàng)建新圖像Contrast_reduction=np.zeros((height,width),np.uint8)Contrast_reduction=np.zeros((height,width),np.uint8)

#圖像對(duì)比度增強(qiáng)變換,k=1.3foriinrange(height):forjinrange(width):if(int(img_Gray[i,j]*1.3)>255):gray=255else:gray=int(img_Gray[i,j]*1.3)Contrast_enhancement[i,j]=np.uint8(gray)【例4.3】圖像灰度對(duì)比度增強(qiáng)或減弱變換,程序代碼如下:#圖像對(duì)比度減弱變換,k=0.5foriinrange(height): forjinrange(width):if(int(img_Gray[i,j]*0.5)<0):gray=0else:gray=int(img_Gray[i,j]*0.5)Contrast_reduction[i,j]=np.uint8(gray)#顯示圖像cv2.imshow("Gray",img_Gray)#cv2.imshow("Enhancement",Contrast_enhancement)cv2.imshow("Reduction",Contrast_reduction)cv2.waitKey(0)cv2.destroyAllWindows()圖4-3對(duì)比度增強(qiáng)或減弱圖像4.1.4圖像反色變換圖像反色變換又稱線性灰度求補(bǔ)變換,根據(jù)公式g(x,y)=k?f(x,y)+b當(dāng)k=-1,b=255時(shí),對(duì)原圖像的像素值進(jìn)行反轉(zhuǎn),即黑色變?yōu)榘咨?,白色變?yōu)楹谏倪^(guò)程。importcv2importnumpyasnp#讀取原始圖像img=cv2.imread('d:/pics/lena.jpg')#圖像灰度轉(zhuǎn)換img_Gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#獲取圖像高度和寬度height,width=img_Gray.shape[0:2]#創(chuàng)建一幅圖像color_change=np.zeros((height,width),np.uint8)foriinrange(height):#圖像灰度反色變換forjinrange(width):gray=255-img_Gray[i,j]color_change[i,j]=np.uint8(gray)

cv2.imshow("Gray",img_Gray)cv2.imshow("Color_change",color_change)cv2.waitKey(0)cv2.destroyAllWindows()【例4.4】灰度圖像的反色變換,程序代碼如下:(a)原灰度圖(b)反色后圖像程序運(yùn)行結(jié)果如圖4-4所示??梢钥吹接珊谧儼住⒂砂鬃兒诘膱D像,反色變換經(jīng)常被用于醫(yī)療中,例如X射線照片經(jīng)過(guò)反色變換后可以清晰的看到病變的位置。圖4-4灰度反色變換圖像【例4.5】彩色RGB圖像反色變換,輸出負(fù)片。程序代碼如下:importcv2frommatplotlibimportpyplotaspltimg=cv2.imread("d:/pics/lena.jpg");img_RGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)img_out=255-img_RGB;#圖像灰度反色變換plt.figure(figsize=(15,15))plt.subplot(1,2,1),plt.title('OriginalImage')plt.imshow(img_RGB);plt.subplot(1,2,2),plt.title('NegativeImage')plt.imshow(img_out);plt.show()程序運(yùn)行結(jié)果如圖4-5所示(a)原圖像(b)反色圖像圖4-5彩色圖像的反色(左圖為原圖像,右圖為反色圖像)4.2非線性變換圖像的灰度非線性變換主要包括對(duì)數(shù)變換、冪次變換、指數(shù)變換、分段函數(shù)變換,通過(guò)非線性關(guān)系對(duì)圖像進(jìn)行灰度處理。4.2.1對(duì)數(shù)變換

【例4.6】灰度圖像的非線性對(duì)數(shù)變換,程序代碼如下:importcv2importnumpyasnpimportmatplotlib.pyplotaspltdeflog_plot(c):#繪制曲線x=np.arange(0,255,0.01)y=c*np.log(1+x)plt.plot(x,y,'r',linewidth=1)plt.title('logarithmic')plt.xlim(0,255),plt.ylim(0,255)plt.show()deflog(c,img_Gray):#對(duì)數(shù)變換output=c*np.log(1.0+img_Gray)output=np.uint8(output+0.5)

returnoutput

img=cv2.imread('d:/pics/lena.jpg')img_Gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)c=45log_plot(c)#繪制對(duì)數(shù)變換曲線result=log(c,img_Gray)#圖像灰度對(duì)數(shù)變換cv2.imshow("Origin",img_Gray)cv2.imshow("Logarithmictransformation",result)cv2.waitKey(0)cv2.destroyAllWindows()系數(shù)c=45時(shí)的對(duì)數(shù)變換圖像程序運(yùn)行結(jié)果如圖4-6所示(a)原圖像(b)對(duì)數(shù)變換圖像(c)對(duì)數(shù)函數(shù)曲線圖4-6系數(shù)c=45時(shí)的對(duì)數(shù)變換圖像4.2.2伽瑪(gamma)變換

【例4.7】灰度圖像的Gamma變換,程序代碼如下:importcv2importnumpyasnpimportmatplotlib.pyplotaspltdefgamma_plot(c,gamma):#繪制曲線x=np.arange(0,255,0.01)#y=c*x**gammay=c*np.power(x,gamma)plt.plot(x,y,'b',linewidth=1)plt.xlim([0,255]),plt.ylim([0,255])defgamma_trans(img,c,gamma1):#伽瑪變換output_img=c*np.power(img/float(np.max(img)),gamma1)*255.0output_img=np.uint8(output_img)returnoutput_imgimg=cv2.imread('d:/pics/lena.jpg')img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)plt.figure(1),gamma_plot(1,0.5),plt.title('gamma=0.5’)#伽瑪變換曲線plt.figure(2),gamma_plot(1,2),plt.title('gamma=2.0')plt.show()result=gamma_trans(img_gray,1,0.5)#圖像灰度伽瑪變換result1=gamma_trans(img_gray,1,2.0)cv2.imshow("Origin",img_gray)cv2.imshow("Gamma<1",result)cv2.imshow("Gamma>1",result1)cv2.waitKey(0)cv2.destroyAllWindows()程序運(yùn)行結(jié)果如圖4-7所示,可以看出經(jīng)過(guò)伽瑪變換處理后的效果圖,當(dāng)伽瑪值小于1時(shí),對(duì)于圖像對(duì)比度偏低,整體亮度值偏高;當(dāng)伽瑪值大于1時(shí),對(duì)于圖像對(duì)比度偏高,整體亮度值偏暗。(a)原圖像(b)Gamma=0.4變換圖像

(c)Gamma=2.0變換圖像(d)gamma=0.5變換曲線(e)gamma=2.0變換曲線圖4-7變換圖像和變換曲線4.3圖像噪聲圖像噪聲是指存在于圖像數(shù)據(jù)中的不必要的或多余的干擾信息。噪聲在理論上可以定義為“不可預(yù)測(cè),只能用概率統(tǒng)計(jì)方法來(lái)認(rèn)識(shí)的隨機(jī)誤差”,因此可以將圖像噪聲看成是多維隨機(jī)過(guò)程,因而描述噪聲的方法完全可以借用隨機(jī)過(guò)程的描述,即用其概率分布函數(shù)和概率密度分布函數(shù)來(lái)模擬產(chǎn)生噪聲。常見的噪聲有:高斯噪聲、脈沖(椒鹽)噪聲、隨機(jī)噪聲、泊松噪聲、瑞利噪聲、伽瑪(愛爾蘭)噪聲、指數(shù)分布噪聲、均勻分布噪聲等,Python可使用兩種方法給圖像添加噪聲,即利用Numpy數(shù)組庫(kù)中的隨機(jī)函數(shù)和利用skimage庫(kù)來(lái)實(shí)現(xiàn)加噪過(guò)程。4.3.1通過(guò)Numpy數(shù)組庫(kù)添加噪聲由于OpenCV中沒有直接添加噪聲的函數(shù),所以我們通過(guò)下列三個(gè)函數(shù)在圖像上添加噪聲。(1)采用Numpy中的函數(shù)random.normal()生成高斯隨機(jī)分布的隨機(jī)數(shù),所生成的隨機(jī)數(shù)為正態(tài)分布,其函數(shù)語(yǔ)法格式為:noise=np.random.normal(loc,scale,size)其中輸入?yún)?shù)為:loc(float):正態(tài)分布的均值,對(duì)應(yīng)著這個(gè)分布的中心。loc=0說(shuō)明這是一個(gè)以Y軸為對(duì)稱軸的正態(tài)分布scale(float):正態(tài)分布的標(biāo)準(zhǔn)差,對(duì)應(yīng)分布的寬度,scale越大,正態(tài)分布的曲線越矮胖,scale越小,曲線越高瘦size:(int或者整數(shù)元組),輸出的值賦在shape里,默認(rèn)為None(2)函數(shù)np.clip()作用是將數(shù)組a中的所有數(shù)限定到范圍a_min和a_max中,其語(yǔ)法格式為:out=np.clip(a,a_min,a_max)其中輸入輸出參數(shù)為:a:輸入矩陣a_min:被限定的最小值,所有比a_min小的數(shù)都會(huì)強(qiáng)制變?yōu)閍_mina_max:被限定的最大值,所有比a_max大的數(shù)都會(huì)強(qiáng)制變?yōu)閍_maxout:可以指定輸出矩陣的對(duì)象,shape與a相同(3)函數(shù)np.random.randint()作用是產(chǎn)生離散均勻分布的整數(shù),其語(yǔ)法格式為:noise=np.random.randint(low,high=None,size=None,dtype='l')其中輸入?yún)?shù)為:low:生成元素的最小值high:生成元素的值一定小于high值size:輸出的大小,可以是整數(shù)也可以是元組dtype:生成元素的數(shù)據(jù)類型注意:high不為None,生成元素的值在[low,high)區(qū)間中;如果high=None,生成的區(qū)間為[0,low)區(qū)間利用上述三個(gè)函數(shù)可以產(chǎn)生高斯噪聲、椒鹽噪聲、隨機(jī)噪聲等1.高斯噪聲

高斯噪聲是指它的概率密度函數(shù)服從高斯分布(即正態(tài)分布)的一類噪聲。如果一個(gè)噪聲,它的幅度分布服從高斯分布,而它的功率譜密度又是均勻分布的,則稱它為高斯白噪聲。通常是因?yàn)樵谂臄z時(shí)視場(chǎng)不夠明亮、亮度不夠均勻、電路各元器件自身噪聲和相互影響,以及圖像傳感器長(zhǎng)期工作,溫度過(guò)高等引起的圖像傳感器噪聲。通常在RGB圖像中,表現(xiàn)比較明顯。添加高斯噪聲定義的函數(shù)如下:defgasuss_noise(image,mean=0,var=0.01):#高斯噪聲函數(shù),mean:均值;var:方差image=np.array(image/255,dtype=float)noise=np.random.normal(mean,var**0.5,image.shape)img_noise=image+noiseifimg_noise.min()<0:low_clip=-1.else:low_clip=0.img_noise=np.clip(img_noise,low_clip,1.0)img_noise=np.uint8(img_noise*255)returnimg_noise2.椒鹽噪聲

椒鹽噪聲也稱為脈沖噪聲,它隨機(jī)改變一些像素值,是由圖像傳感器、傳輸信道、解碼處理等產(chǎn)生的黑白相間的亮暗點(diǎn)噪聲,是圖像中經(jīng)常見到的一種噪聲。椒鹽噪聲是指兩種噪聲,一種是鹽噪聲(saltnoise),另一種是胡椒噪聲(peppernoise)。鹽是白色,椒是黑色,前者是高灰度噪聲,后者屬于低灰度噪聲。一般兩種噪聲同時(shí)出現(xiàn),呈現(xiàn)在圖像上就是黑白雜點(diǎn)。添加椒鹽噪聲定義的函數(shù)如下:defsp_noise(image,prob):#椒鹽噪聲,image:原圖像;prob:噪聲比例;img_noise:帶噪聲圖像img_noise=np.zeros(img.shape,np.uint8)thres=1-probforiinrange(img.shape[0]):forjinrange(img.shape[1]):rNum=np.random.random()#如果生成的隨機(jī)數(shù)小于噪聲比例則將該像素點(diǎn)添加黑點(diǎn),即椒噪聲ifrNum<prob:img_noise[i][j]=0#如果生成的隨機(jī)數(shù)大于(1-噪聲比例)則將該像素點(diǎn)添加白點(diǎn),即鹽噪聲elifrNum>thres:img_noise[i][j]=255#其他情況像素點(diǎn)不變else:img_noise[i][j]=img[i][j]returnimg_noise3.隨機(jī)噪聲隨機(jī)噪聲是一種在時(shí)間上隨機(jī)產(chǎn)生其值在給定瞬間內(nèi)不能預(yù)測(cè)的噪聲。添加隨機(jī)噪聲定義的函數(shù)如下:defrandom_noise(image,noise_num):#輸入?yún)?shù)image:需要加噪的圖像;noise_num:添加的噪聲點(diǎn)數(shù)目。img_noise=imagerows,cols,chn=img_noise.shape#加噪聲foriinrange(noise_num):#隨機(jī)生成指定范圍的整數(shù)x=np.random.randint(0,rows)y=np.random.randint(0,cols)img_noise[x,y,:]=255returnimg_noise4.泊松噪聲泊松噪聲就是符合泊松分布的噪聲模型,泊松分布適合于描述單位時(shí)間內(nèi)隨機(jī)事件發(fā)生次數(shù)的概率分布。如某一服務(wù)設(shè)施在一定時(shí)間內(nèi)收到的服務(wù)請(qǐng)求次數(shù)、電話交換機(jī)接到呼叫的次數(shù)、汽車站臺(tái)的候客人數(shù)、機(jī)器出現(xiàn)的故障數(shù)、自然災(zāi)害發(fā)生的次數(shù)、DNA序列的變異數(shù)、放射性原子核的衰變數(shù)等等。添加泊松噪聲定義的函數(shù)如下:defpoisson_noisy(image,vals):vals=len(np.unique(image))vals=2**np.ceil(np.log2(vals))noisy=np.random.poisson(image*vals)/float(vals)returnnoisy5.乘法噪聲乘性噪聲一般由信道不理想引起,它們與信號(hào)的關(guān)系是相乘,信號(hào)在它在,信號(hào)不在它也就不在。即out=image+n*image,其中n是具有指定均值和方差的均勻噪聲。添加乘性噪聲定義的函數(shù)如下:defmultiplication_noisy(image,gauss):row,col,ch=image.shapegauss=np.random.randn(row,col,ch)gauss=gauss.reshape(row,col,ch)noisy=image+image*gaussreturnnoisy6.瑞利噪聲瑞利噪聲相比高斯噪聲而言,其形狀向右歪斜,這對(duì)于擬合某些歪斜直方圖噪聲很有用。瑞利噪聲的實(shí)現(xiàn)可以借由平均噪聲來(lái)實(shí)現(xiàn)。添加瑞利噪聲定義的函數(shù)如下:defrayleigh_noisy(image):a=-0.2b=0.03row,col,ch=image.shapen_rayleigh=a+(-b*math.log(1-np.random.randn(row,col)))**0.5returnn_rayleigh7.伽馬噪聲伽瑪噪聲是服從伽瑪曲線分布的噪聲。伽馬噪聲的實(shí)現(xiàn),需要使用b個(gè)服從指數(shù)分布的噪聲疊加而來(lái)。指數(shù)分布的噪聲,可以使用均勻分布來(lái)實(shí)現(xiàn)。當(dāng)b=1時(shí)為指數(shù)噪聲,當(dāng)b>1時(shí)通過(guò)若干個(gè)指數(shù)噪聲疊加得到伽瑪噪聲。添加伽瑪噪聲定義的函數(shù)如下:defGamma_noise(image,a=25,b=3):row,col,ch=image.shapen_gamma=np.zeros(row,col)foriinrange(b):n_gamma=n_gamma+(-1/a)*math.log(1-np.random.randn(row,col))returnn_gamma【4.8】使用np.random.normal()函數(shù)為圖像添加高斯噪聲、脈沖(椒鹽)噪聲、隨機(jī)噪聲。程序代碼如下:importcv2importnumpyasnpdefgasuss_noise(image,mean=0,var=0.01):#高斯噪聲函數(shù),mean:均值;var:方差image=np.array(image/255,dtype=float)noise=np.random.normal(mean,var**0.5,image.shape)img_noise=image+noiseifimg_noise.min()<0:low_clip=-1.else:low_clip=0.img_noise=np.clip(img_noise,low_clip,1.0)img_noise=np.uint8(img_noise*255)returnimg_noisedefsp_noise(image,prob):#椒鹽噪聲,image:原圖像;prob:噪聲比例;img_noise:加噪圖像img_noise=np.zeros(img.shape,np.uint8)thres=1-probforiinrange(img.shape[0]):forjinrange(img.shape[1]):rNum=np.random.random()ifrNum<prob:#添加椒噪聲img_noise[i][j]=0elifrNum>thres:#添加鹽噪聲img_noise[i][j]=255else:img_noise[i][j]=img[i][j]returnimg_noisedefrandom_noise(image,noise_num):#隨機(jī)噪聲,image:原圖像;noise_num:添加噪音點(diǎn)數(shù)目img_noise=imagerows,cols,chn=img_noise.shape#加噪聲foriinrange(noise_num):#隨機(jī)生成指定范圍的整數(shù)x=np.random.randint(0,rows)y=np.random.randint(0,cols)img_noise[x,y,:]=255returnimg_noiseimg=cv2.imread('d:/pics/lena.jpg')#輸入原圖像cv2.imshow("Origin",img)#添加噪聲img_gasuss=gasuss_noise(img,mean=0,var=0.01)img_sp_noise=sp_noise(img,0.06)img_random_noise=random_noise(img,1000)#顯示cv2.imshow("gasuss_noise",img_gasuss)cv2.imshow("sp_noise",img_sp_noise)cv2.imshow("random_noise",img_random_noise)cv2.waitKey(0)cv2.destroyAllWindows()程序運(yùn)行結(jié)果如圖4-8所示(a)原圖像(b)添加高斯噪聲圖像(c)添加椒鹽噪聲圖像(d)添加隨機(jī)噪聲圖像圖4-8添加噪聲后的圖像4.3.2通過(guò)skimage庫(kù)添加噪聲skimage庫(kù)的全稱是scikit-imagescikit(toolkitforscipy)是一個(gè)圖像處理庫(kù),基于scipy上開發(fā)和擴(kuò)展開來(lái)的。在使用scikit-image庫(kù)前必須先進(jìn)行安裝,安裝方法為pipinstallscikit-imageskimage將圖像作為numpy數(shù)組進(jìn)行處理,可以通過(guò)skimage.util.random_noise()函數(shù)方便的為圖像添加各種類型的噪聲,如高斯白噪聲、椒鹽噪聲等。函數(shù)skimage.util.random_noise()的語(yǔ)法格式為:skimage.util.random_noise(image,mode,seed=None,clip=True)其中輸入?yún)?shù)為:image:輸入圖像;

seed:類型為int。將在生成噪聲之前設(shè)置隨機(jī)種子,以進(jìn)行有效的偽隨機(jī)比較;clip:類型為bool。若為True(default)則在加入‘speckle’、‘poisson’或‘gaussian’這三種噪聲后進(jìn)行剪切以保證圖像數(shù)據(jù)點(diǎn)都在[0,1]或[-1,1]之間。若為False,則數(shù)據(jù)可能超出這個(gè)范圍;mode:添加噪聲的類別,為字符串str類型,類型列表如下:mode含義gaussian高斯加性噪聲localvar高斯加性噪聲,每點(diǎn)具有特定的局部方差poisson泊松分布的噪聲salt鹽噪聲,隨機(jī)用1替換像素,屬于高灰度噪聲pepper胡椒噪聲,隨機(jī)用0或-1替換像素,屬于低灰度噪聲s&p椒鹽噪聲,兩種噪聲同時(shí)出現(xiàn),呈現(xiàn)出黑白雜點(diǎn)speckle使用out=image+n*image乘性噪聲,其中n是具有指定均值和方差的均勻噪聲mode噪聲類型表【例4.9】使用skimage庫(kù)中的skimage.util.random_noise添加噪聲。程序代碼如下:fromskimageimportutilimportnumpyasnpimportmatplotlib.pyplotaspltfromPILimportImageimg=Image.open('d:/pics/lena.jpg')img=np.array(img)#高斯噪聲noise_gs_img=util.random_noise(img,mode='gaussian’)#鹽噪聲noise_salt_img=util.random_noise(img,mode='salt’)#胡椒噪聲noise_pepper_img=util.random_noise(img,mode='pepper’)#椒鹽噪聲noise_sp_img=util.random_noise(img,mode='s&p’)#乘性噪聲noise_speckle_img=util.random_noise(img,mode='speckle')

#利用plt.subplot同時(shí)顯示圖片plt.subplot(2,3,1),plt.title('original')plt.axis('off'),plt.imshow(img)plt.subplot(2,3,2),plt.title('gaussian')plt.axis('off'),plt.imshow(noise_gs_img)plt.subplot(2,3,3),plt.title('salt')plt.axis('off'),plt.imshow(noise_salt_img)plt.subplot(2,3,4),plt.title('pepper')plt.axis('off'),plt.imshow(noise_pepper_img)plt.subplot(2,3,5),plt.title('s&p')plt.axis('off'),plt.imshow(noise_sp_img)plt.subplot(2,3,6),plt.title('speckle')plt.axis('off'),plt.imshow(noise_speckle_img)plt.show()程序運(yùn)行結(jié)果如圖4-9圖4-9利用skimage庫(kù)添加噪聲后的圖像4.4直方圖均衡化

圖像直方圖(ImageHistogram)是用以表示數(shù)字圖像中亮度分布的圖形,標(biāo)繪了圖像中每個(gè)亮度值的像素?cái)?shù)。在直方圖中,橫坐標(biāo)的左側(cè)為純黑、較暗的區(qū)域,而右側(cè)為較亮、純白的區(qū)域。因此,如果是一張較暗圖像,它的直方圖中的數(shù)據(jù)多集中于左側(cè)和中間部分;而整體明亮、只有少量陰影的圖像則相反,多集中在中間和右側(cè)部分。通過(guò)查看直方圖亮暗分布,就可以了解圖像的整體情況,以及確定下一步進(jìn)行調(diào)整的方法。

直方圖均衡化是把原始圖像的灰度直方圖從比較集中的某個(gè)灰度區(qū)間變成在全部灰度范圍內(nèi)的均勻分布,它是對(duì)圖像進(jìn)行非線性拉伸,重新分配圖像像素值,使一定灰度范圍內(nèi)的像素?cái)?shù)量大致相同,也就是把給定圖像的直方圖分布改變成“均勻”分布直方圖分布。4.4.1使用Matplotlib繪制圖像直方圖

Matplotlib庫(kù)帶有直方圖繪圖功能,函數(shù)matplotlib.pyplot.hist()可以直接找到直方圖并將其繪制?!纠?.10】使用Matplotlib庫(kù)繪制圖像直方圖,程序代碼如下:importcv2frommatplotlibimportpyplotasplt

img=cv2.imread('d:/pics/lena.jpg')img_RGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)plt.subplot(121),plt.imshow(img_RGB)plt.subplot(122),plt.hist(img.ravel(),256,[0,255])plt.show()程序運(yùn)行結(jié)果如圖4-10圖4-10圖像的直方圖(左邊為原圖像,右邊為它的直方圖)4.4.2使用OpenCV函數(shù)繪制圖像直方圖在OpenCV中使用cv2.calcHist()函數(shù)查找直方圖,只需以灰度模式加載圖像并找到其完整直方圖即可。該函數(shù)語(yǔ)法格式如下:hist=cv2.calcHist(images,channels,mask,histSize,ranges[,accumulate])其中輸入?yún)?shù)為:images:是uint8或float32類型的輸入圖像;channels:直方圖的通道的索引。如果輸入為灰度圖像,則其值為[0]。如果是彩色圖像,可以傳遞[0]、[1]或[2]分別計(jì)算藍(lán)色、綠色或紅色通道的直方圖;mask:圖像掩碼。繪制完整圖像的直方圖,將其指定為“None”;如果要查找圖像特定區(qū)域的直方圖,則將創(chuàng)建一個(gè)掩碼圖像并將繪制掩碼圖像內(nèi)的直方圖;histSize:BIN計(jì)數(shù),對(duì)于全尺寸圖像為[256];ranges:范圍,通常為[0,255]。【例4.11】帶有掩碼圖像的直方圖。程序代碼如下:importcv2frommatplotlibimportpyplotaspltimportnumpyasnp

img=cv2.imread('d:/pics/lena.jpg',0)#產(chǎn)生掩碼圖像mask=np.zeros(img.shape[:2],np.uint8)mask[50:150,50:150]=255masked_img=cv2.bitwise_and(img,img,mask=mask)#計(jì)算整個(gè)圖像和掩碼區(qū)域的直方圖hist_full=cv2.calcHist([img],[0],None,[256],[0,256])hist_mask=cv2.calcHist([img],[0],mask,[256],[0,256])plt.subplot(221),plt.imshow(img,'gray')plt.subplot(222),plt.imshow(masked_img,'gray')plt.subplot(223),plt.plot(hist_full),plt.subplot(224),plt.plot(hist_mask)plt.xlim([0,256])plt.show()程序運(yùn)行結(jié)果如圖4-11所示。在直方圖中,左圖表示完整圖像的直方圖,右圖表示掩碼區(qū)域的直方圖。圖4-11帶有掩碼區(qū)域的直方圖【例4.12】使用cv2.calcHist繪制彩色圖像RGB的直方圖,程序代碼如下:importcv2frommatplotlibimportpyplotasplt

img=cv2.imread('d:/pics/lena.jpg')color=('b','g','r')fori,colinenumerate(color):histr=cv2.calcHist([img],[i],None,[256],[0,256])plt.plot(histr,color=col)plt.xlim([0,256])plt.show()

程序運(yùn)行結(jié)果如圖4-12圖4-12彩色圖像的直方圖(圖中紅、綠、藍(lán)曲線分別是RGB三色直方圖)4.4.3自定義函數(shù)實(shí)現(xiàn)直方圖均衡化

直方圖均衡化通常用來(lái)增加圖像的局部對(duì)比度,尤其是當(dāng)圖像的有用數(shù)據(jù)的對(duì)比度相當(dāng)接近的時(shí)候,直方圖均衡化以后,亮度可以更好的在直方圖上分布。以用于增強(qiáng)局部的對(duì)比度而不影響整體的對(duì)比度,直方圖均衡化通過(guò)有效的擴(kuò)展常用亮度來(lái)實(shí)現(xiàn)這種功能?!纠?.13】使用python語(yǔ)言自定義函數(shù)來(lái)實(shí)現(xiàn)直方圖均衡化。程序代碼如下:importcv2importnumpyasnpimportmatplotlib.pyplotasplt

defOrigin_histogram(img):#建立原始圖像各灰度級(jí)的灰度值與像素個(gè)數(shù)對(duì)應(yīng)表histogram={}foriinrange(img.shape[0]):forjinrange(img.shape[1]):k=img[i][j]ifkinhistogram:histogram[k]+=1else:histogram[k]=1sorted_histogram={}#建立排好序的映射表#根據(jù)灰度值進(jìn)行從低至高的排序sorted_list=sorted(histogram)forjinrange(len(sorted_list)): sorted_histogram[sorted_list[j]]=histogram[sorted_list[j]]returnsorted_histogramdefequalization_histogram(histogram,img):#直方圖均衡化pr={}#建立概率分布映射表foriinhistogram.keys():pr[i]=histogram[i]/(img.shape[0]*img.shape[1])tmp=0

forminpr.keys():tmp+=pr[m]pr[m]=max(histogram)*tmpnew_img=np.zeros(shape=(img.shape[0],img.shape[1]),dtype=np.uint8)forkinrange(img.shape[0]):forlinrange(img.shape[1]):new_img[k][l]=pr[img[k][l]]returnnew_imgdefGrayHist(img):#計(jì)算灰度直方圖

height,width=img.shape[:2]grayHist=np.zeros([256],np.uint64)foriinrange(height):forjinrange(width):grayHist[img[i][j]]+=1returngrayHistif__name__=='__main__':img=cv2.imread('d:/pics/pout.tif',cv2.IMREAD_GRAYSCALE)#計(jì)算圖像灰度直方圖origin_histogram=Origin_histogram(img)#直方圖均衡化new_img=equalization_histogram(origin_histogram,img)origin_grayHist=GrayHist(img)equaliza_grayHist=GrayHist(new_img)#繪制灰度直方圖x=np.arange(256)plt.figure(num=1)plt.plot(x,origin_grayHist,'r',linewidth=1,c='blue')plt.title("Origin"),plt.ylabel("numberofpixels")plt.figure(num=2)plt.plot(x,equaliza_grayHist,'r',linewidth=1,c='blue')plt.title("Equalization"),plt.ylabel("numberofpixels")plt.show()cv2.imshow("Origin",img)cv2.imshow("Equalization",new_img)cv2.waitKey(0)cv2.destroyAllWindows()程序運(yùn)行結(jié)果如圖4-13所示(a)原灰度圖(b)均衡化圖像(d)均衡化分布(c)原圖直方圖分布圖4.13圖像均衡化運(yùn)行結(jié)果4.4.4使用OpenCV函數(shù)實(shí)現(xiàn)直方圖均衡化在OpenCV中提供了cv2.equalizeHist()函數(shù),用于實(shí)現(xiàn)圖像的直方圖均衡化,它的輸入是灰度圖像,輸出是直方圖均衡化后的圖像。其語(yǔ)法格式為:dst=cv2.equalizeHist(src)其中輸入輸出參數(shù)為:src:表示待處理圖像dst:表示直方圖均衡化后的圖像【例4.14】使用cv2.equalHist()函數(shù)來(lái)實(shí)現(xiàn)直方圖均衡化。程序代碼如下:importcv2importmatplotlib.pyplotasplt

img=cv2.imread('d:/pics/sukuba1.png')img_Gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)equ=cv2.equalizeHist(img_Gray)plt.figure("原始灰度直方圖")plt.title('Origin')plt.hist(img_Gray.ravel(),256)

plt.figure("均衡化直方圖")plt.title('Equalization')plt.hist(equ.ravel(),256)plt.show()cv2.imshow("Gray",img_Gray)cv2.imshow("EqualizeHist",equ)cv2.waitKey(0)cv2.destroyAllWindows()程序運(yùn)行結(jié)果如圖4-14(a)灰度圖(b)均衡化后圖像(c)原圖直方圖分布(d)均衡化圖像直方圖圖4-14直方圖均衡化前后圖4.4.5自適應(yīng)直方圖均衡化

自適應(yīng)直方圖均衡化(AHE)是用來(lái)提升圖像對(duì)比度的一種圖像處理技術(shù),它和一般的直方圖均衡化算法不同,AHE算法通過(guò)計(jì)算圖像的局部直方圖,然后重新分布亮度來(lái)改變圖像對(duì)比度。因此,該算法更適合于改進(jìn)圖像的局部對(duì)比度以及獲得更多的圖像細(xì)節(jié)。但是,AHE也有過(guò)度放大圖像中相同區(qū)域噪聲的問(wèn)題,解決這個(gè)問(wèn)題的方法是限制對(duì)比度直方圖均衡(CLAHE)算法,能有效地限制這種不利的噪聲放大。在OpenCV中提供了cv2.createCLAHE函數(shù)來(lái)限制對(duì)比度的自適應(yīng)直方圖均衡化,函數(shù)語(yǔ)法格式為:dst=cv2.createCLAHE(clipLimit,titleGridSize)其中輸入?yún)?shù)為:clipLimit:顏色對(duì)比度的閾值,默認(rèn)設(shè)置限制對(duì)比度為40titleGridSize:均衡化的網(wǎng)格大小,即在多少網(wǎng)格下進(jìn)行直方圖的均衡化操作,常用大小是8×8的矩陣【例4.15】使用cv2.createCLAHE()函數(shù)實(shí)現(xiàn)限制對(duì)比度的直方圖均衡化。程序代碼如下:importcv2importmatplotlib.pyplotasplt

img=cv2.imread('d:\pics\sukuba1.png',0)#創(chuàng)建CLAHE對(duì)象clahe=cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))#限制對(duì)比度自適應(yīng)閾值均衡化dst=clahe.apply(img)#clahe.apply()就是將cv2.createCLAHE()應(yīng)用到每個(gè)通道上plt.figure("原始直方圖")plt.hist(img.ravel(),256)plt.figure('自適應(yīng)直方圖均衡化')plt.hist(dst.ravel(),256)plt.show()

cv2.imshow('Origin',img)cv2.imshow('CLAHE',dst)cv2.waitKey(0)cv2.destroyAllWindows()程序運(yùn)行結(jié)果如圖4-15所示。仔細(xì)觀察圖均衡化后的圖像,并進(jìn)行比較,尤其是雕像區(qū)域,可以看出雕像的臉部與背景書架處更加清晰明顯,且直方圖更加豐富。(a)原灰度圖(b)限制對(duì)比度直方圖均衡化圖4-15自適應(yīng)直方圖均衡化圖像(c)原圖直方圖(d)CLAHE均衡化圖像直方圖圖4-15自適應(yīng)直方圖均衡化圖像4.5直方圖規(guī)定化

在實(shí)際應(yīng)用中,有時(shí)并不需要圖像的直方圖具有整體的均勻分布,而是希望直方圖與規(guī)定要求的直方圖一致,這就是直方圖規(guī)定化。它可以人為地改變?cè)紙D像直方圖的形狀,使其成為某個(gè)特定的形狀,即增強(qiáng)特定灰度級(jí)分布范圍內(nèi)的圖像。

直方圖規(guī)定化就是通過(guò)一個(gè)灰度映像函數(shù),將原灰度直方圖改造成所希望的直方圖。直方圖修改的關(guān)鍵就是灰度映像函數(shù)。通過(guò)直方圖規(guī)定化調(diào)節(jié)圖像的對(duì)比度,可使圖像的像素點(diǎn)分布在0~255之間,使得圖像更加清晰。4.5.1自定義映像函數(shù)實(shí)現(xiàn)直方圖規(guī)定化使用Python語(yǔ)言編寫映像函數(shù),實(shí)現(xiàn)A圖像按照B圖像的直方圖進(jìn)行變換,獲得按照B圖像的直方圖變換后的A圖像。【例4.16】自定義映像函數(shù)實(shí)現(xiàn)直方圖規(guī)定化。程序代碼如下:importcv2importnumpyasnpimportmatplotlib.pyplotasplt

#定義計(jì)算直方圖累積概率函數(shù)defhistCalculate(src):

row,col=np.shape(src)hist=np.zeros(256,dtype=np.float32)cumhist=np.zeros(256,dtype=np.float32)cumProbhist=np.zeros(256,dtype=np.float32)#累積概率直方圖,即Y軸歸一化foriinrange(row):forjinrange(col):hist[src[i][j]]+=1cumhist[0]=hist[0]foriinrange(1,256):cumhist[i]=cumhist[i-1]+hist[i]cumProbhist=cumhist/(row*col)returncumProbhist#定義實(shí)現(xiàn)直方圖規(guī)定化函數(shù)defhistSpecification(specImg,refeImg):spechist=histCalculate(specImg)#計(jì)算待匹配直方圖refehist=histCalculate(refeImg)#計(jì)算參考直方圖corspdValue=np.zeros(256,dtype=np.uint8)#直方圖規(guī)定化foriinrange(256):diff=np.abs(spechist[i]-refehist[i])matchValue=iforjinrange(256):ifnp.abs(spechist[i]-refehist[j])<diff:diff=np.abs(spechist[i]-refehist[j])matchValue=jcorspdValue[i]=matchValueoutputImg=cv2.LUT(specImg,corspdValue)returnoutputImg#讀入原圖像img=cv2.imread('d:/pics/office_2.jpg',cv2.IMREAD_GRAYSCALE)#讀入?yún)⒖紙D像img1=cv2.imread('d:/pics/lena.jpg',cv2.IMREAD_GRAYSCALE)cv2.imshow('Inputimage',img)cv2.imshow('Referenceimage',img1)imgOutput=histSpecification(img,img1)cv2.imshow('Outputimage',imgOutput)cv2.waitKey(0)cv2.destroyAllWindows()plt.figure(1),plt.title('原圖像直方圖')plt.hist(img.ravel(),256)plt.figure(2),plt.title('參考圖像直方圖')plt.hist(img1.ravel(),256)plt.figure(3),plt.title('規(guī)定化后圖像的直方圖')plt.hist(imgOutput.ravel(),256)plt.show()程序運(yùn)行結(jié)果如圖4-16所示(a)原圖像(b)參考圖像(c)規(guī)定化后的圖像

圖4-16采用算法方式實(shí)現(xiàn)直方圖規(guī)定化【例4.17】彩色圖像的直方圖規(guī)定化。程序代碼如下:importcv2importnumpyasnp

img_O=cv2.imread('d:/pics/office_2.jpg')img_T=cv2.imread('d:/pics/lena.jpg')cv2.imshow('Originimage',img_O)cv2.imshow('Targetimage',img_T)color=('r','g','b')fori,colinenumerate(color):hist1,bins=np.histogram(img_O[:,:,i].ravel(),256,[0,256])hist2,bins=np.histogram(img_T[:,:,i].ravel(),256,[0,256])cdf1=hist1.cumsum()#灰度值0-255的累計(jì)值數(shù)組cdf2=hist2.cumsum()cdf1_hist=hist1.cumsum()/cdf1.max()#灰度值的累計(jì)值的比率cdf2_hist=hist2.cumsum()/cdf2.max()diff_cdf=[[0forjinrange(256)]forkinrange(256)]#diff_cdf里是每2個(gè)灰度值比率間的差值forjinrange(256):forkinrange(256):diff_cdf[j][k]=abs(cdf1_hist[j]-cdf2_hist[k])lut=[0forjinrange(256)]

溫馨提示

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