一、图像信号分析基础

灰度与灰度级

每个像素的取值为灰度,所有灰度的种类成为灰度级。通常有2、8、256、65536灰度级。

色彩包括亮度、色调、饱和度。

邻域与邻接

  • 四邻域:上下左右,四个像素相邻。
  • 八邻域:上下左右,斜边八像素相邻。
  • D邻域:只有斜边的四个像素相邻。
  • m-连接:两个像素的四邻域没有相交且是D邻域或八邻域连接则为m连接(就是只有斜着的两个像素)

边缘线

对于不同的联通方式会有不同的边缘线,比如四联通和八联通就不一样。求的都是最长的边缘线。

对于一个边缘线可以用链码来描述,按逆时针方向分别标注为0~7,七个方向。对链码进行差分则得到的是方向的相对位置,所以对平移、旋转变换很鲁棒。注意,差分是当前点减去前一个点。

卷积运算

这里都默认是Same,所以要在外面填充0,然后需要注意的是模板要旋转180度。

二、图像增强与恢复

直方图均衡化

通过修改像素种类的分布,使图片对比度增加,注意映射函数是向上取整。

图像平滑

空域平滑

  • 平滑模板
  • 多帧图片求平均

频域平滑

  • 低通滤波
  • 高通滤波

中值滤波

个人觉得这应该算是空域平滑的平滑模板类里面。

也就是分不同的平滑模板,但是只是求中值而不是平均值。

图像锐化

感觉和求边缘很相似,都是求梯度这种,也是拉普拉斯算子之类的。拉普拉斯模板就是拉普拉斯算子求出来后再加原图片,所以中间都会比拉普拉斯算子多1。

图像复原

类似图像超分,先对图像进行退化再学习一个函数对图像进行复原,如果无约束就是一个梯度下降,有约束加一个拉格朗日算子。

图像退化分为:

  • 简单退化:直接图像加噪声
  • 通用退化:退化函数+噪声
  • 变形退化:也是退化函数+噪声
  • 频域退化:频域退化函数+频域噪声

现在gan都是用类通用退化,用不同的退化函数多次退化但是不加噪声,因为退化函数本身就会携带噪声进去,比如jpeg压缩会带有伪影。使用多次退化函数也能让模型学习的函数不是简单的逆函数。

三、图像边缘检测

图像边缘是一个区域的终结到另一个区域的开始,是图像局部特征不连续的表现,由导数可以很明显的判断。

一阶导数

不同方法就是计算水平梯度和垂直梯度的区别。

  • 正交梯度:

    对图片分别求水平梯度和垂直梯度,然后按不同的梯度幅值规则,合称为梯度图像,然后设定阈值对图片进行分割。

  • robert算子:

    对斜方向计算梯度,剩下步骤与正交梯度相同。但是对噪声更敏感

  • prewitt算子:使用了平均,能减少噪声的影响,但是会使边缘也更模糊

  • sobel算子:使用加权平均,比prewitt边缘更清晰

二阶导数

  • 拉普拉斯算子:对独立点和线效果很好,但是对噪声不耐受,所以一般先平滑处理,有四近邻模板,八近邻模板等。

  • LoG算子(高斯拉普拉斯算子):实际上就是先高斯滤波平滑处理后再使用拉普拉斯算子。

  • canny算子:

    先高斯模糊,再计算梯度,采用非极大值抑制删掉不需要的梯度(将当前像素点与其梯度方向的像素点梯度对比,最大才保留),然后用双阈值法连接边缘(阈值高部分轮廓丢失,阈值低有假边缘,消失轮廓就用低阈值的边缘填充更有效)

​ 拉普拉斯算子增强了图像中的灰度不连续边缘,而减弱了对应图像中灰度值缓慢变化区域的对比度,将这样的结果叠加到原始图像上就能得到锐化后的图像。

霍夫变换

挺麻烦的,基本上就是将点通过映射到极坐标系确定线。广义霍夫变换还能检测物体位置(利用模板边缘和目标图片)。

四、图像分割

基于阈值分割

都是比较针对于单一目标,对于多目标难以奏效。

  • 直方图均值法:

    对于双峰直方图,选取峰值间的最低点作为分割阈值,对于多峰灰度直方图,分别选取峰值最低点作为分割阈值。

  • 最佳阈值法:

    类似最小错误率的贝叶斯决策,通过求两个分布的交点来求出阈值。

  • 均值迭代法:

    初始选取双峰的最低点作为分割阈值,然后每次选择两个区域的均值再求平均得到新的阈值,直至阈值不再改变。

  • 类间方差法(OTSU)阈值分割:

    和LDA类似,要求类间方差大,类内方差小,遍历一个阈值T,分别计算两个区域的均值,然后在计算类间加权方差,求出最大方差对应的T。

基于区域的分割

  • 区域生长法:

    遍历每一个像素与其邻域,如果规定的距离小于规定的阈值则合并,否则不合并。

    对于不同规定的距离,分为不同的生长法:简单生长法(当前点与邻域像素值求abs),质心生长法(当前点与邻域区域平均值求abs),混合生长法(两个区域间的平均值求abs)

  • 分裂合并法:

    ​ 利用均方差MSE,可计算区域间和区域内的loss,当一个区域间的loss大于阈值,则说明该区域不是一类,分割为4个区域,当区域间的loss小于阈值,说明区域相似,合并为一个区域。

    ​ 初始将图片分割为四个区域,然后遍历四个区域进行分裂合并(分裂和合并是互不影响的)。并且不同规定的最小分裂块对结果也不同。

分水岭分割

就是用洪水填充得到最后的边界,边界像素宽度必定是为1。计算简单但是容易过度分割,产生细小的区域。

五、形态学数字图像处理

  • 腐蚀:

    给定一个模板B,遍历原图A每一个像素,与模板B匹配,当B中的全部1都在A中也为1则新像素为1。与卷积相同,新图大小会改变,所以一般在外围填充0,二值图表现为图像变暗,小白点消失。

  • 膨胀:

    给定一个模板B,遍历原图A每一个像素,与模板B匹配,当B中存在1在A中也为1则新像素为1。与腐蚀相同,新图大小会改变,所以一般在外围填充0,二值图表现为图像变亮,小黑点消失。

  • 开操作:

    先对原图进行腐蚀,再膨胀的操作称为开操作,能够去掉噪声,二值图中表现为小白点消失,暗效果不变化。

    $A\circ B=(A\ominus B)\oplus B$。

  • 闭操作:

    先对原图进行膨胀再腐蚀的操作称为闭操作,能够去掉细小空洞,填补断裂,二值图中表现为小黑点消失,亮效果不变化。

    $A\bullet B=(A\oplus B)\ominus B$

  • 击中击不中变换:寻找形状的位置,B为需要找的形状,则$A*B=(A\ominus B)\and(A^C\ominus B^C) $,注意这里$B^C$是对一个任意大于B的窗口求补集。

应用:

  • 边界提取:A与AB腐蚀相减,$A-A\ominus B$。

  • 区域填充:A的补中所有区域像素分别与B膨胀得到的结果。

  • 细化:用于提取骨架特征,使用八个方向的模板B分别对A求击中击不中变换求补集再与A求交集。

    $A\otimes B=A\and (A*B)^C \quad B={B0,B1…B7} $