Python 语言学习——应用1.1 数字图像处理(第一节,颜色)

目录

1.基础知识

2.实战演示


1.基础知识:

        1.图像的表示.
  • 函数表示图像是二维信号,定义为二维函数f(x,y),其中,xy是空间坐标,f(x,y)是点(x,y)的幅值。拓展看,视频,又称动态图像,是多帧位图的有序组合用三维函数f(x,y,t)表示,其中,t为时间变量,f(x,y,t)t时刻那一帧点(x,y)的幅值
  • 模拟表示:通过客观的物理量表现颜色的图像,如照片、印刷品、画等。然而这类图像空间坐标值(x,y)及每点的光强连续,无法用计算机处理
  • 数字表示二维像素矩阵,矩阵中每一个点具有一种颜色。计算机衷意的形式。

        2.数字图像处理.

  • 数字图像处理Digital Image Processing利用计算机对图像进行去除或衰减噪声、增强、复原、分割、提取特征等的理论、方法和技术 .
  • 数字图像处理一般有三个层次:图像处理(改善视觉效果,增强某些特定的信息,去噪、增强、锐化、色彩处理、复原等图像分析(从点阵图像中找出某些数据,用来对图像内容进行识别理解,图像分割、图像描述和分析等)、和图像识别理解根据从图像中提取出的数据,利用模式识别的方法和理论,理解图像内容

        3.色度学基础与颜色模型.

  • 颜色匹配三原色:在颜色匹配中,用于颜色混合以产生任意颜色的三种颜色;三刺激值:颜色匹配实验中,当与待测色达到色匹配时所需要的三原色的数量,记作R、G、B。简单讲就是调颜料。核心在于三原色的比例。
  • 指导怎么调出各种色彩的标准:CIE 1931-XYZ色度系统——用假想的三种原色可以模拟可见光谱中的所有颜色。其中XYZ与RGB的调颜料关系为:

  • 上述调色方式只是调颜色,对明度,色调,饱和度处理欠妥,于是有:孟德尔表色系统。
  • 颜色模型:颜色的描述是通过建立色彩模型来实现的,不同的色彩模型对应于不同的处理目的。各种不同的颜色模型之间可以通过数学方法互相转换。
  • 常用颜色模型:RGB模型——以700nm(红)、546.1nm (绿)、435.8nm(蓝) 三个色光为三基色,又称为物理三基色。自然界的所有颜色都可以通过选用这三基色按不同比例混合而成。CMY和CMYK颜色模型——运用在大多数在纸上沉积彩色颜料的设备,如彩色 打印机和复印机。YIQ颜色模型——Y指亮度,即灰度值;I和Q指色调,描述色彩及饱 和度。利用人的可视系统对亮度变化比对色调和饱 和度变化更敏感而设计。YCbCr颜色模型——Y指亮度,与YIQ和YUV的Y相同,Cb和Cr指色彩。常见的灰度化方法之一: Y =0.299* R +0.587 * G +0.114 * B。转换方式:(R'为R/(R+G+B))

        4.图像信号的数字化

  • 模拟图像转换为数字图像,方能被计算机处理,这 一过程称为图像信号的数字化,包括:采样和量化。采样:对空间坐标x和y离散化,即确定水平和垂直 方向上的像素数。图像分辨率:采样所获得的图像总像素的多少,以水平和垂直像素数表示。量化:将各个像素所含的明暗信息离散化。8位量化:即2 8 ,充分考虑到人眼的识别能力, 非特殊用途的图像均为8bit量化,用[0 255]描述 “从黑到白”,0和255分别对应亮度的最低和 最高级别。可以具体到RGB三原色的情况,如下图:

 

         5.数字图像的数据结构

  • 文件头:图像的自我说明,应包含图像的 维数、类型、创建日期和某类标 题,也可以包含用于解释像素值 的颜色表或编码表,甚至历史段 (包含如何建立和处理图像的信 息)
  • 图像数据:像素颜色值或压缩后的数据。
  • 举例:JPG,PNG,GIF,TIFF,BMP

2.实战演示 

 P1.  使用编程打开一幅真彩色图像,将绿色和蓝色通道进行互换,显示通道互换后的图像 ,并对结果进行说明.

from PIL import Image  # 导入PIL库中的Image模块,用于图像处理

# 打开图像文件
image = Image.open("rainbow.jpg")  # 使用Image.open()函数打开名为"rainbow.jpg"的图像文件,并将其赋值给变量image
image.show()

# 获取图像的 RGB 通道
r, g, b = image.split()  # 使用image.split()将图像分为红色(r)、绿色(g)和蓝色(b)通道,并将它们分别赋值给变量r、g和b

# 交换绿色和蓝色通道
new_image = Image.merge("RGB", (r, b, g))  # 使用Image.merge()函数将绿色和蓝色通道互换,创建新的图像,并将其赋值给变量new_image
new_image.show()
# 保存修改后的图像
new_image.save("rainbow_swapped.jpg")  # 使用new_image.save()方法将修改后的图像保存

说明:当我们调用 image.split() 方法时,它会返回一个包含三个通道图像的元组:红色通道、绿色通道和蓝色通道。所以需要三个量去接待这三个元组,每个元组储存每个像素在相应通道上的强度值,所以代表相应通道上的灰度图。每个灰度图像代表了原始图像在对应通道上的强度值分布情况。这样,我们就可以对每个通道进行单独处理,比如互换绿色和蓝色通道,再合成为新的图像。


P2.  使用编程打开一幅真彩色图像,利用前面提到的灰度化式子对其进行灰度化,并显示变换前后图像。

from PIL import Image, ImageChops

# 打开图像文件
image = Image.open("rainbow.jpg")
image.show()

# 将图像分割为红色(R)、绿色(G)和蓝色(B)通道
r, g, b = image.split()

# 使用公式 Y = 0.299 * R + 0.587 * G + 0.114 * B 计算灰度值
gray_r = r.point(lambda x: 0.299 * x)
gray_g = g.point(lambda x: 0.587 * x)
gray_b = b.point(lambda x: 0.114 * x)

# 将三个灰度图像相加
y = ImageChops.add(gray_r, gray_g)
y = ImageChops.add(y, gray_b)

# 合并灰度通道为灰度图像
gray = Image.merge("L", (y,))#实际上y已经是gray这个结果,y本身也表示图像
gray.show()
# 保存灰度图像
gray.save("rainbow_gray.jpg")

 说明:merge函数这次返回一个灰度类型的图像"L",r.point(函数f)函数即将r元组的各元素(强度)值通过函数f映射后组成新的元组r',返回r'.而lambda是一个简洁的函数定义方式.


P3. 使用编程打开一幅真彩色图像,将其变换到HSV、YCbCr空间,观察变换后的数据,并显示变换前后图像

from PIL import Image

# 读取彩色图像
image_path = "rainbow.jpg"
color_image = Image.open(image_path)
# 将图像转换为HSV模式
hsv_image = color_image.convert("HSV")
# 将图像转换为YCbCr模式
ycbcre_image = color_image.convert("YCbCr")
color_image.show()
hsv_image.show()
ycbcre_image.show()

python中内置有转换函数convert,直接用就行,不用手动进行复杂的代数运算.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值