Python影象處理之Pillow--ImageFilter
ImageFilter:Python中的影象濾波,主要對影象進行平滑、銳化、邊界增強等濾波處理。
影象濾波:在儘量保留影象細節特徵的條件下對目標影象的噪聲進行抑制,是影象預處理中不可缺少的操作,其處理效果的好壞將直接影響到後續影象處理和分析的有效性和可靠性。
存在目的:由於成像系統、傳輸介質和記錄裝置等的不完善,數字影象在其形成、傳輸記錄過程中往往會受到多種噪聲的汙染。另外,在影象處理的某些環節當輸入的像物件並不如預想時也會在結果影象中引入噪聲。要構造一種有效抑制噪聲的濾波器必須考慮兩個基本問題:能有效地去除目標和背景中的噪聲;同時,能很好地保護影象目標的形狀、大小及特定的幾何和拓撲結構特徵。
濾波器主要包括如下種類:
BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN(GaussianBlur、UnsharpMask、Kernel、RankFilter、MedianFilter、MinFilter、MaxFilter、ModeFilter)
上原圖作為參照:
1.BLUR:模糊濾波
效果圖:from PIL import Image, ImageFilter im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg") bluF = im.filter(ImageFilter.BLUR) bluF.show()
2.CONTOUR:輪廓濾波
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
conF = im.filter(ImageFilter.CONTOUR)
conF.show()
效果圖:
3.DETAIL:細節濾波
效果圖:from PIL import Image, ImageFilter im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg") detF = im.filter(ImageFilter.DETAIL) detF.show()
4.EDGE_ENHANCE:邊界增強濾波
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
eeF = im.filter(ImageFilter.EDGE_ENHANCE)
eeF.show()
效果圖:
5.EDGE_ENHANCE_MORE:深度邊緣增強濾波
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
eemF = im.filter(ImageFilter.EDGE_ENHANCE_MORE)
eemF.show()
效果圖:
6.EMBOSS:浮雕濾波
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
embF = im.filter(ImageFilter.EMBOSS)
embF.show()
效果圖:
7.FIND_EDGES:尋找邊界濾波(找尋影象的邊界資訊)
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
fdeF = im.filter(ImageFilter.FIND_EDGES)
fdeF.show()
效果圖:
8.SMOOTH:平滑濾波
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
smoF = im.filter(ImageFilter.SMOOTH)
smoF.show()
效果圖:
9.SMOOTH_MORE:深度平滑濾波
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
smomF = im.filter(ImageFilter.SMOOTH_MORE)
smomF.show()
效果圖:
10.SHARPEN:銳化濾波
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
shaF = im.filter(ImageFilter.SHARPEN)
shaF.show()
效果圖:
11.GaussianBlur:高斯模糊
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
gbF = im.filter(ImageFilter.GaussianBlur(radius=10))
gbF.show()
①radius:模糊半徑
12.UnsharpMask:反銳化掩碼濾波
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
umF = im.filter(ImageFilter.UnsharpMask(radius=2, percent=150, threshold=3))
umF.show()
①radius:模糊半徑
②percent:反銳化強度(百分比)
③threshold:被銳化的最小亮度
效果圖:
13.Kernel:卷積核濾波
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
kF = im.filter(ImageFilter.Kernel((3, 3), (1, 2, 2, 2, 0, 0, 1, 2, 2), scale=None, offset=10))
kF.show()
①size:核的大小(width,
height)
②kernel:核權值序列如3*3的為(1, 2, 2, 2, 0, 0, 1, 2, 2)
③scale:縮放因子
④offset:偏移量(使用的話,則將該值加到縮放後的結果上)
效果圖:
14.RankFilter:排序濾波
對於輸入影象的每個畫素點,等級濾波器根據畫素值,在(size,size)的區域中對所有畫素點進行排序,然後拷貝對應等級的值儲存到輸出影象中
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
rfF = im.filter(ImageFilter.RankFilter(5, 8))
rfF.show()
①size:核的大小(width,
height)
②rank:如例子,在每個畫素點為中心的5x5區域25個畫素點中選擇排序第8位的畫素作為新的值
效果圖:
15.MinFilter:最小值濾波器
對於輸入影象的每個畫素點,該濾波器從(size,size)的區域中拷貝最小的畫素值儲存到輸出影象中
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
minF = im.filter(ImageFilter.MinFilter(5))
minF.show()
①size:核的大小(size=N)
效果圖:
16.MedianFilter:中值濾波
對於輸入影象的每個畫素點,該濾波器從(size,size)的區域中拷貝中值對應的畫素值儲存到輸出影象中
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
medF = im.filter(ImageFilter.MedianFilter(5))
medF.show()
①size:核的大小(size=N)
效果圖:
17.MaxFilter:最大值濾波
對於輸入影象的每個畫素點,該濾波器從(size,size)的區域中拷貝最大的畫素值儲存到輸出影象中
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
maxF = im.filter(ImageFilter.MaxFilter(5))
maxF.show()
①size:核的大小(size=N)
效果圖:
18.ModeFilter:模式濾波
對於輸入影象的每個畫素點,該濾波器從(size,size)的區域中拷貝出現次數最多的畫素值儲存到輸出影象中。如果沒有一個畫素值出現過兩次極其以上,則使用原始畫素值。
from PIL import Image, ImageFilter
im = Image.open(r"C:\Users\admin\Desktop\Penguins.jpg")
modF = im.filter(ImageFilter.ModeFilter(5))
modF.show()
①size:核的大小(size=N)
效果圖: