传统图像处理算法


开局说一下个人对于图像的深度学习与传统处理方法的想法: 其实不存在什么谁取代谁,相辅相成
深度学习也许是图像处理未来的主流,但传统处理方法却是基础,你会发现当前很多深度学习的文章的往往改自传统处理方法,如:本质思想来源于非局部均值去噪的Non-local Neural Networks,如将导向滤波改成基于深度学习的方式Fast End-to-End Trainable Guided Filter

所以个人认为做图像处理这一块,一定不能只会深度学习,否则基础不牢,地动山摇。
这是研一那会做红外与可见光图像融合的课题时,碰到的传统图像处理方法,所以这一次给总结一下并且一边分享自己的一些稀奇古怪的想法哈哈哈。

形态学方法

腐蚀

腐蚀就是让黑色更多,白色更少,看起来就像吞噬
一个图像与核,核中有对应的我们需要感兴趣的形状。下面是十字形为例。
核在图像中滑动,然后观察被十字形覆盖的图像中是否有0,如果有,那就直接把图像对应这个核的中心置零。也就是变黑。所以腐蚀有消除孤立点,噪声的优点。
1、去除目标区域周围的小颗粒噪声
2、消除目标物之间细小的粘连,同时目标物的边界向内收缩

膨胀

膨胀就是让白色更多,黑色更少,看起来就像扩张
一个图像与核,核中有对应的我们需要感兴趣的形状。仍然以十字形为例。
核在图像中滑动,然后观察被十字形覆盖的图像中是否有1,如果有,那就直接把图像对应这个核的中心置1。也就是变白。所以腐蚀有消除孤立点,噪声的优点。
1、填补目标区域中的小空洞
2、合并目标物周围的背景点,是目标边界向外部扩张
3、增强一些信息

开运算

开运算 = 先腐蚀运算,再膨胀运算(看上去把细微连在一起的两块目标分开了)
消除小噪声点或小对象物,消除物体边界粘连的纤细点达到分离物体边界的作用。

闭运算

闭运算 = 先膨胀运算,再腐蚀运算(看上去将两个细微连接的图块封闭在一起)
填充目标内细小空洞,连接断开的邻近目标。可以保持物体面积大小基本不变。

顶帽

礼帽,是原始图像与进行开运算之后得到的图像的差。
用来分离比邻近点亮一些的斑块

黑帽

进行闭运算以后得到的图像与原图像的差。
黑帽运算用来分离比邻近点暗一些的斑块。

形态学梯度:

基本梯度是用膨胀后的图像减去腐蚀后的图像得到差值图像
用原图像减去腐蚀后的图像得到差值图像,称为图像的内部梯度
图像膨胀后的图像减去原来的图像得到的差值图像,称为图像的外部梯度。
中途插播一下RGB转换成灰度图的原理
以R、G、B为轴建立空间直角坐标系,则RGB图的每个象素的颜色可以用该三维空间的一个点来表示,而Gray图的每个象素的颜色可以用直线R=G=B上的一个点来表示。于是rgb转gray图的本质就是寻找一个三维空间到一维空间的映射,最容易想到的就是射影(即过rgb空间的一个点向直线R=G=B做垂线),事实上Matlab也是这样做的,输出的灰度图像是RGB三种颜色通道的加权和;
于是就有公式:Gray=0.299R+0.587G+0.114B;

边缘检测算子

在这里想分享一下个人对于卷积的理解:

卷积是内积。不过是一种局部内积。卷积其实是滤波器在信号上划窗运算。窗口内的数值会于滤波器的权重数值进行内积。具体来说,卷积是移动的内积。内积表示一个向量在另一个向量上面的投影,衡量了这两个向量之间的相关性,所以卷积其实就是卷积核在图像中寻找和它相关的矩阵,这也就是卷积能够提取到特征的数学原因,而至于卷积核的参数如何设置才能提取到对应的特征,这就是CNN训练的事情了。

Sobel算子:

属于一阶微分,因为图像属于离散的,所谓微分就是斜率就是两个数值之间的突变程度,所以我们离散的话就直接拿差分来近似就行。于是就有f(A)-f(B),所以就是一个向量[1,-1]
得到的只有一个数值,要放回图像中,要放到A还是B的位置上,所以为了方便处理,中间就加了个0,[1,0,-1]这也就是为什么卷积核都是奇数的原因。于是二维情况的卷积核
1,0,-1
1,0,-1
1,0,-1。
然后再因为我们这个卷积核中间是的点是最主要的,所以需要加大权重变

1,0,-1
2,0,-2
1,0,-1。
Sobal算子就是这样设计而来。

拉普拉斯算子

拉普拉斯是一种各向同性二阶微分算子。Laplace算子对孤立像素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声图象。存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波。所以,通常的分割算法都是把Laplacian算子和平滑算子结合起来生成一个新的模板。
从Sobel算子可知,在图像中到“边缘”部分,像素值通常出现”跳跃“或者较大的变化。因此这些极值点在求一阶导数时通常都为零。在求二阶导数时,极值点通常为0,因此可以以此检测图像的边缘,但是在图像的噪声部分同样会出现二阶导为0的情况,这也就是为什么拉普拉斯只适用于无噪声的图像。
在这里插入图片描述

Canny算子

写出canny边缘提取算法的原理
1、用高斯滤波器平滑图像;(图像去噪)
在这里插入图片描述

2. 用一阶偏导有限差分计算梯度幅值和方向;(特征增强)
在这里插入图片描述

3. 对梯度幅值进行非极大值抑制;(边缘检测)
寻找像素点局部最大值,将非极大值点所对应的灰度值置为0,这样可以剔除掉一大部分非边缘的点
注意下面
在这里插入图片描述

所以原先最简单的canny非极大值抑制时,采用了下面C去比较g1-g4。下面C的这条线代表梯度,与梯度垂直的才是边缘。也就是比较C的上面g1、g2。和C的下面g3、g4。就是边缘的两端。
在这里插入图片描述

但是带来的问题是g1-g4并不在梯度上面,所以不能准确反应出C就是最大值,于是采用插值的方法求出与C同一直线上的像素值也就是dTmp1和dTmp2。

4. 用双阈值算法检测和连接边缘。(形态学处理)
但是这个图像中因为没有应用任何阈值,还含有大量小梯度模值的点,也就是图中很暗的地方。下面,阈值要上场了。
设高阈值为A,低阈值为B。大于A的点就是真边缘,肯定保留。小于A大于B的点是弱边缘,后续看情况处理。小于B的点肯定删除。
对于弱边缘点,检测其8领域像素点,如果发现存在强边缘的,那么就可以保留,没有则删除。
因为加入弱边缘点是噪声的话,那么其应该是一个孤立点,周围不可能存在强边缘

霍夫变换

本质思想就是已知图像中这些形状的方程,然后这些方程上的点的参数是一样的,这样转换到参数空间时,肯定就会交于一点。然后我们判断参数空间中交于一点的参数方程越多,就说明图像中存在这个方程对应的形状。

直线方程:
y = ax+b,
当把a和b看做变量,y和x看做参数时,就转换到了参数空间。经过点(a,b)。显然在原坐标空间中的直线上的点,参数a和b是相同的,所以在参数空间中他们就都经过这个点,霍夫变换就是说从坐标空间转换到参数空间的这个过程。
具体实现,建立一个二维累加数组x轴可以是参数a,y轴是参数b,初始化为0。然后回到图像中,取出图像边缘点x,y。把a定下来,就可以求b。a和b回到二维累加数组中找对应的点,累加1。以此类推,最后就可以得到这个二维累加数组看看哪个坐标点最大,那么对应求出这个坐标点的x,y就是在一条直线上。
发一发牢骚: 本科做的智能车比赛,经常就会涉及到判断赛道类型,唉,只怪那会不懂得出来翻资料。完全可以考虑使用霍夫变换来识别赛道类型 比如:直道,环形。

直方图是什么

灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。
在这里插入图片描述

积分图

快速计算矩形区域中灰度值之和的一种算法,

图像去噪

非局部均值

一种空间域滤波,和高斯模糊、均值滤波类似,当前像素点的值时通过周围像素的加权平均得到。不同之处在于权值计算策略不同,也就是下面公式中w计算方式不同;

高斯是从距离上来加权,均值是直接平均加权,非局部均值是通过计算像素值相似性来加权(欧式距离) 高斯与均值都是各项同性的,非局部均值是各向异性的。
在这里插入图片描述

上边是一个搜索窗,x和y是邻域窗。每次在图像中全出一个方格做搜索窗,里面再定两个领域窗,固定搜索窗x在中心点,滑动窗y,计算相似性得出权重后用来更新领域窗x中的像素点。
之后的这种思想就被何凯明应用到了深度学习中的自注意力机制。
加速那就是使用积分图来加速计算距离那一块

导向滤波

该模型认为,某函数上一点与其邻近部分的点成线性关系,一个复杂的函数就可以用很多局部的线性函数来表示,当需要求该函数上某一点的值时,只需计算所有包含该点的线性函数的值并做平均即可。
我们可以认为图像是一个二维函数,而且没法写出解析表达式,因此我们假设该函数的输出与输入在一个二维窗口内满足线性关系,q是滤波图像,I是引导图像,p是输入图像。
在这里插入图片描述
之所以说具有边缘保持,可以看到左右两边求导相等(这个性质被用来精细化暗通道的透射率,还可以常用于一些权重图的精细化)。
在这里插入图片描述求出线性函数的系数,也就是线性回归,即希望拟合函数的输出值与真实值p之间的差距最小,也就是让下式最小
在这里插入图片描述
求得
在这里插入图片描述
其中,uk是I在窗口中的均值,σ2k是I在窗口中的方差,|w|是窗口中像素数量,pk是待滤波图像(输入图像)p在窗口中的均值。
当把导向滤波用作滤波器时有I=P,
当ε=0,则a=1,b=0。输入原封不动输出。
当ε>0,像素强度变化小(方差小),a近似1,b近似pk。则输出=输入的均值
当ε>0,像素强度变化大(方差大),a近似1,b近似pk。则输出=输入

双边滤波

双边滤波的核函数是空间域核与像素范围域核综合的结果:在图像的平坦区域,像素值变化很小,对应的像素范围域权重接近于1,此时空间权重起主要作用,相当于进行高斯模糊;在图像的边缘区域,像素值变化很大,像素范围域权重变大,从而保留可边缘信息。I是像素强度,x是像素距离。
像素强度差距大,I所在项就小,与x所在项抵消,加权小或不变。
像素强度差距小,I所在项就大,与x所在项相互促进,加权大,就模糊一些。
在这里插入图片描述
事实上,双边滤波的原理也用在条件随机场中,在DeeplabV1中出现的CRF里面的双边核。
你会发现深度学习与传统算法真的是相辅相成!!!

潜在低秩去噪

关于秩的,在这篇论文解读—一种新的红外可见光图像融合算法里面有提及
低秩矩阵恢复(LRMR)广泛用于图像处理用途图像恢复,比如去噪、去模糊等。一幅清晰的自然图像其数据矩阵往往是低秩或者近似低秩的,但存在随机幅值任意大但是分布稀疏的误差破坏了原有数据的低秩性。低秩矩阵恢复是将退化图像看做一组低维数据加上噪声形成的,因此退化前的数据就可以通过低秩矩阵来逼近。
图像的低秩性转化成数学模型就是
数据集D矩阵表示成字典矩阵B下的线性组合即D=BZ,并且希望Z是低秩的
min rank(Z) s.t. D = BZ,核范数就是rank的近似,于是问题可以转化为
min ||Z||* s.t. D = BZ,当把数据集D本身作为字典时
min ||Z||* s.t. D = BD,考虑噪声,
min ||Z||* + λ ||E|| s.t. D = DZ+E
所以求解上面的最小值,即可获得Z,然后可获得去噪后的图像D。
具体求解可看迭代阈值法
稀疏表示也是将数据集矩阵表示成字典的线性组合,但是不同的是稀疏表示希望系数是稀疏的。

四大天王之显著性检测

LC

每个像素的显著性值是其和图像中其他的所有像素的某个距离的总和,
在这里插入图片描述

这个距离就是灰度值差距,我们会发现这里面有些灰度差距虽然不是同一对像素点,但是差距是一样的,所以可以使用灰度直方图来优化,统计整幅图像像素值落在[0,255]之间的各个值的频率,然后转成式子:
在这里插入图片描述

HC

Lab空间中的欧氏距离。
该方法使用了颜色特征,一个像素的显著值是通过与图像中所有其他像素色差来定义的:跟LC的方法很像,只是这是在Lab空间,且后面进行了量化与平滑。如下方程:
在这里插入图片描述
其中D(Ik,Ii)是空间Lab中两个像素之间的颜色距离。
使用直方图加速与量化。
直方图加速的原理与LC一样,不同的是加入了量化,将颜色量化成12个通道,相近的颜色就变为同一数值。但是量化之后,在12个值之间切换时会出现突变,生硬的噪声,所以需要平滑一下。
在这里插入图片描述关于Lab空间
在这里插入图片描述

FT

同样在Lab空间中,但看的是图像中每一个像素点与图像整体均值的欧式距离。
1、图像进行高斯平滑
2、转换到Lab空间
3、计算整个图像Lab的均值
4、遍历图像所有像素,计算每个像素Lab与均值的欧氏距离,得到显著图
5、归一化,每个像素显著值/整个图像最大显著图。

AC

FT是全局的,AC是局部多尺度的。
1、图像进行高斯平滑
2、转换到Lab空间
3、遍历图像,每一个像素点以该点为中心,求取h/8,h/4,h/2的范围内的均值,然后计算与该点的欧氏距离。
4、数据直接相加即可。
5、归一化

图像增强

Retinex增强

基本思想:人眼感知物体的亮度取决于环境的照明和物体表面对照射光的反射。
I(x,y) = L(x,y)*R(x,y)。
I代表我们看到的图像,L是环境光的照射,R是目标物体的反射
对上述取对数,Log[R(x,y)] = Log[I(x,y)]-Log[L(x,y)]。I是已知的,L可通过对I进行高斯模糊得到。
SSR单尺度的流程
在这里插入图片描述
MSR多尺度的流程
使用不同的高斯模糊尺度,得到不同的Log[R(x,y)],加权平均
MSRCR带颜色恢复的
主要是对Log[R(x,y)]进行处理
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值