本文章由Jupyter Notebook导出

任务一

请用在不使用Opencv框架的情况下实现图片的镜像操作,最终显示原图片,垂直镜像图片和水平镜像图片。

1
2
3
from PIL import Image,ImageFilter
import numpy as np
import matplotlib.pyplot as plt
1
2
3
4
%matplotlib inline 
im = Image.open("./lena.png")
plt.figure("Text") # 图像窗口名称
plt.imshow(im)

png

水平镜像

1
2
im2=im.transpose(Image.FLIP_LEFT_RIGHT)
plt.imshow(im2)

png

垂直镜像

1
2
im3=im.transpose(Image.FLIP_TOP_BOTTOM)
plt.imshow(im3)

png

任务二

请在不使用Opencv框架的情况下实现Gamma变换,并显示原图像,Gamma值为0.5和2时的图像。

1
2
im_G=im.convert("L")
plt.imshow(im_G)

png

gamma函数

1
2
def gamma_fun(gm):
return lambda x:pow(x/255,gm)*255

gamma=0.5

1
2
im_gm05=im_G.point(gamma_fun(0.5))
plt.imshow(im_gm05)

png

gamma=2

1
2
im_gm2=im_G.point(gamma_fun(2))
plt.imshow(im_gm2)

png

任务三

请在不使用Opencv框架的情况下完成中值滤波操作,最终显示原图像,滤波窗口大小为3时的滤波效果和滤波窗口大小为5时的滤波效果。

原始图像

1
plt.imshow(im)

png

窗口为3

1
2
im_mid3=im.filter(ImageFilter.MedianFilter(3))
plt.imshow(im_mid3)

png

窗口为5

1
2
im_mid5=im.filter(ImageFilter.MedianFilter(5))
plt.imshow(im_mid5)

png

任务四

请在不使用Opencv框架的情况下完成锐化操作,最终显示原图像,并使用1.2.19中的两个锐化算子进行锐化,然后显示图像效果,再使用PIL库内置锐化方法进行锐化操作,并显示结果。

原始图片

1
plt.imshow(im)

png

算子1

$$
\begin{bmatrix}
-1 & -1 & -1 \
-1 & 9 & -1 \
-1 & -1 & -1
\end{bmatrix}
$$

1
2
im_s1=im.filter(ImageFilter.Kernel((3,3),(-1,-1,-1,-1,9,-1,-1,-1,-1)))
plt.imshow(im_s1)

png

算子2
$$
\begin{bmatrix}
0 & -1 & 0 \
-1 & 8 & -1 \
0 & 1 & 0
\end{bmatrix}/4
$$

1
2
im_s2=im.filter(ImageFilter.Kernel((3,3),(0/4,-1/4,0/4,-1/4,8/4,-1/4,0/4,-1/4,0/4)))
plt.imshow(im_s1)

png

内置方法

1
2
im_spil=im.filter(ImageFilter.SHARPEN)
plt.imshow(im_spil)

png

ipynb下载链接

图像预处理作业.ipynb