成都搭建企业网站,移动网站 做优化,今网科技,高端设计参考网站1.背景介绍
在许多计算机视觉任务中#xff0c;图像处理占据了很重要的角色#xff0c;尤其是在目标检测、特征提取、分类、跟踪等计算机视觉任务中。图像处理是一个复杂的过程#xff0c;涉及到图像的采集、分析、存储、显示等环节。本文将讨论基于Python实现的图像处理的…1.背景介绍
在许多计算机视觉任务中图像处理占据了很重要的角色尤其是在目标检测、特征提取、分类、跟踪等计算机视觉任务中。图像处理是一个复杂的过程涉及到图像的采集、分析、存储、显示等环节。本文将讨论基于Python实现的图像处理的相关知识和技术。下面先介绍图像的定义、结构、属性及一些基本术语。
一、图像的定义、结构、属性及一些基本术语 图像的定义 在数学上图像(image)是指空间中的点所组成的集合。图像由像素或灰度值表示。一幅图像通常可以看作是一个二维或三维矩阵。 图像的结构 图像由两个维度即行数和列数。例如彩色图像的像素点有三个颜色通道(红、绿、蓝)。在彩色图像中每个像素点都有一个坐标值描述这个像素点相对于整个图像的位置。 图像的属性
边界图像的边界是一个外形它把图像分割成若干个区域。图像的边界可以是矩形、圆形、椭圆、弯曲等。直方图直方图是图像的一维分布图用以呈现灰度值或色调的分布情况。直方图能够直观地反映出图像的整体对比度、均匀性、均值等特性。模糊图像模糊是指图像中的高频噪声被低频信号所掩盖而得来的效果。图像模糊的原因很多比如光照变化、摄像机运动、恶劣天气、光污染等。空间域变换在不同的空间域下图像的视野范围不同图像也会发生变化。几何变换图像的几何变换是指改变图像的大小、旋转角度、放缩等以达到图像编辑、图像质量评估、增强等目的。分割图像的分割是图像识别、目标检测等任务的关键一步。图像的分割可以分为全局分割和局部分割。全局分割是指按照某种规则将整个图像划分成几个互不重叠的子区域。局部分割是指根据不同特征进行区域的分割。
一些基本术语
坐标系坐标系用来描述一个点或者图像区域在某种坐标下的位置。常用的坐标系有笛卡尔坐标系和球面坐标系。RGB: 是一种三原色图片的色彩模型其中R代表红色、G代表绿色、B代表蓝色。灰度图: 是黑白的图像其中每一个像素的值对应的是该像素的亮度。HSV: 是一种色彩模型它把颜色划分为色调、饱和度、明度三个参数分别对应红色、绿色、蓝色。颜色空间转换是指从一种颜色空间转换到另一种颜色空间。常见的颜色空间有RGB、HSV、CMYK、YCbCr四种。拉普拉斯算子是一个二阶微分算子用于检测图像中的边缘。它的水平方向、垂直方向和对角线方向上的梯度都是1中间的元素是0。中值滤波是一种图像平滑方法。它用邻域内的中值代替当前像素的灰度值。锐化Sharpen是指将图像中的细节锐化使其显得更加醒目。撕裂Dilation是指将图像中的细节向外扩张。膨胀Erosion是指将图像中的细节向里收缩。腐蚀erosion是指将图像中的噪声点排除掉只保留边缘信息。
二、Python 的图像处理库
OpenCV (Open Source Computer Vision Library) OpenCV (Open Source Computer Vision Library) 是目前最流行的开源计算机视觉库。该库提供了各种功能如图像处理、计算机视觉、机器学习、自然语言处理等。它支持多种编程语言包括 C、Java、Python、MATLAB 和其他。OpenCV 库提供多个工具集用于解决日常生活中的常见计算机视觉问题。Pillow Python Imaging Library Pillow 是一个用来创建、编辑、保存、显示、分析和转换图像的 Python 模块。Pillow 提供了 Image 对象并提供了一系列的方法用来对图像进行操作。Scikit-Image scikit-learn for image processing Scikit-Image 是基于 NumPy, SciPy, and matplotlib 的 Python 图像处理库。它提供多种函数来进行图像的读取、写入、裁剪、缩放、翻转、显示、转换等。还可以通过不同的算法来进行图像的分割、过滤、形态学处理、特征提取等。Keras with TensorFlow backend Keras 是用于构建和训练神经网络的高级 API。它具有可移植性、易用性、模块化设计和可扩展性。Keras 可以运行在 TensorFlow 或 Theano 上为开发人员提供简单且高效的接口。它支持常见的数据结构如张量、数组、字典等并且支持加载、存储、归一化数据、监控训练过程、可视化结果等功能。
三、数字图像处理的一些基本技术
颜色模型转换
RGB 颜色模型转换为 YUVYUV 颜色模型转换为 RGBRGB 颜色模型转换为 HSV
图像拼接
横向拼接纵向拼接
图像均衡化
全局均衡化局部均衡化
图像滤波
中值滤波双边滤波均值滤波高斯滤波
图像预处理
直方图归一化标准化高斯噪声降低
图像增强
对比度增强色调增强饱和度增强平滑锐化
图像融合
抖动合并权重融合插值融合平均融合
图像分割
阈值分割K-Means 聚类Mean Shift 聚类
形态学操作
开运算闭运算顶帽运算底帽运算形态学梯度顶帽操作与底帽操作结合
四、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(fOriginal size is {img.size}, new size is {img_small.size})
print(fDifference 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{i1}. 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(radius3)) # 高斯滤波降低噪声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_limit0.03) # 使用 CLAHE 直方图均衡化fig, ax plt.subplots(nrows1, ncols3, figsize(8, 3)) # 设置子图大小ax[0].imshow(img, cmapgray) # 原始图像
ax[0].set_title(Original image)ax[1].imshow(increasing_hist, cmapgray) # 均衡化图像
ax[1].set_title(Histogram equalized image)ax[2].hist(increasing_hist.flatten(), bins256, range[0, 256], histtypestepfilled, colorblack)
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(nrows3, ncols2, 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(nrows2, ncols2, figsize(8, 8)) # 设置子图布局axes[0][0].imshow(img, cmapgray) # 原始图像
axes[0][0].set_title(Original binary image) axes[0][1].imshow(eroded_img, cmapgray) # 腐蚀图像
axes[0][1].set_title(Eroded image) axes[1][0].imshow(dilation_img, cmapgray) # 膨胀图像
axes[1][0].set_title(Dilated image) axes[1][1].imshow(gradient_img, cmapgray) # 形态学梯度图像
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%免费】