图1-25 鹦鹉图像的对数变换
② 幂律变换。幂律变换用作图像的γ校正。下面一行代码说明了如何使用point()函数进行幂律变换,其中γ=0.6:
im_g.point(lambda x: 255*(x/255)**0.6).show()
图1-26显示了运行上述代码生成的鹦鹉的幂律变换图像。
图1-26 鹦鹉图像的幂律变换
(6)一些几何变换。本节中将讨论另一组变换,这些变换是通过将适当的矩阵(通常用齐次坐标表示)与图像矩阵相乘来完成的。由于这些变换会改变图像的几何方向,因此称这些变换为几何变换。
① 镜像图像。可以使用transpose()函数和水平或垂直镜像图像,代码如下所示:
im.transpose(Image.FLIP_LEFT_RIGHT).show() # reflect about the vertical axis
运行上述代码,得到图1-27所示的鹦鹉图像的镜像。
图1-27 鹦鹉图像的镜像
② 旋转图像。可以使用rotate()函数将图像旋转一个角度(以度为单位),代码如下所示:
im_45 = im.rotate(45) #rotate the image by 45 degrees
im_45.show() #show the retated image
运行上述代码,鹦鹉图像的旋转变换如图1-28所示。
图1-28 鹦鹉图像的旋转变换
③ 在图像上应用仿射变换。二维仿射变换矩阵T可以应用于图像的每个像素(在齐次坐标中),以进行仿射变换,这种变换通常通过反向映射(扭曲)来实现。
如下代码所示的是用shear(剪切)变换矩阵变换输入图像时得到的输出图像。transform()函数中的数据参数是一个六元组(a,b,c,d,e,f),其中包含来自仿射变换矩阵(affine transform matrix)的前两行。对于输出图像中的每个像素(x,y),新值取自输入图像中的位置(ax by c,dx ey f),该位置四舍五入为最接近的像素。transform()函数可用于缩放、平移、旋转和剪切原始图像。
im = Image.open("../images/parrot.png")
im.transform((int(1.4*im.width), im.height), Image.AFFINE,
data=(1,-0.5,0,0,1,0)).show() # shear
运行上述代码,所输出的剪切变换图像如图1-29所示。