#-*- coding: UTF-8 -*-
from PIL import Image
from PIL import ImageFilter
import numpy as np
from matplotlib import pyplot as plt
def image_filters():
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
img_data = Image.open("timg.jpeg")
#0,原始图像
fig = plt.figure(figsize=(10,25))#创建多个子图
fig.add_subplot(3,4,1)
plt.title("原图")
plt.imshow(img_data )
#1,mageFilter.DETAIL为细节增强滤波,会使得图像中细节更加明显。
deltail = img_data.filter(ImageFilter.DETAIL)
fig.add_subplot(3,4,2)
plt.title("增强滤波")
plt.imshow(deltail )
#2, #BLUR就是均值滤波,ImageFilter.BLUR为模糊滤波,处理之后的图像会整体变得模糊。
avg = img_data.filter(ImageFilter.BLUR)
fig.add_subplot(3,4,3)
plt.title("模糊滤波")
plt.imshow(avg)
#3,CONTOUR找轮廓,ImageFilter.CONTOUR为轮廓滤波,将图像中的轮廓信息全部提取出来。
contour = img_data.filter(ImageFilter.CONTOUR)
fig.add_subplot(3,4,4)
plt.title("轮廓滤波")
plt.imshow(contour)
#4,#FIND_EDGES边缘检测,突出、加强和改善图像中不同灰度区域之间的边界和轮廓的图像增强方法
edge = img_data.filter(ImageFilter.FIND_EDGES)
fig.add_subplot(3,4,5)
plt.title("边缘检测")
plt.imshow(edge)
#5,ImageFilter.EDGE_ENHANCE_MORE为深度边缘增强滤波,会使得图像中边缘部分更加明显。
edge_more = img_data.filter(ImageFilter.EDGE_ENHANCE_MORE)
fig.add_subplot(3,4,6)
plt.title("深度增强滤波")
plt.imshow(edge_more)
#6,ImageFilter.EMBOSS为浮雕滤波,会使图像呈现出浮雕效果。
emboss = img_data.filter(ImageFilter.EMBOSS)
fig.add_subplot(3,4,7)
plt.title("浮雕滤波")
plt.imshow(emboss)
#7,ImageFilter.SMOOTH为平滑滤波,突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分,使图像亮度平缓渐变,减小突变梯度,改善图像质量。
smooth = img_data.filter(ImageFilter.SMOOTH)
fig.add_subplot(3,4,8)
plt.title("平滑滤波")
plt.imshow(smooth )
#8,ImageFilter.SMOOTH_MORE为深度平滑滤波,会使得图像变得更加平滑。
smooth_more = img_data.filter(ImageFilter.SMOOTH_MORE)
fig.add_subplot(3,4,9)
plt.title("深度平滑滤波")
plt.imshow(smooth_more )
#9,ImageFilter.SHARPEN为锐化滤波,补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰。
sharpen = img_data.filter(ImageFilter.SHARPEN)
fig.add_subplot(3,4,10)
plt.title("锐化滤波")
plt.imshow(sharpen)
#10,ImageFilter.EDGE_ENHANCE为边缘增强滤波,突出、加强和改善图像中不同灰度区域之间的边界和轮廓的图像增强方法。经处理使得边界和边缘在图像上表现为图像灰度的突变,用以提高人眼识别能力。
edge_enhance= img_data.filter(ImageFilter.EDGE_ENHANCE)
fig.add_subplot(3,4,11)
plt.title("边缘增强滤波")
plt.imshow(edge_enhance)
plt.show()
def Kernel_filters():
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#0,原始图像
pic =Image.open("timg.jpeg")
fig = plt.figure(figsize=(10,25))#创建多个子图
fig.add_subplot(2,4,1)
plt.title("原图")
plt.imshow(pic)
#1,Kernel(size,kernel, scale=None, offset=0)如果设置了变量scale,那将卷积核作用于每个像素值之后的数据,都需要除以这个变量。默认值为卷积核的权重之和。
image=pic.filter(ImageFilter.Kernel((3,3),(1,1,1,0,0,0,2,0,2)))
fig.add_subplot(2,4,2)
plt.title("Kernel")
plt.imshow(image)
#2,RankFilter(size,rank)于输入图像的每个像素点,等级滤波器根据像素值,在(size,size)的区域中对所有像素点进行排序,然后拷贝对应等级的值存储到输出图像中。
#在每个像素点为中心的nxn区域nxn个像素点中选择排序第y位的像素作为新的值。
image=pic.filter(ImageFilter.RankFilter(3,6))
fig.add_subplot(2,4,3)
plt.title("Kernel1")
plt.imshow(image)
#MinFilter(size=3)
#生成给定尺寸的最小滤波器。对于输入图像的每个像素点,该滤波器从(size,size)的区域中拷贝最小的像素值存储到输出图像中。
image=pic.filter(ImageFilter.MinFilter(5))
fig.add_subplot(2,4,4)
plt.title("min")
plt.imshow(image)
#MaxFilter(size=3)
#生成给定尺寸的最大滤波器。对于输入图像的每个像素点,该滤波器从(size,size)的区域中拷贝最小的像素值存储到输出图像中。
image=pic.filter(ImageFilter.MinFilter(7))
fig.add_subplot(2,4,5)
plt.title("max")
plt.imshow(image)
#MedianFilter(size=3)
#生成给定尺寸的中值滤波器。对于输入图像的每个像素点,该滤波器从(size,size)的区域中拷贝中值对应的像素值存储到输出图像中。
image=pic.filter(ImageFilter.MedianFilter(3))
fig.add_subplot(2,4,6)
plt.title("中值滤波")
plt.imshow(image)
#ModeFilter(size=3)
#生成给定尺寸的模式滤波器。对于输入图像的每个像素点,该滤波器从(size,size)的区域中拷贝出现次数最多的像素值存储到输出图像中。如果没有一个像素值出现过两次极其以上,则使用原始像素值。
image=pic.filter(ImageFilter.ModeFilter(3))
fig.add_subplot(2,4,7)
plt.title("模式滤波")
plt.imshow(image)
plt.show()
image_filters()
Kernel_filters()
PIL图像处理方法总结
最新推荐文章于 2024-06-06 08:25:23 发布