Python 实战人工智能数学基础:图像处理应用

1.背景介绍

在许多计算机视觉任务中,图像处理占据了很重要的角色,尤其是在目标检测、特征提取、分类、跟踪等计算机视觉任务中。图像处理是一个复杂的过程,涉及到图像的采集、分析、存储、显示等环节。本文将讨论基于Python实现的图像处理的相关知识和技术。下面先介绍图像的定义、结构、属性及一些基本术语。

一、图像的定义、结构、属性及一些基本术语

  1. 图像的定义 在数学上,图像(image)是指空间中的点所组成的集合。图像由像素或灰度值表示。一幅图像通常可以看作是一个二维或三维矩阵。

  2. 图像的结构 图像由两个维度,即行数和列数。例如,彩色图像的像素点有三个颜色通道(红、绿、蓝)。在彩色图像中,每个像素点都有一个坐标值,描述这个像素点相对于整个图像的位置。

  3. 图像的属性

  • 边界:图像的边界是一个外形,它把图像分割成若干个区域。图像的边界可以是矩形、圆形、椭圆、弯曲等。
  • 直方图:直方图是图像的一维分布图,用以呈现灰度值或色调的分布情况。直方图能够直观地反映出图像的整体对比度、均匀性、均值等特性。
  • 模糊:图像模糊是指图像中的高频噪声被低频信号所掩盖而得来的效果。图像模糊的原因很多,比如光照变化、摄像机运动、恶劣天气、光污染等。
  • 空间域变换:在不同的空间域下,图像的视野范围不同,图像也会发生变化。
  • 几何变换:图像的几何变换是指改变图像的大小、旋转角度、放缩等,以达到图像编辑、图像质量评估、增强等目的。
  • 分割:图像的分割是图像识别、目标检测等任务的关键一步。图像的分割可以分为全局分割和局部分割。全局分割是指按照某种规则将整个图像划分成几个互不重叠的子区域。局部分割是指根据不同特征进行区域的分割。
  1. 一些基本术语
  • 坐标系:坐标系用来描述一个点或者图像区域在某种坐标下的位置。常用的坐标系有笛卡尔坐标系和球面坐标系。
  • RGB: 是一种三原色图片的色彩模型,其中R代表红色、G代表绿色、B代表蓝色。
  • 灰度图: 是黑白的图像,其中每一个像素的值对应的是该像素的亮度。
  • HSV: 是一种色彩模型,它把颜色划分为色调、饱和度、明度三个参数,分别对应红色、绿色、蓝色。
  • 颜色空间转换:是指从一种颜色空间转换到另一种颜色空间。常见的颜色空间有RGB、HSV、CMYK、YCbCr四种。
  • 拉普拉斯算子:是一个二阶微分算子,用于检测图像中的边缘。它的水平方向、垂直方向和对角线方向上的梯度都是1,中间的元素是0。
  • 中值滤波:是一种图像平滑方法。它用邻域内的中值代替当前像素的灰度值。
  • 锐化(Sharpen):是指将图像中的细节锐化,使其显得更加醒目。
  • 撕裂(Dilation):是指将图像中的细节向外扩张。
  • 膨胀(Erosion):是指将图像中的细节向里收缩。
  • 腐蚀(erosion):是指将图像中的噪声点排除掉,只保留边缘信息。

二、Python 的图像处理库

  1. OpenCV (Open Source Computer Vision Library) OpenCV (Open Source Computer Vision Library) 是目前最流行的开源计算机视觉库。该库提供了各种功能,如图像处理、计算机视觉、机器学习、自然语言处理等。它支持多种编程语言,包括 C++、Java、Python、MATLAB 和其他。OpenCV 库提供多个工具集用于解决日常生活中的常见计算机视觉问题。
  2. Pillow (Python Imaging Library) Pillow 是一个用来创建、编辑、保存、显示、分析和转换图像的 Python 模块。Pillow 提供了 Image 对象,并提供了一系列的方法用来对图像进行操作。
  3. Scikit-Image (scikit-learn for image processing) Scikit-Image 是基于 NumPy, SciPy, and matplotlib 的 Python 图像处理库。它提供多种函数来进行图像的读取、写入、裁剪、缩放、翻转、显示、转换等。还可以通过不同的算法来进行图像的分割、过滤、形态学处理、特征提取等。
  4. Keras with TensorFlow backend Keras 是用于构建和训练神经网络的高级 API。它具有可移植性、易用性、模块化设计和可扩展性。Keras 可以运行在 TensorFlow 或 Theano 上,为开发人员提供简单且高效的接口。它支持常见的数据结构,如张量、数组、字典等,并且支持加载、存储、归一化数据、监控训练过程、可视化结果等功能。

三、数字图像处理的一些基本技术

  1. 颜色模型转换
  • RGB 颜色模型转换为 YUV
  • YUV 颜色模型转换为 RGB
  • RGB 颜色模型转换为 HSV
  1. 图像拼接
  • 横向拼接
  • 纵向拼接
  1. 图像均衡化
  • 全局均衡化
  • 局部均衡化
  1. 图像滤波
  • 中值滤波
  • 双边滤波
  • 均值滤波
  • 高斯滤波
  1. 图像预处理
  • 直方图归一化
  • 标准化
  • 高斯噪声降低
  1. 图像增强
  • 对比度增强
  • 色调增强
  • 饱和度增强
  • 平滑
  • 锐化
  1. 图像融合
  • 抖动合并
  • 权重融合
  • 插值融合
  • 平均融合
  1. 图像分割
  • 阈值分割
  • K-Means 聚类
  • Mean Shift 聚类
  1. 形态学操作
  • 开运算
  • 闭运算
  • 顶帽运算
  • 底帽运算
  • 形态学梯度
  • 顶帽操作与底帽操作结合

四、Python 图像处理实践

下面我们通过实例,使用 Python 来实现一些常见的图像处理技术,包括图片缩放、拼接、锐化、均衡化、图片增强、形态学处理等。具体如下:

1. 图片缩放

from PIL import Image
import numpy as npimg = Image.open('lena_color.tif')    # 以 RGB 模式打开彩色图像width = int(img.size[0] * 0.5)   # 宽度缩小一半
height = int(img.size[1] * 0.5)  # 高度缩小一半
img_small = img.resize((width, height), Image.ANTIALIAS)     # 使用 ANTIALIAS 选项进行放缩img_arr = np.array(img).astype("uint8")      # 将图像转换为 Numpy array
img_small_arr = np.array(img_small).astype("uint8") print(f"Original size is {img.size}, new size is {img_small.size}")
print(f"Difference between original pixel values and resized small ones:\n{np.abs(img_arr - img_small_arr)}")  

2. 拼接图片

from PIL import Image
import ospath = 'images'       # 指定图片路径
files = sorted([os.path.join(path, f) for f in os.listdir(path)])    # 获取指定路径的所有图片文件img_new = None          # 初始化空图像
for i, img in enumerate(imgs):print(f"{i+1}. Size of the current picture is {img.size}")if img_new == None:img_new = img   # 如果是第一张图片,直接赋值给 img_newelse:img_new = Image.alpha_composite(img_new, img)    # 用 alpha 透明度模式拼接图片if not os.path.exists('output'):      # 检查输出目录是否存在,不存在则创建os.mkdir('output')

3. 锐化图片

from PIL import ImageFilter, ImageEnhanceimg = Image.open('lena_gray.tif').convert('L')    # 打开灰度图像并转换为灰度图像filter_blur = img.filter(ImageFilter.GaussianBlur(radius=3))    # 高斯滤波降低噪声enhancer = ImageEnhance.Sharpness(filter_blur)    # 创建 Sharpness 对象sharped_img = enhancer.enhance(2.0)             # 锐化增强if not os.path.exists('output'):               # 检查输出目录是否存在,不存在则创建os.mkdir('output')sharped_img.save(os.path.join('output','sharped.tif'))    # 保存锐化后的图像

4. 均衡化图片

from skimage import data, exposure
import numpy as np
import matplotlib.pyplot as pltimg = data.moon()   # 读取月牙图像increasing_hist = exposure.equalize_adapthist(img, clip_limit=0.03)   # 使用 CLAHE 直方图均衡化fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(8, 3))         # 设置子图大小ax[0].imshow(img, cmap='gray')        # 原始图像
ax[0].set_title('Original image')ax[1].imshow(increasing_hist, cmap='gray')           # 均衡化图像
ax[1].set_title('Histogram equalized image')ax[2].hist(increasing_hist.flatten(), bins=256, range=[0, 256], histtype='stepfilled', color='black')
ax[2].set_xlim([0, 256])                  # 设置 x 轴刻度范围
ax[2].set_ylim([0, np.max(increasing_hist)*1.1])                # 设置 y 轴刻度范围
ax[2].set_xlabel('Pixel intensity')
ax[2].set_ylabel('Number of pixels')
ax[2].set_title('Histogram of the histogram equalized image')plt.tight_layout()            # 自动调整子图间距
plt.show()                    # 显示图像

5. 图像增强

from PIL import ImageEnhance
from skimage import dataimg = data.coins()                 # 读取硬币图像enhancers = [ImageEnhance.Brightness(img),ImageEnhance.Color(img),ImageEnhance.Contrast(img)]fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(6, 8))    # 设置子图布局titles = ["Brightness", "Color", "Contrast"]                      # 设置子图标题
images = [(enhancers[j*2]).enhance(1.5 + j) for j in range(3)]    # 设置增强因子列表for i, im in enumerate(images):                                  # 遍历增强后图片row, col = divmod(i, 2)                                      # 根据索引计算子图的行列坐标axes[row][col].imshow(im)                                    # 在子图中绘制图像axes[row][col].set_axis_off()                                # 关闭坐标轴axes[row][col].set_title(titles[row])                          # 添加子图标题plt.tight_layout()                                              # 自动调整子图间距
plt.show()                                                      # 显示图像

6. 形态学处理

from scipy import ndimage
import matplotlib.pyplot as pltimg = np.zeros((100, 100)).astype("uint8")                         # 创建 100x100 黑色图像
img[:50,:] = 255                                                  # 第 1/4 置为白色
img[:, :50] = 255                                                 # 第 1/4 置为白色
img[50:, :] = 255                                                 # 第 1/4 置为白色
img[:, 50:] = 255                                                 # 第 1/4 置为白色eroded_img = ndimage.binary_erosion(img).astype("uint8")           # 腐蚀处理dilation_img = ndimage.binary_dilation(img).astype("uint8")       # 膨胀处理gradient_img = eroded_img - dilation_img                           # 形态学梯度fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 8))         # 设置子图布局axes[0][0].imshow(img, cmap="gray")                               # 原始图像
axes[0][0].set_title('Original binary image')                    axes[0][1].imshow(eroded_img, cmap="gray")                        # 腐蚀图像
axes[0][1].set_title('Eroded image')                           axes[1][0].imshow(dilation_img, cmap="gray")                       # 膨胀图像
axes[1][0].set_title('Dilated image')                            axes[1][1].imshow(gradient_img, cmap="gray")                       # 形态学梯度图像
axes[1][1].set_title('Morphological gradient')                  plt.tight_layout()                                               # 自动调整子图间距
plt.show()                                                       # 显示图像

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码免费领取保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring快速搭建聊天AI

官网url: https://spring.io/projects/spring-ai 本文演示的是open AI 1创建java项目 2.拿到AI的key(没有的话可以去淘宝花几块钱买一个) //YOUR_API_KEY写你自己的open AI的key spring.ai.openai.api-keyYOUR_API_KEY spring.ai.openai.chat.options.…

在家如何查找下载外文文献

查找下载外文文献的数据库大部分都需要使用权限的,那么我们如何在家进入这些数据库查找下载文献资源呢?请看本文的经验分享: 举例1、 一位同学的文献求助:Performance of financial hedging and earnings management under dive…

WordPress 图片压缩插件:Compress JPEG PNG images 使用方法

插件介绍 Compress JPEG & PNG images是一款非常好用的图片压缩插件:,非常值得大家安装使用;特别是图片类型网站。其实我们很多服务器磁盘空间是不在乎多那么几十 MB 大小的,但是压缩了图片能提升网站速度,节省宽带&#xff…

【论文阅读——SplitFed: When Federated Learning Meets Split Learning】

级别CCFA 1.摘要 联邦学习(FL)和分割学习(SL)是两种流行的分布式机器学习方法。两者都采用了模型对数据的场景;客户端在不共享原始数据的情况下训练和测试机器学习模型。由于机器学习模型的架构在客户端和服务器之间…

BackTrader 中文文档(七)

原文:www.backtrader.com/ TA-Lib 原文:www.backtrader.com/docu/talib/talib/ 即使backtrader提供了大量内置指标,而且开发指标主要是定义输入、输出并以自然方式编写公式,一些人还是想要使用TA-LIB。一些原因包括: 指…

基于SignalR视频聊天 一

环境 VS2022 WIN10 .NET8 VSCode VUE SignalR 1.安装SignalR客户端库 需要在Vue.js项目中安装SignalR客户端库。可以使用npm或者yarn来安装 npm install microsoft/signalr2.创建SignalR服务 创建SignalR服务,以便客户端(Vue.js应用)能…

抄袭可耻 - 2023面试高手抄袭对比图

原创博客(伏城之外)抄袭博客(2023面试高手)对比图华为OD机试 - 跳马(Java & JS & Python & C & C++)_华为od岗c卷机试马走日-CSDN博客2024年华为OD机试真题-跳马-Python-OD统一考试(C卷)-CSDN博客

集合体系java

Collection:单列集合:每个元素只包含一个值 Collection集合存储的是地址 Collection的三种遍历方法如下 //迭代器是用来遍历集合的专用方式(数组没有迭代器),在java中迭代器的代表是Iterator //boolean hasNext():询问当前位置…

Java中队列

队列是一种常见的数据结构,它按照先进先出(FIFO)的原则管理元素。在 Java 中,队列通常是通过链表或数组实现的,不同的实现类在内部数据结构和操作上可能有所不同。 1.原理 1.数据结构:队列的基本数据结构…

【python图形界面问题解决】wxPython创建图形界面程序,在代码编译器中正常运行,但是打包后却不能运行解决办法

一、问题 使用wxPython创建一个图形界面,在VSCODE中正常运行,但是打包后,却不能运行,只出现一个一闪而过的窗口,这时最需要看看这窗口到底显示了什么内容。这里可以使用录屏软件录制屏幕,这里使用LICEcap小…

美国卖家需知!儿童玩具CPC认证ASTMF-23标准更新

2023年10月13日,美国材料与试验协会(ASTM)发布了最新版本的玩具安全标准ASTM F963-23。这一标准的修订涵盖了声学、电池可及性、充气材料、弹射玩具等技术方面的要求。同时,它还为邻苯二甲酸盐和重金属在玩具基材中的使用提供了豁…

Towards IP Geolocation Using Delay and TopologyMeasurements(TBG)(2006年)

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:492 Katz-Bassett E, John J P, Krishnamurthy A, et al. Towards IP geolocation using delay and topology …

通讯录的实现(单链表版本)

我们首先要知道通讯录的实现是基于单链表的基础上的,所以我们首先要搞懂单链表。(注意:今天的代码量较多),但这不是阻挡我们前进的脚步,冲冲冲!!! 单链表的简要概述 我们…

2024.4.19 Python爬虫复习day07 可视化3

综合案例 需求: 已知2020年疫情数据,都是json数据,需要从文件中读出,进行处理和分析,最终实现数据可视化折线图 相关知识点: json json简介: 本质是一个特定格式的字符串 举例: [{},{},{}] 或者 {}python中json包: import jsonpython数据转为json数据: 变量接收json…

微服务架构使用和docker部署方法(若依)

这里以若依官方网站开源的微服务框架为例子记录使用方法过程。 开源地址:RuoYi-Cloud: 🎉 基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统,同时提供了 Vue3 的版本 下载后,用IDEA社区版开发工具打…

GNU Radio Radar Toolbox编译及安装

文章目录 前言一、GNU Radio Radar Toolbox 介绍二、gr-radar 安装三、具体使用四、OFDM 雷达仿真 前言 GNU Radio Radar Toolbox(gr-radar)是一个开放源码的工具箱,用于 GNU Radio 生态系统,主要目的是为雷达信号处理提供必要的…

vue源码解析——diff算法/双端比对/patchFlag/最长递增子序列

虚拟dom——virtual dom,提供一种简单js对象去代替复杂的 dom 对象,从而优化 dom 操作。virtual dom 是“解决过多的操作 dom 影响性能”的一种解决方案。virtual dom 很多时候都不是最优的操作,但它具有普适性,在效率、可维护性之…

木马免杀代码之python反序列化分离免杀

本篇文章主要用到python来对CobaltStrike生成的Shellcode进行分离免杀处理, 因此要求读者要有一定的python基础, 下面我会介绍pyhon反序列化免杀所需用到的相关函数和库 exec函数 exec函数是python的内置函数, 其功能与eval()函数相同, 但不同的是exec函数支持多行python代码…

我国新戊二醇产能逐渐增长 市场集中度有望进一步提升

我国新戊二醇产能逐渐增长 市场集中度有望进一步提升 新戊二醇(NPG)又称为2,2-二甲基-1,3-丙二醇,化学式为C5H12O2,熔点为124-130℃。新戊二醇多表现为一种无特殊气味的白色结晶固体,易溶于水及醇、醚等溶液。新戊二醇…

为什么看到这么多人不推荐C++?

前几天逛知乎的时候,看到一个问题: 看到这个问题我倒是想吐槽几句了。 C一直没找到自己的定位! C语言:我是搞系统编程开发的,操作系统、数据库、编译器、网络协议栈全是我写的。 PHP:我是搞后端业务开发…