数字图像处理是指在计算机上对图像进行操作的各种技术和方法。这些操作包括对图像进行多种类型的处理,构成了数字图像处理的基础。图像本质上是一个二维信号,信号函数为f(x,y),其中x和y的值在一点上生成该点的像素。图像实际上是一个由0到255之间的数字组成的二维数组。
数字图像处理涉及多种因素,其主要动机包括改善存储的数字信息、使图像工作自动化以及优化图像以实现高效的存储和传输。随着时间的推移,图像处理技术已经取得了很大的进步,并在现代商业应用中发挥着重要作用。
图像处理技术的应用范围广泛,包括图像校正、锐化和分辨率校正。现代技术使能够改善老旧图像的质量,包括放大、锐化、边缘检测和高动态范围编辑等。这些步骤有助于增强图像,大多数编辑软件和图像校正代码可以轻松完成这些任务。
编辑应用和社交媒体应用中的滤镜是图像处理的另一个应用。滤镜使图像看起来更具视觉吸引力,通常是一组改变图像颜色和其他方面的函数,使图像看起来不同。滤镜是图像处理的一个有趣应用。
在医疗技术领域,图像处理用于各种任务,如PET扫描、X射线成像、医学CT、紫外线成像、癌细胞图像处理等。图像处理的引入极大地改善了医疗技术领域的诊断过程。
计算机/机器视觉是图像处理最有趣和有用的应用之一。计算机视觉用于使计算机能够看到、识别事物并整体处理环境。计算机视觉的一个重要应用是自动驾驶汽车和无人机等。计算机视觉有助于障碍物检测、路径识别和理解环境。
模式识别是图像处理的一部分,涉及人工智能和机器学习。图像处理用于发现图像中的各种模式和方面。模式识别用于手写识别、图像识别、计算机辅助医学诊断等。
视频处理本质上是图像的快速移动。视频处理中使用各种图像处理技术。视频处理的一些方法包括噪声去除、图像稳定、帧速率转换、细节增强等。
让开始使用Python进行一些基本的图像相关任务。将使用PIL(Python Imaging Library)。PIL用于各种图像处理任务。
pip install pillow
安装PIL后,现在可以进入代码部分。首先,将使用一些matplotlib函数。
import matplotlib.image as img
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
以下代码将读取名为image1.jpg的图像。
import matplotlib.image as img
import matplotlib.pyplot as plt
# 读取jpg图像
img = img.imread('image1.jpg')
plt.imshow(img)
plt.show()
图像已读取。现在将修改图像的形状。
lum1 = img[:, :, 0]
plt.imshow(lum1)
现在图像形状已修改。将把它变成“热”色图。要了解更多关于色图的信息,请访问这个链接。
plt.imshow(lum1, cmap='hot')
plt.colorbar()
现在尝试不同的色图。
imgplot = plt.imshow(lum1)
imgplot.set_cmap('nipy_spectral')
使用色图的原因是,在各种应用和用途中,拥有统一的色图是有帮助的。要了解更多关于色图的信息,请阅读:选择Matplotlib中的色图。
现在让看看为什么称图像为二维数组。
# lum1的数据类型
print(type(lum1))
print(lum1)
输出将显示图像是一个数值数据的数组。让找出数组的大小。
len(lum1)
len(lum1[300])
这给出了图像的像素数和尺寸:320*658。稍后也会验证这一点。现在,将使用PIL。
from PIL import Image
将使用这个名为people.jpg的图像文件。
img2 = Image.open('people.jpg')
plt.imshow(img2)
图像已读取。现在,调整图像的大小。
img2.thumbnail((50, 50), Image.ANTIALIAS) # 调整图像大小
imgplot = plt.imshow(img2)
imgplot1 = plt.imshow(img2, interpolation="nearest")
imgplot2 = plt.imshow(img2, interpolation="bicubic")
为什么在图像处理中故意模糊图像呢?通常,对于模式识别和计算机视觉算法来说,如果图像非常清晰,处理起来会很困难。因此,模糊处理使图像变得平滑。模糊还使图像中的颜色过渡更加平滑。
现在,让验证之前处理的汽车图像的尺寸。
file='image1.jpg'
with Image.open(file) as image:
width, height = image.size
这些是之前得到的尺寸。因此,可以得出结论,图像是320*658。让也尝试旋转和翻转图像。
img3 = Image.open("image1.jpg")
img_rot= img3.rotate(180)
img_rot.save("rotated_picture.jpg")
这是旋转后的图像。
transposed_img = img3.transpose(Image.FLIP_LEFT_RIGHT)
transposed_img.save("transposed_img.jpg")