Python影象處理庫PIL的ImageFilter模組介紹
Python影象處理庫PIL的ImageFilter模組介紹
ImageFilter模組提供了濾波器相關定義;這些濾波器主要用於Image類的filter()方法。
一、ImageFilter模組所支援的濾波器
當前的PIL版本中ImageFilter模組支援十種濾波器:
1、 BLUR
ImageFilter.BLUR為模糊濾波,處理之後的影象會整體變得模糊。
例子:
>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im = im02.filter(ImageFilter.BLUR)
影象im02為原始影象,如下:
影象im為模糊濾波之後的影象,明顯比原始影象模糊了一些,見下圖:
2、 CONTOUR
ImageFilter.CONTOUR為輪廓濾波,將影象中的輪廓資訊全部提取出來。
例子:
>>>from PIL import ImageFilter
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= im02.filter(ImageFilter.CONTOUR)
影象im為輪廓影象,如下圖:
3、 DETAIL
ImageFilter.DETAIL為細節增強濾波,會使得影象中細節更加明顯。
例子:
>>>from PIL import ImageFilter
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= im02.filter(ImageFilter.DETAIL)
影象im為細節增強後的影象,如下圖:
ImageFilter.EDGE_ENHANCE為邊緣增強濾波,突出、加強和改善影象中不同灰度區域之間的邊界和輪廓的影象增強方法。經處理使得邊界和邊緣在影象上表現為影象灰度的突變,
例子:
>>>from PIL import ImageFilter
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= im02.filter(ImageFilter.EDGE_ENHANCE)
影象im為邊緣增強後的影象,如下圖:
ImageFilter.EDGE_ENHANCE_MORE為深度邊緣增強濾波,會使得影象中邊緣部分更加明顯。
例子:
>>>from PIL import ImageFilter
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= im02.filter(ImageFilter.EDGE_ENHANCE_MORE)
影象im為深度邊緣增強後的影象,如下圖:
6、 EMBOSS
ImageFilter.EMBOSS為浮雕濾波,會使影象呈現出浮雕效果。
例子:
>>>from PIL import ImageFilter
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= im02.filter(ImageFilter.EMBOSS)
影象im為浮雕效果的影象,如下圖:
ImageFilter.FIND_EDGES為尋找邊緣資訊的濾波,會找出影象中的邊緣資訊。
例子:
>>>from PIL import ImageFilter
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= im02.filter(ImageFilter.FIND_EDGES)
影象im為邊緣資訊的影象,如下圖:
8、 SMOOTH
ImageFilter.SMOOTH為平滑濾波,突出影象的寬大區域、低頻成分、主幹部分或抑制影象噪聲和干擾高頻成分,使影象亮度平緩漸變,減小突變梯度,改善影象質量。
例子:
>>>from PIL import ImageFilter
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im= im02.filter(ImageFilter.SMOOTH)
影象im為平滑濾波的影象,如下圖:
9、 SMOOTH_MORE
例子:
>>> from PIL importImageFilter
>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im =im02.filter(ImageFilter.SMOOTH_MORE)
影象im為深度平滑濾波的影象,如下圖:
10、 SHARPEN
ImageFilter.SHARPEN為銳化濾波,補償影象的輪廓,增強影象的邊緣及灰度跳變的部分,使影象變得清晰。
例子:
>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im =im02.filter(ImageFilter.SHARPEN)
影象im為銳化濾波的影象,如下圖:
二、ImageFilter模組的函式
1、 Kernel
定義:Kernel(size,kernel, scale=None, offset=0)
含義:(New in 1.1.5)生成一個給定尺寸的卷積核。在當前的版本中,變數size必須為(3,3)或者(5,5)。變數kernel與變數size對應地必須為包含9個或者25個整數或者浮點數的序列。
如果設定了變數scale,那將卷積核作用於每個畫素值之後的資料,都需要除以這個變數。預設值為卷積核的權重之和。
如果設定變數offset,這個值將加到卷積核作用的結果上,然後再除以變數scale。
例子:
>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im=im02.filter(ImageFilter.Kernel((3,3),(1,1,1,0,0,0,2,0,2)))
影象im為經過卷積核處理過的影象,如下圖:
2、 RankFilter
定義:RankFilter(size,rank)
含義:(New in 1.1.5)生成給定尺寸的等級濾波器。對於輸入影象的每個畫素點,等級濾波器根據畫素值,在(size,size)的區域中對所有畫素點進行排序,然後拷貝對應等級的值儲存到輸出影象中。
例子:
>>>from PIL import ImageFilter
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im=im02.filter(ImageFilter.RankFilter(5,24))
影象im為等級濾波後的影象,在每個畫素點為中心的5x5區域25個畫素點中選擇排序第24位的畫素作為新的值。如下圖:
3、 MinFilter
定義:MinFilter(size=3)
含義:(New in 1.1.5)生成給定尺寸的最小濾波器。對於輸入影象的每個畫素點,該濾波器從(size,size)的區域中拷貝最小的畫素值儲存到輸出影象中。
例子:
>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im=im02.filter(ImageFilter.MinFilter(5))
影象im為最小濾波後的影象,在每個畫素點為中心的5x5區域25個畫素點中選擇最小的畫素作為新的值。如下圖:
4、 MedianFilter
定義:MedianFilter(size=3)
含義:(New in 1.1.5)生成給定尺寸的中值濾波器。對於輸入影象的每個畫素點,該濾波器從(size,size)的區域中拷貝中值對應的畫素值儲存到輸出影象中。
例子:
>>>from PIL import ImageFilter
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im=im02.filter(ImageFilter.MedianFilter(5))
影象im為中值濾波後的影象,在每個畫素點為中心的5x5區域25個畫素點中選擇中值作為新的值。如下圖:
5、 MaxFilter
定義:MaxFilter(size=3)
含義:(New in 1.1.5)生成給定尺寸的最大濾波器。對於輸入影象的每個畫素點,該濾波器從(size,size)的區域中拷貝最大的畫素值儲存到輸出影象中。
例子:
>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im=im02.filter(ImageFilter.MaxFilter(5))
影象im為最大濾波後的影象,在每個畫素點為中心的5x5區域25個畫素點中選擇最大的畫素作為新的值。如下圖:
6、 ModeFilter
定義:ModeFilter(size=3)
含義:(New in 1.1.5)生成給定尺寸的模式濾波器。對於輸入影象的每個畫素點,該濾波器從(size,size)的區域中拷貝出現次數最多的畫素值儲存到輸出影象中。如果沒有一個畫素值出現過兩次極其以上,則使用原始畫素值。
例子:
>>>from PIL import ImageFilter
>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> im=im02.filter(ImageFilter.ModeFilter(5))
影象im為模式濾波後的影象,在每個畫素點為中心的5x5區域25個畫素點中選擇出現次數最多的畫素作為新的值。如下圖: