社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

小白学视觉 • 2 年前 • 238 次点击  
点击上方小白学视觉”,选择加"星标"或“置顶
重磅干货,第一时间送达
介绍
数字图像处理由涉及在计算机上处理图像的各种技术和方法组成。对图像进行各种类型的操作,构成数字图像处理。

了解图像实际上是什么

图像基本上是二维信号。信号函数是 f(x,y),其中 x 和 y 在某个点的值生成该点的像素。图像基本上是一个由 0 到 255 之间的数字组成的二维数组。
图像处理涉及多种因素。图像处理有几个主要动机。

图像处理帮助

  1. 改进我们存储的数字信息。
  2. 使图像处理自动化。
  3. 更好的图像优化,实现高效的存储和传输。
这些年来,图像处理有了很大的进步,图像处理的现代商业应用也很多。

图像处理用途

1.  图像校正、锐化和分辨率校正
通常,我们希望我们可以将旧图像做得更好。这在今天是可能的。缩放、锐化、边缘检测、高动态范围编辑都属于这一类。所有这些步骤都有助于增强图像。大多数编辑软件和图像校正代码都可以轻松完成这些操作。
2. 编辑应用程序和社交媒体的过滤器
如今,大多数编辑应用程序和社交媒体应用程序都提供过滤器。
以上是原始图像和过滤后的图像的示例。滤镜使图像看起来更具视觉吸引力。滤镜通常是一组函数,可以更改图像中的颜色和其他方面,使图像看起来不同。过滤器是图像处理的一个有趣应用。
3. 医疗技术
在医学领域,图像处理用于各种任务,如 PET 扫描、X 射线成像、医学 CT、紫外线成像、癌细胞图像处理等等。将图像处理引入医疗技术领域极大地改善了诊断过程。
左边的图像是原始图像。右边的图像是经过处理的图像。我们可以看到处理后的图像要好得多,可以用于更好的诊断。
4. 计算机/机器视觉
图像处理最有趣和最有用的应用之一是计算机视觉。计算机视觉用于使计算机看到、识别事物,并将整个环境作为一个整体进行处理。计算机视觉的一个重要用途是自动驾驶汽车、无人机等。CV 有助于障碍物检测、路径识别和理解环境。
这就是典型的计算机视觉对汽车自动驾驶仪的工作方式。计算机接收实时镜头并分析其他汽车、道路和其他障碍物。
5. 模式识别
模式识别是图像处理的一部分,涉及人工智能和机器学习。图像处理用于找出图像中的各种模式和方面。模式识别用于手写分析、图像识别、计算机辅助医疗诊断等。
6. 视频处理
视频基本上是图像的快速移动。视频处理中使用了各种图像处理技术。视频处理的一些方法是噪声去除、图像稳定、帧速率转换、细节增强等等。

Python 图像处理入门

让我们从 Python 中的一些基本图像相关任务开始。我们将使用 PIL。
PIL:https://pypi.org/project/Pillow/
Python 图像库用于各种图像处理任务。

安装

pip install pillow
安装了PIL后,我们现在可以转到代码了。
首先,我们使用一些 matplotlib 函数。
import matplotlib.image as img
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
将读取以下图像。它被命名为 image1.jpg。
# reading jpg image 
img = img.imread('image1.jpg')
plt.imshow(img)
图像被读取。
# modifying the shape of the image
lum1 = img[:, :, 0
plt.imshow(lum1)
现在修改了图像形状。
现在我们将其更改为“热”颜色图。
要了解有关颜色图的更多信息,请访问此链接:https://matplotlib.org/stable/tutorials/colors/colormaps.html
plt.imshow(lum1, cmap ='hot'
plt.colorbar()
图像输出看起来:
现在我们尝试不同的颜色图。
imgplot = plt.imshow(lum1)
imgplot.set_cmap('nipy_spectral')
图像输出:
使用颜色图的原因是,通常在各种应用程序和用途中,拥有统一的颜色图会有所帮助。阅读有关颜色图的更多信息:在 Matplotlib 中选择颜色图 https://matplotlib.org/stable/tutorials/colors/colormaps.html
现在让我们看看为什么我们将图像称为二维数组。
#data type of lum1

print(type(lum1))
输出:
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。
img2 = Image.open('people.jpg')
plt.imshow(img2)
图像被读取。
现在,我们调整图像大小。
img2.thumbnail((5050), Image.ANTIALIAS)  # resizes image in-place
imgplot = plt.imshow(img2)
imgplot1 = plt.imshow(img2, interpolation="nearest")
imgplot2 = plt.imshow(img2, interpolation="bicubic")
但是,为什么我们在图像处理中故意模糊图像?通常对于模式识别和计算机视觉算法,如果图像非常清晰,处理起来就会很困难。因此进行模糊处理以使图像平滑。模糊还可以使图像中的颜色过渡从一侧到另一侧更加平滑。
现在,让我们验证我们之前处理过的汽车图像的尺寸。
#some more interesting stuff
file='image1.jpg'
with Image.open(file) as image: 
    width, height = image.size 
#Image width, height is be obtained
这些也是我们之前得到的维度。所以我们可以得出结论,图像是320*658。
让我们也尝试旋转和转置图像。
#Relative Path 
img3 = Image.open("image1.jpg")  
#Angle given 
img_rot= img3.rotate(180)  
#Saved in the same relative location 
img_rot.save("rotated_picture.jpg")
这是旋转后的图像。
#transposing image  
transposed_img = img3.transpose(Image.FLIP_LEFT_RIGHT)
#Saved in the same relative location 
transposed_img.save("transposed_img.jpg")
这是转置后的图像。

尾注

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


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉 公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/158255
 
238 次点击