当前位置:   article > 正文

一文总结Python数字图像处理基础知识与前沿应用

python要求综合运用课程所学课程相关知识,对图像、语音、文本、电磁等数据选择合
 
 

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

介绍

数字图像处理由涉及在计算机上处理图像的各种技术和方法组成。对图像进行各种类型的操作,构成数字图像处理。

了解图像实际上是什么

图像基本上是二维信号。信号函数是 f(x,y),其中 x 和 y 在某个点的值生成该点的像素。图像基本上是一个由 0 到 255 之间的数字组成的二维数组

图像处理涉及多种因素。图像处理有几个主要动机。

图像处理帮助
  1. 改进我们存储的数字信息。

  2. 使图像处理自动化。

  3. 更好的图像优化,实现高效的存储和传输。

这些年来,图像处理有了很大的进步,图像处理的现代商业应用也很多。

图像处理用途
1.  图像校正、锐化和分辨率校正

通常,我们希望我们可以将旧图像做得更好。这在今天是可能的。缩放、锐化、边缘检测、高动态范围编辑都属于这一类。所有这些步骤都有助于增强图像。大多数编辑软件和图像校正代码都可以轻松完成这些操作。

2. 编辑应用程序和社交媒体的过滤器

如今,大多数编辑应用程序和社交媒体应用程序都提供过滤器。

6f59fdeaa688290a849e825ff3a3e078.jpeg

以上是原始图像和过滤后的图像的示例。滤镜使图像看起来更具视觉吸引力。滤镜通常是一组函数,可以更改图像中的颜色和其他方面,使图像看起来不同。过滤器是图像处理的一个有趣应用。

3. 医疗技术

在医学领域,图像处理用于各种任务,如 PET 扫描、X 射线成像、医学 CT、紫外线成像、癌细胞图像处理等等。将图像处理引入医疗技术领域极大地改善了诊断过程。

a3a601df5cdfe3f9eec92e54c43d195a.jpeg

左边的图像是原始图像。右边的图像是经过处理的图像。我们可以看到处理后的图像要好得多,可以用于更好的诊断。

4. 计算机/机器视觉

图像处理最有趣和最有用的应用之一是计算机视觉。计算机视觉用于使计算机看到、识别事物,并将整个环境作为一个整体进行处理。计算机视觉的一个重要用途是自动驾驶汽车、无人机等。CV 有助于障碍物检测、路径识别和理解环境。

24fd1aa9afcd4fa868d89fe2071d265b.jpeg

这就是典型的计算机视觉对汽车自动驾驶仪的工作方式。计算机接收实时镜头并分析其他汽车、道路和其他障碍物。

5. 模式识别

模式识别是图像处理的一部分,涉及人工智能和机器学习。图像处理用于找出图像中的各种模式和方面。模式识别用于手写分析、图像识别、计算机辅助医疗诊断等。

6. 视频处理

视频基本上是图像的快速移动。视频处理中使用了各种图像处理技术。视频处理的一些方法是噪声去除、图像稳定、帧速率转换、细节增强等等。

Python 图像处理入门

让我们从 Python 中的一些基本图像相关任务开始。我们将使用 PIL。

PIL:https://pypi.org/project/Pillow/

Python 图像库用于各种图像处理任务。

安装
pip install pillow

安装了PIL后,我们现在可以转到代码了。

首先,我们使用一些 matplotlib 函数。

  1. import matplotlib.image as img
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. %matplotlib inline

将读取以下图像。它被命名为 image1.jpg。

37e45bae132a7e423d1bae458d20ed08.jpeg

  1. # reading jpg image 
  2. img = img.imread('image1.jpg')
  3. plt.imshow(img)

9558f6de9e606a825aca310c51e3ca26.jpeg

图像被读取。

  1. # modifying the shape of the image
  2. lum1 = img[:, :, 0
  3. plt.imshow(lum1)

现在修改了图像形状。

b7f59a63c329a55dc522d203c3ce3068.jpeg

现在我们将其更改为“热”颜色图。

要了解有关颜色图的更多信息,请访问此链接:https://matplotlib.org/stable/tutorials/colors/colormaps.html。

  1. plt.imshow(lum1, cmap ='hot'
  2. plt.colorbar()

图像输出看起来:

f65dd4ca6e6c6a528f1714230c167373.jpeg

现在我们尝试不同的颜色图。

  1. imgplot = plt.imshow(lum1)
  2. imgplot.set_cmap('nipy_spectral')

图像输出:

dc9cc13698623cb54fc6233f63f8ac4c.jpeg

使用颜色图的原因是,通常在各种应用程序和用途中,拥有统一的颜色图会有所帮助。阅读有关颜色图的更多信息:在 Matplotlib 中选择颜色图 https://matplotlib.org/stable/tutorials/colors/colormaps.html。

现在让我们看看为什么我们将图像称为二维数组。

  1. #data type of lum1
  2. print(type(lum1))

输出:<class 'numpy.ndarray'>

print(lum1)

[[ 92 91 89 … 169 168 169]

[110 110 110 … 168 166 167]

[100 103 108 … 164 163 164]

[ 97 96 95 … 144 147 147]

[ 99 99 98 … 145 139 138]

[102 102 103 … 149 137 137]]

这些点只是为了表明它们之间还有更多的数据点。但是可以肯定的是,所有数据都是数字数据。

让我们找出数组的大小。

len(lum1)

输出:320

len(lum1[300])

输出:658

这为我们提供了图像的像素数和尺寸:320*658。

我们稍后也会验证这一点。

现在,我们使用 PIL。

from PIL import Image

我们将使用这个图像文件,命名为:people.jpg。

1b73a7af00712f87ade14bb8be30a363.png

  1. img2 = Image.open('people.jpg')
  2. plt.imshow(img2)

519a81fbc8b92296a06413d5ffde88b6.jpeg

图像被读取。

现在,我们调整图像大小。

  1. img2.thumbnail((5050), Image.ANTIALIAS)  # resizes image in-place
  2. imgplot = plt.imshow(img2)

289fbe83074f1ea4b37678c502c8c03e.jpeg

imgplot1 = plt.imshow(img2, interpolation="nearest")

6087cc0ab8b3a59d146a5605bcb68e8d.jpeg

imgplot2 = plt.imshow(img2, interpolation="bicubic")

6ea268dc3093ac83d841fd970be82a44.jpeg

但是,为什么我们在图像处理中故意模糊图像?通常对于模式识别和计算机视觉算法,如果图像非常清晰,处理起来就会很困难。因此进行模糊处理以使图像平滑。模糊还可以使图像中的颜色过渡从一侧到另一侧更加平滑。

现在,让我们验证我们之前处理过的汽车图像的尺寸。

  1. #some more interesting stuff
  2. file='image1.jpg'
  3. with Image.open(file) as image: 
  4.     width, height = image.size 
  5. #Image width, height is be obtained

34ddfec9d3b0f549bc15027cd9256444.jpeg

这些也是我们之前得到的维度。所以我们可以得出结论,图像是320*658。

让我们也尝试旋转和转置图像。

  1. #Relative Path 
  2. img3 = Image.open("image1.jpg")  
  3. #Angle given 
  4. img_rot= img3.rotate(180)  
  5. #Saved in the same relative location 
  6. img_rot.save("rotated_picture.jpg")

c599b48661baa776dff2087d4ed9f28f.jpeg

这是旋转后的图像。

  1. #transposing image  
  2. transposed_img = img3.transpose(Image.FLIP_LEFT_RIGHT)
  3. #Saved in the same relative location 
  4. transposed_img.save("transposed_img.jpg")

dff68f1703dfe0529accc5012dfd944b.jpeg

这是转置后的图像。

尾注

图像处理有各种重要的应用,随着时间的推移,方法和过程也会得到改进。

  1. 下载1:OpenCV-Contrib扩展模块中文版教程
  2. 在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
  3. 下载2:Python视觉实战项目52
  4. 在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
  5. 下载3:OpenCV实战项目20
  6. 在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
  7. 交流群
  8. 欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/554743
推荐阅读
相关标签
  

闽ICP备14008679号