mageFilter: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()
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()
19 批量化处理图片
from PIL import Image, ImageFilter
import os
import os.path
# # 指明被遍历的文件夹
rootdir = r'/home/yajun/图片/文件处理中心/image1'
for parent, dirnames, filenames in os.walk(rootdir):#遍历图片
for filename in filenames:
print('parent is :' + parent)
print('filename is :' + filename)
currentPath = os.path.join(parent, filename)
print('the fulll name of the file is :' + currentPath)
im = Image.open(currentPath)
#out = im.transpose(Image.FLIP_LEFT_RIGHT)#实现翻转
#out = im.filter(ImageFilter.BLUR)#模糊函数
out = im.filter(ImageFilter.GaussianBlur(5))#模糊函数
#
newname=r"/home/duanyajun/图片/文件处理中心/image"+'/'+filename#重新命名
out.save(newname)#保存结束
20:注意名称意思
ImageFilter类中预定义了如下滤波方法:
• BLUR:模糊滤波
• CONTOUR:轮廓滤波
• DETAIL:细节滤波
• EDGE_ENHANCE:边界增强滤波
• EDGE_ENHANCE_MORE:边界增强滤波(程度更深)
• EMBOSS:浮雕滤波
• FIND_EDGES:寻找边界滤波
• SMOOTH:平滑滤波
• SMOOTH_MORE:平滑滤波(程度更深)
• SHARPEN:锐化滤波
• GaussianBlur(radius=2):高斯模糊
>radius指定平滑半径。
• UnsharpMask(radius=2, percent=150, threshold=3):反锐化掩码滤波
>radius指定模糊半径;
>percent指定反锐化强度(百分比);
>threshold控制被锐化的最小亮度变化。
• Kernel(size, kernel, scale=None, offset=0):核滤波
当前版本只支持核大小为3x3和5x5的核大小,且图像格式为“L”和“RGB”的图像。
>size指定核大小(width, height);
>kernel指定核权值的序列;
>scale指定缩放因子;
>offset指定偏移量,如果使用,则将该值加到缩放后的结果上。
• RankFilter(size, rank):排序滤波
>size指定滤波核的大小;
>rank指定选取排在第rank位的像素,若大小为0,则为最小值滤波;若大小为size * size / 2则为中值滤波;若大小为size * size - 1则为最大值滤波。
• MedianFilter(size=3):中值滤波
>size指定核的大小
• MinFilter(size=3):最小值滤波器
>size指定核的大小
• MaxFilter(size=3):最大值滤波器
>size指定核的大小
• ModeFilter(size=3):波形滤波器
选取核内出现频次最高的像素值作为该点像素值,仅出现一次或两次的像素将被忽略,若没有像素出现两次以上,则保留原像素值。
>size指定核的大小