附加题Part2:图像处理相关概念

附加题Part2: 图像处理相关概念


一、颜⾊模式(color model)

1、RGB:红绿蓝

  • 眼熟吧,在手势识别项目咱就遇到过
  • 物理光的颜色模型,光的三原色,基于黑色背景
  • 每个颜色通道的取值范围为 0 到 255,其中 0 表示没有该颜色的光,255 表示该颜色的最大亮度

2、CMYK:青、洋红、黄、黑

  • 用于印刷、绘画的颜色模型,基于在白色背景(如白纸)
  • 就是画画的时候,只需要用青色、洋红、黄色三种颜色就能够调出任何颜色
    将三种颜色的颜料等量混合时,就能得到黑色的颜料

3、HSV:色调(Hue)、饱和度(Saturation)和明度(Value)

  • 一种直观的颜色模型,基于…人类视觉感受
  • 色相:颜色在色轮上的位置,取值范围为0到360度
    3f471baafabc80926141e496f777a6b4.png
    饱和度:颜色的纯度或饱和度,取值范围为0到1

    亮度/明度:颜色的明亮程度,取值范围为0到1

    在openCV中的颜色范围定义区间

4、HSL:色相、饱和度、亮度

  • 其与HSV在字面意思是一致的

  • 在原理和表现上,HSL和HSL中的H(色相)完全一致,但二者的S(饱和度)不一样,L和V (明度)也不一样:
    HSV 中

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

二、图片与格式(Figure)

1、分辨率(resolution),位图(bitmap),图像深度(depth),通道(channel),像素(pixel),Alpha通道

1、分辨率(resolution)

  • 指图像中所包含的像素数量,通常以横向像素数与纵向像素数来表示
  • 分辨率越高,图像质量越好,但文件大小也越大
  • 通俗地讲:就是指水平方向像素数*垂直方向像素数
  • 随便打开一张图片的属性信息都能找到

2、位图(bitmap)

  • 也叫光栅图像,由二维的像素阵列组成的图像格式,与矢量图(可以去查一查哦)对应
    每个像素定义了图像中的一点,其颜色或灰度值决定该点的显示效果
  • 这个概念很简单,无需多言

3、图像深度(depth)

  • 也被称为位深,指每个像素的颜色或灰度值占用的比特数
  • 像素深度:存储每个像素所需要的比特数。假定存储每个像素需要8bit,则图像的像素深度为8
    图像深度:像素深度中实际用于存储图像的灰度或色彩所需要的比特位数
  • 对于手势识别项目中的(0,0,255)就解释得通了–相当于对于R、G、B中的每一项均是以8位进行存储的
  • 深度越高,能够表示的颜色或灰度级别就越多,图像的细节和精度也越高
  • 一种色彩8位是非常接近肉眼所能分辨的颜色梯度的,所以很常用(24bit色深已成为现时彩色扫描仪的最基本要求,最高的更已达至36bit或48 bit)

4、通道(channel)

  • 指每个像素中包含的颜色或灰度值的单独组成部分
  • RGB就是三通道,CMYK就是四通道,灰度图像就一个亮度通道

5、像素 (pixel)

  • 图像中最小的上下排列的点,图像处理及显示中的基本单元
  • 很简单,无需多言

6、Alpha通道

  • 透明度通道,指图像中每个像素的透明度值
  • 通常存储为像素的第四个分量,与 RGB 通道一起组成 ARGB 格式
  • eg1:一个使用每个像素16比特存储的位图
    每5个比特表示红绿蓝,最后一个比特是Alpha
    则Alpha只有0和1,表示要么透明、要么不透明
  • eg2:一个使用32个比特存储的位图
    每8个比特表示红绿蓝和阿尔法通道
    则Alpha可以表示256级的半透明度

7、位图在内存中的储存形式

  • OpenCV应该是用BGR格式将图片存储在内存中的,每个颜色占用8位(1字节)

  • 尝试用这个思路算了下上面图例的内存,理论上讲应该是

      215*244*3/1024=153.69140625
    

    不是应该是153KB吗,咋大了这门多?

  • 实际上:jpg格式的图片是经过压缩过的,所以并没有确定公式能计算出压缩后的存储内存

  • 使用OpenCV提供的函数转换图片格式时,函数将重新分配内存并更改像素的排列顺序,以适应新的格式

三、Edge detection的pipeline

tis:这里可以自己先查一查再继续哦,也可以顺带了解一下图像预处理的pipeline

1、关于pipeline

  • pipeline,中文直意为管线,意义等同于流水线
  • 就是一个作业过程,诸如Gpu渲染管线、深度学习模型框架的管线等等
  • 基础的深度学习的Pipeline主要包含了下述 5 个步骤
    • 数据读取
    • 数据预处理
    • 创建模型(具体到模型也有相应的Pipeline)
    • 评估模型结果
    • 模型调参

2、Edge detection的pipeline

  • Edge detection,即边缘检测,是图像处理中的重要一步
  • 以下是GPT给出的Edge detection的pipeline
    • 预处理:减少图像中的噪声
      步骤包括灰度化、平滑滤波和图像锐化等操作
    • 计算梯度:对预处理后的图像进行梯度计算,找到图像中的边缘位置
      常用的梯度算子包括Sobel、Prewitt和Canny等(就是梯度滤波器)
    • 非极大值抑制:用于细化边缘
      通过在梯度方向上比较像素值,保留局部极大值点,抑制其他非极大值点,从而得到更细的边缘
    • 双阈值化和边缘连接
      • 根据像素的梯度值,将图像分为强边缘、弱边缘和非边缘三个部分
      • 通过设定高阈值和低阈值来区分这些部分
      • 高阈值用于保留强边缘,低阈值用于保留可能的弱边缘
      • 通过连接强边缘上的弱边缘,形成闭合的边缘
    • 后处理:边缘填充或进一步边缘连接、边缘细化,以获得更准确的边缘检测结果

四、滤波(filtering)

(一)滤波是什么?

1、图像处理技术
  • 滤波:可以用于去除图像中的噪声、模糊图像、强化图像的边缘
  • 滤波器:一组权重值的矩阵,作用于图像的每个像素,根据周围像素的信息进行计算
  • 滤波器也就是卷积核
2、滤波器的粗略分类
  • 模糊化:去除图像噪声,平滑图像,包括均值模糊、中值模糊、高斯模糊、双边模糊等
  • 梯度滤波器:锐化边缘及边缘检测,包括Sobel、Prewitt和Canny等

(二)滤波器

1、模糊化(blur)—低通滤波器

tis:该部分可参考[真正搞懂均值模糊、中值模糊、高斯模糊、双边模糊]一文(https://www.pythonheidong.com/blog/article/134327/28172079273cc0f07581/)

(1)均值模糊

①本质上就是将卷积核覆盖区域求平均数后得到新数组
用例:cv2.blur(img, (3, 3), borderType=cv2.BORDER_CONSTANT)

输入:

[[1. 1. 1. 1. 1.],
 [2. 2. 2. 2. 2.],
 [3. 3. 3. 3. 3.],
 [4. 4. 4. 4. 4.],
 [5. 5. 5. 5. 5.]]

经过3*3的均值滤波器处理

[[1/9. 1/9. 1/9]
 [1/9. 1/9. 1/9]
 [1/9. 1/9. 1/9]]

处理后可得

[[0.67  1.  1.  1.  0.67],
 [1.33  2.  2.  2.  1.33],
 [2.    3.  3.  3.  2.  ],
 [2.67  4.  4.  4.  2.67],
 [2.    3.  3.  3.  2.  ]]
(2)中值模糊
  • 利用cv.BORDER_REPLICATE进行填充(这是默认的,不能改变!!)

  • 假如有

    [[1 1 3],
     [3 2 1],
     [1 1 3]]
    

    则进行填充

    (1) (1) (1) (3) (3)
    (1)  1   1   3  (3)
    (3)  3   2   1  (1)
    (1)  1   1   3  (3)
    (1) (1) (1) (3) (3)
    

    然后按照3*3的卷积核把周围的9个数进行排序,取出中间的数作为结果

    [[1 1 2],
     [1 1 2],
     [1 1 2]]
    
  • 函数用例:dst = cv2.medianBlur(img, 3)

(3)高斯滤波
  • 正态分布的密度函数(中心点在原点时)

    放到二维中

  • 内部处理过程
    • 需要给定σ的值,再将σ的值和每个点的坐标代入求值
      这里假定σ=1.5,则有

    • 权重总和为0.4787147
      如果只计算这9个点的加权平均,还必须让它们的权重之和等于1
      因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵

    • 权重矩阵与原矩阵相乘
      假设有矩阵

      [[14, 15, 16], 
       [24, 25, 26], 
       [34, 35, 36]]    
      

      则有

      得到

    • 最终将9个值加起来,即为中心点的高斯模糊后的值

  • 归一问题
    • 权重总值=1时–>不改变图像的亮度
      权重总值>1时–>图像偏亮
      权重总值<1时–>图像偏暗

    • 权重总值=0–>边缘检测核(可以把边缘转化为白色,非边缘转化为黑色)
      比如:

      -1  -1  -1
      -1   8  -1
      -1  -1  -1
      
    就有边缘检测作用(突出中间值)(虽然不是高斯模糊标准型)
(4)双边滤波
  • 简单来说就是带有边缘(设置了断崖)检测功能的高斯滤波
    但是实际上一点都不简单

  • 上图中(a)为输入,©为输出,(b)就是双边滤波器

  • 公式理解
    其中有

    • 对于除以Wp是比较好理解的,就是双边滤波器的归一操作(使权重和为1)
    • 对于Gσs和Gσr公式的理解

      • 公式中:
        I(m,n):在(m,n)处的像素值
        i,j:中心点的横纵坐标
      • Gσs很好理解,处理的是各像素点与中心点的空间域问题
      • Gσr为像素值判定,处理的是与中间点的像素域问题
    • 求和:
      将像素值和空间域计算结果和像素域结果相乘
      最后将这些结果相加起来,得到滤波算法公式的分子
  • 参数选取

    • 空间域sigma选取:通常为k=6 * sigma+1
      离中心点3 *sigma大小之外的系数与中点的系数只比非常小,可以认为此之外的点与中心点没有任何联系

    • 值域sigma选取:

      • Sigma越大,边缘越模糊
        极限情况为simga无穷大,值域系数近似相等
        与高斯模板(空间域模板)相乘后可认为等效于高斯滤波。
      • Sigma越小,边缘越清晰
        极限情况为simga无限接近0
        与高斯模板(空间域模板)相乘后,可近似为系数皆相等,等效于源图像。
2、梯度滤波器(边缘检测)—高通滤波器

(1)关于边缘检测
  • 基于搜索
    寻找图像一阶导数中的最大值来检测边界
    通常采用梯度的方向,并利用此方向找到局部梯度模的最大值
    代表算法:Sobel算子/Scharr算子
  • 基于零穿越
    寻找二阶导数零穿越来寻找边界(零点就是变化最大的点,即边缘点)
    代表算法:Laplace算子
(2)三大基础算子

①从Prewitt算子讲起

  • 推导过程(核心:后-前)

    即有Prewitt算子如下:
    x方向卷积核

    -1  0  1
    -1  0  1
    -1  0  1
    

    y方向卷积核

    -1  -1  -1
    0   0   0
    1   1   1
    

②Sobel算子(基于搜索)

  • 在Prewitt算子基础上加上权值,结合高斯平滑和微分求导

    以上即为Sobel算子

③Scharr算子(基于搜索)

  • Sobel在ksize=3的优化版本
  • Sobel在ksize=3时可能产生比较明显的误差,此时用Scharr算子更好
  • 跟sobel一样的速度,但结果更精确;但仅作用于大小为3的内核

④Laplace算子(基于零穿越)

  • 采用二阶微分,关心的是图像灰度的突变而不强调灰度缓慢变化的区域
  • 具有旋转不变性
    • 一阶微分里,我们是用|dx|+|dy|来近似一个点的梯度
    • 当图像旋转一个角度时,这个值就变化了

掌握了相关概念后,接下来就是图像处理的基本操作了,欢迎继续关注附加题part3ヾ(◍°∇°◍)ノ゙

特别声明:以上的图片部分来自于网络,感谢CSDN、知乎等平台上各位博主的分享,本文用作交流学习予以引用,在此一并表示感谢!

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值