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

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

1、文件格式

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

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

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

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

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

2、图像空间

(1)RGB

   红绿蓝三个颜色通道,是最常用的空间特征(因为显示器每一个像素是由3个的发光二极管发出红、绿、蓝三种颜色构成)。

(255,255,255):白色

(0,0,0):黑色

(255,0,0):纯红色

(255,255,0):纯黄色

(2)HSV

   H:色度(Hue,使用360度来表示颜色,如下图)、S:饱和度(Saturation,颜色接近光谱色的程度)、V:明度(Value,颜色的明亮程度)

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

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

(3)HSL

与HSV相似,H:色度(Hue)、S:饱和度(Saturation)、L:明度(Lightness)

HSV和HSL的区别:

  • HSV 中的 S 控制纯色中混入白色的量,值越大,白色越少,颜色越纯
  • HSV 中的 V 控制纯色中混入黑色的量,值越大,黑色越少,明度越高
  • HSL 中的 S 和黑白没有关系,饱和度不控制颜色中混入黑白的多少
  • HSL 中的 L 控制纯色中的混入的黑白两种颜色

也就是说HSV的饱和度是通过控制加入白色的多少来控制,亮度是由加入黑色的多少来控制,而HSL的饱和度和黑白色时没有关系的,亮度是通过调节黑白色的多少来控制。

参考文章:https://blog.csdn.net/wg4oma28/article/details/123622189

(4)YUV

多用于音视频合成领域,Y:明亮度(黑白灰度信息),U(Cb):蓝色色差分量,表示蓝色与亮度的差异,V(Cr):红色色差分量,表示红色与亮度的差异。

3、各颜色空间与RGB的转换关系

颜色空间 与RGB的转换公式
HSV

         max = max(R,G,B), min =  min(R,G,B)

         V = max

         S = \left\{\begin{matrix} 0 & & & if & max = 0 \\ \frac{max-min}{max} & & & & otherwise \end{matrix}\right.

        H = \left\{\begin{matrix} 0 & &if &max=min & \\60^{0}\times (\frac{G-B}{max-min}))+0^{0} & &if &max=R & \\ 60^{0}\times (\frac{B-R}{max-min}))+120^{0} & &if &max=G & \\ 60^{0}\times (\frac{R-G}{max-min}))+240^{0} & &if &max=B & \end{matrix}\right.

        如果H<0, H = H + 360

HSL

         max = max(R,G,B), min =  min(R,G,B)

        

         L = \frac{max+min}{2}

        S = \left\{\begin{matrix} 0 & & & if & max = min \\ \frac{max-min}{1-|2L-1|} & & & & otherwise \end{matrix}\right.

        H = \left\{\begin{matrix} 0 & &if &max=min & \\ 60^{0}\times (\frac{G-B}{max-min}))+0^{0} & &if &max=R & \\ 60^{0}\times (\frac{B-R}{max-min}))+120^{0} & &if &max=G & \\ 60^{0}\times (\frac{R-G}{max-min}))+240^{0} & &if &max=B & \end{matrix}\right.

        如果H<0, H = H + 360

YUV

        Y​ = 0.299R + 0.587G + 0.114B

        U = −0.147R − 0.289G + 0.436B

        V = 0.615R − 0.515G − 0.100B​

二、图像预处理

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)分割结果:根据阈值化后的结果,将每个像素分配到相应的物体类别中,从而实现图像分割。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐