空间转换怎么操作,什么软件能做到空间变换

首页 > 经验 > 作者:YD1662022-11-01 19:58:12

本节将讨论不同的图像处理函数(使用点变换和几何变换),以及如何处理不同类型的图像。

1.5.1 处理不同的文件格式和图像类型

图像可以以不同的文件格式和不同的模式(类型)保存。接下来我们将讨论如何使用Python库来处理不同文件格式和类型的图像。

1.文件格式

图像文件可以有不同的格式,其中一些流行的格式包括BMP(8位、24位、32位)、png、JPG(JPEG)、GIF、PPM、PNM和TIFF。读者不需要担心图像文件的特定格式(如何存储元数据)以及从中提取数据。

Python图像处理库将读取图像,并提取数据和一些其他有用的信息(例如图像尺寸、类型/模式和数据类型)。

从一种文件格式转换为另一种文件格式 使用PIL可以读取一种文件格式的图像并将其保存为另一种文件格式,将PNG格式的图像保存为JPG格式的图像的代码如下:

im = Image.open("../images/parrot.png") print(im.mode) # RGB im.save("../images/parrot.jpg")

但如果PNG文件是在RGBA模式下,则读者在将其保存为JPG格式之前需要将其转换为RGB模式,否则将报错。以下代码展示了先转换再保存的方法:

im = Image.open("../images/hill.png") print(im.mode) # RGBA im.convert('RGB').save("../images/hill.jpg") # first convert to RGB mode2.图像类型(模式)

图像可以是以下不同的类型。

  • 单通道图像:每个像素由单个值表示,二值(单色)图像(每个像素由一个0~1位表示)和灰度图像(每个像素由8位表示,其值通常在0~255内)都是单通道图像。
  • 多通道图像:每个像素由一组值表示。
  • 三通道图像。RGB图像和HSV图像都是三通道图像。RGB图像的每个像素由三元组(rgb)值表示,这三个值分别表示每个像素的红色、绿色和蓝色的通道颜色值。HSV图像的每个像素由三元组(hsv)值表示,这三个值分别表示每个像素的色调(颜色)、饱和度(色彩,即颜色与白色的混合程度)和值(亮度,即颜色与黑色的混合程度)的通道颜色值。HSV模型描述颜色的方式与人眼感知颜色的方式是相似的。
  • 四通道图像。例如,RGBA图像的每个像素由四元组(rgba)值表示,其中最后一个通道表示透明度。
  • 一种图像模式转换为另一种图像模式 读者可以在读取图像本身的同时将RGB图像转换为灰度图像,如下面的代码所示:

    im = imread("images/parrot.png", as_gray=True) print(im.shape) #(362L, 486L)

    请注意,在将某些彩色图像转换为灰度图像时,可能会丢失一些信息。以下代码显示了使用石原板(Ishihara plate)检测色盲这样一个例子,这里使用color模块中的rgb2gray ()函数,彩色和灰度图像并排显示。

    im = imread("../images/Ishihara.png") im_g = color.rgb2gray(im) plt.subplot(121), plt.imshow(im, cmap='gray'), plt.axis('off') plt.subplot(122), plt.imshow(im_g, cmap='gray'), plt.axis('off') plt.show()

    运行上述代码,输出结果如图1-15所示。可以看到,彩色图像转换成了灰度图像。在彩色图像中,数字8是可见的,而在转换后的灰色版本图像中,数字8几乎不可见。

    空间转换怎么操作,什么软件能做到空间变换(1)

    图1-15 彩色图像至灰色图像的转换

    3.一些颜色空间(通道)

    图像的几个常用通道/颜色空间包括RGB、HSV、XYZ、YUV、YIQ、YPbPr、YCbCr和YDbDr。我们可以使用仿射映射将图像从一个颜色空间转换到另一个颜色空间。RGB颜色空间与YIQ颜色空间的线性映射关系矩阵如图1-16所示。

    空间转换怎么操作,什么软件能做到空间变换(2)

    图1-16 RGB颜色空间与YIQ颜色空间映射关系矩阵

    从一个颜色空间转换到另一个颜色空间 读者可以使用库函数从一个颜色空间转换到另一个颜色空间,例如将图像从RGB颜色空间转换为HSV颜色空间,代码如下所示:

    im = imread("../images/parrot.png") im_hsv = color.rgb2hsv(im) plt.gray() plt.figure(figsize=(10,8)) plt.subplot(221), plt.imshow(im_hsv[...,0]), plt.title('h', size=20), plt.axis('off') plt.subplot(222), plt.imshow(im_hsv[...,1]), plt.title('s', size=20), plt.axis('off') plt.subplot(223), plt.imshow(im_hsv[...,2]), plt.title('v', size=20), plt.axis('off') plt.subplot(224), plt.axis('off') plt.show()

    上述代码的运行结果如图1-17所示,即创建的鹦鹉HSV图像的H(hue或color:色调)、S(饱和度或浓度)和V(明度)通道。类似地,读者可以使用rgb2yuv()函数将图像转换到YUV颜色空间。

    空间转换怎么操作,什么软件能做到空间变换(3)

    图1-17 从RGB颜色空间转换为HSV颜色空间的鹦鹉图像

    4.由于存储图像的数据结构

    如前所述,PIL使用Image对象存储图像,而scikit-image使用numpy ndarray数据结构存储图像数据。接下来,我们将描述如何在这两个数据结构之间进行转换。

    转换图像数据结构 如下代码将展示如何从PIL的Image对象转换为numpy ndarray(由scikit-image使用):

    im = Image.open('../images/flowers.png') # read image into an Image object with PIL im = np.array(im) # create a numpy ndarray from the Image object imshow(im) # use skimage imshow to display the image plt.axis('off'), show()

    运行上述代码,输出结果如图1-18所示,可以看到,输出的是一幅花的图像。

    空间转换怎么操作,什么软件能做到空间变换(4)

    首页 12345下一页

    栏目热文

    文档排行

    本站推荐

    Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.