当前位置: 首页 > article >正文

记录一下图像处理的基础知识

记录一下自己学习的图像处理的基础知识。

一、图像的文件格式以及常用的图像空间

1、文件格式

常见的图像文件格式有 jpg, png, bmp, gif

(1)jpg:有损压缩算法,大幅减小文件大小,便于存储和传输,兼容性强;但是会压缩画质,背景不可透明。

(2)png:无损压缩算法,能够比较好的保留原始图像质量,可以保存透明背景;但是文件较大,不利于传输。

(3)bmp:不进行压缩或使用简单的RLE压缩,不会损失图像质量;文件很大,需要占用大量的存储空间,兼容性有限,背景不可透明。

(4)gif:支持动画效果,兼容性强;但是只能支持256种颜色,研所会损失图像质量。

2、图像空间

RGB:红绿蓝三个颜色通道,是最常用的空间特征。

(255,255,255):白色

(0,0,0):黑色

(255,0,0):纯红色

(255,255,0):纯黄色

HSV:色度(使用360度来表示颜色,如下图)、饱和度(颜色接近光谱色的程度)、明度(颜色的明亮程度)

三个值分别的取值范围为:

H:0~360度

S:0~1

V:0~1

        需要注意的是,我们使用ps软件打开图片看到的HSV的取值范围和使用opencv转换的HSV的取值范围是不同的,因为opencv中的图像通常存储在cv::Mat容器中,像素的数据类型是uchar(无符号8位整数),范围在0~255,因此对HSV的值进行了转换。

opencv读取的HSV的取值范围为:

H:0~179

S:0~255

V:0~255

对应关系为:

H_opencv = H / 2.0

S_opencv = S * 255 

V_opencv = V * 255

二、图像预处理

1、图像增强:去噪、锐化

(1)去噪:可以使用图像平滑的方式来达到去噪的作用。

        这里主要记录了空间域图像平滑技术,对图像进行平滑处理的时候,需要一个滤波器,对每个像素点一定范围内的像素点进行计算。滤波又分为线性滤波和非线性滤波。

   滤波类型定义
   线性滤波基于线性运算,将图像中的每一个像素与周围的像素按照一定的权重进行加权求和来生成新的像素值(原理和卷积核是一样的)
   非线性滤波基于非线性运算,比如说中值滤波,将一个像素点和周围的像素点放在一起,取中值作为新的像素点

        两种滤波性质的方法如下:

    滤波类型方法
   线性滤波

均值滤波:固定滤波器窗口大小,计算该窗口内所有像素点的均值作为新的像素点

高斯滤波:卷积核基于高斯函数产生,距离中心像素越近的像素点权重越大,去除噪音的同时能够保留图像的边缘和细节信息。

Sobel滤波:主要用于检测图像的边缘,主要通过计算中心像素与其临近像素在水平上或者垂直上的差值来确定边缘的强度。

   非线性滤波

中值滤波:将一个像素点和周围的像素点放在一起,取中值作为新的像素点。

双边滤波:考虑像素的空间距离和灰度距离,与中心像素灰度值较大的相邻像素,权重低;与中心像素灰度值接近且空间位置靠近的像素,权重高。

形态学滤波:膨胀和腐蚀。对于每个像素,如果结构元素覆盖的区域内所有像素都满足一定条件(如像素值都为 1),则保留该像素,否则将其删除。膨胀则是腐蚀的相反操作,对于每个像素,如果结构元素覆盖的区域内有任何一个像素满足条件,则将该像素设置为满足条件的值。

(2)锐化:通过增强梯度来达到锐化的目的

        1)梯度:图像的梯度是一个矢量,用于描述图像中像素值的变化速度。在二维图像中,通常将水平方向上和垂直方向上的像素值变化分别表示为两个分量:水平梯度和垂直梯度。

        2)计算方式

               a) 一阶差分:分别在水平和垂直的方向上计算中心像素值与左右两边或者是上下两边像素值的差值。

               b)梯度算子:Roberts算子、Prewitt 算子、Sobel 算子等。

                      Roberts算子:基于交叉差分的梯度算法,采用对角线方向相邻两像素之差近似梯    度来检测边缘,对具有陡峭边缘且含噪声少的图像效果较好,但对噪声敏感,定位精度相对较低,计算简单,速度快,可用于一些简单的图像识别、文字图像初步处理。

                      dx = \begin{bmatrix} -1 & 0\\ 0 & 1 \end{bmatrix},  dy = \begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix}

                     Prewitt 算子:利用3x3邻域内的灰度差来计算梯度,然后将两个方向的梯度幅值相加得到该点的边缘强度。

                      水平方向上的卷积核为:

\begin{bmatrix} -1 & 0 & 1\\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{bmatrix}

                      垂直上的卷积核为:

\begin{bmatrix} -1 & -1 & -1\\ 0 & 0 & 0\\ 1 & 1 & 1 \end{bmatrix}

                     Sobel 算子:在上面以及叙述过,这里记录一下Sobel 算子的卷积核:

                      水平方向上的卷积核为:

\begin{bmatrix} -1 & 0 & 1\\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix}

                      垂直方向上的卷积核为:

\begin{bmatrix} -1 & -2 & -1\\ 0 & 0 & 0\\ 1 & 2 & 1 \end{bmatrix}

                    

        3)物理应用

             a)边缘检测:一般来说,物体的边缘通常对应着像素值快速变化,因此可以通过梯度的方式来确定图中的边缘位置。

             b)纹理分析:纹理丰富的区域,像素值变化频繁,梯度值也会相应较大且分布较为复杂。通过分析梯度的统计特性,如均值、方差、直方图等,可以对图像的纹理特征进行描述和分类,从而实现纹理分析和识别。

             c)图像锐化:通过增强图像的梯度信息,来时图像中的边缘和细节更加突出。

        4)示例:一般使用梯度的应用过程如下(以使用图像分割为例)

             a)图像预处理:首先,使用滤波对图像去噪

             b)计算梯度:对每个像素计算水平、垂直或斜梯度

             c)阈值化:设定一个背景阈值,当梯度小于这个阈值,判定为背景,当梯度大于这个阈值,判定为前景。

             d)分割结果:根据阈值化后的结果,将每个像素分配到相应的物体类别中,从而实现图像分割。


http://www.kler.cn/a/464857.html

相关文章:

  • MBox20边缘计算网关助力各种数字化升级
  • windows C#-字符串和字符串字面量(四)
  • 【运维专题】大数据面试笔试宝典之大数据运维面试(一)
  • 多个DataV遍历生成
  • 【前端】Vue 3.5的SSR渲染优化与Lazy Hydration
  • WebRTC线程的启动与运行
  • 利用 NineData 实现 PostgreSQL 到 Kafka 的高效数据同步
  • Vue3 + ElementPlus动态合并数据相同的单元格(超级详细版)
  • C++软件设计模式之观察者模式
  • 服务端错误的处理和web安全检测
  • 【Yarn】通过JMX采集yarn相关指标的Flink任务核心逻辑
  • 【每日学点鸿蒙知识】一键登录、包资源分析工具、har包版本冲突、系统相册等
  • 常用的mac软件下载地址
  • torch.nn.Embedding模块介绍
  • gesp(C++一级)(14)洛谷:B4001:[GESP202406 一级] 立方数
  • 数据集的处理:将Storystream的数据集处理为可训练的格式
  • 服务器上会话存储项目
  • 在群晖上搭建PlaylistDL音乐下载器
  • 了解行处理工具:grep 、cut 、sort、uniq 、tee 、diff 、paste 、tr
  • Generative Feature Replay For Class-Incremental Learning 中文版