本笔记参考crazy_Bingo
基础:
图像处理都是用卷积矩阵对图像卷积计算,如3X3 的矩阵对640 X 480分辨率的图像卷积,最终会得到638 X 478 的图像。卷积过程是这样的:
RGB565 - RGB888
一、中值滤波 : 找出矩阵中的最中间值作为像素点
二、均值滤波:找出矩阵中的平均值作为像素点
三、腐蚀运算
腐蚀是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体,
腐蚀的算法:用3x3的结构元素,扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作如果都为1,结果图像的该像素为1。否则为0。结果:使二值图像减小一圈,
粗略的说,腐蚀可以使目标区域范围“变小”,其实质造成图像的边界收缩,可以用来消除小且无意义的目标物。
E(X)={a| Ba X}=X B
该式子表示用结构B腐蚀A,需要注意的是B中需要定义一个原点,【而B的移动的过程与卷积核移动的过程一致,同卷积核与图像有重叠之后再计算一样】当B的原点平移到图像A的像元(x,y)时,如果B在(x,y)处,完全被包含在图像A重叠的区域,(也就是B中为1的元素位置上对应的A图像值全部也为1)则将输出图像对应的像元(x,y)赋值为1,否则赋值为0。
演示图:
实质上在实现的过程中没有结构元素,而是扫描矩阵的与运算
四、膨胀运算
膨胀会使目标区域范围“变大”,将于目标区域接触的背景点合并到该目标物中,使目标边界向外部扩张。作用就是可以用来填补目标区域中某些空洞以及消除包含在目标区域中的小颗粒噪声。
五、高斯运算
高斯滤波是一种线性平滑滤波
,适用于消除高斯噪声,广泛应用于图像处理的减噪过程
通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程
,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到
高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
对应均值滤波和方框滤波来说,其邻域内每个像素的权重是相等的。而在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,在此基础上计算邻域内各个像素值不同权重的和。
常用卷积核
运算过程:
六、对比度增强
对比度增强是图像增强中常用的技术之一,旨在增强图像中不同物体和区域之间的差异,使其更具视觉效果和可识别性。通过调整图像的亮度范围,对比度增强可以使图像中的暗部更加暗,亮部更加亮,从而提高图像的动态范围和视觉效果
下面列出了实现对比度增强的一些常见方法:
1、直方图均衡化:直方图均衡化是一种通过重新分配图像像素值来扩展图像亮度范围的方法。该方法通过增加像素值的频率来拉伸直方图,使得整个亮度范围得到充分利用,从而增强对比度。
2、自适应直方图均衡化:自适应直方图均衡化是对比度增强的改进方法,它将图像分成小的块,然后对每个块进行直方图均衡化。这样可以避免在均衡化过程中产生过度增强的噪声,并且能够在局部区域中保留更多的细节。
3、对比度拉伸:对比度拉伸是通过线性映射将图像像素值映射到更广的亮度范围来增强对比度。它可以通过调整图像的最小和最大亮度值来实现。这种方法简单易懂,但可能会导致细节的丢失。
4、非线性对比度增强:非线性对比度增强方法根据像素值的分布特征对图像进行调整。常见的方法包括伽马校正、对数变换和指数变换等。这些方法通过非线性变换可以更灵活地调整图像的对比度
简单来说,一般只是将像素值进行线性分配,(可以通过 查找表的方法)如下:
横坐标为像素值0-255,蓝色线为更改后的像素值大小(对应纵坐标)
七、gama矫正
实现:通过查找表的方法对原像素值做出更改
蓝色为原像素值,灰色为gama矫正后的像素值
伽马校正:
伽马校正可以用来调整图像的亮度,公式为 I = I^gamma。
当gamma>1,高光部分动态范围被压缩,低光部分动态范围被扩展(使低光部分的细节可以看清),图像整体变暗;
当gamma<1,高光部分被扩展,低光部分被压缩,图像整体变亮。
八、直方图均衡
对于一张灰度图(即常见的只有一个通道,像素值介于0~255的黑白图),可以通过遍历每个像素的像素值,统计其中像素值等于0,等于1,等于2,等于3···一直到等于255的像素个数,然后把像素值作为横坐标,像素个数作为纵坐标,就可以绘制一张像素值分布图,该图即为对应灰度图的直方图。如下图所示
很多时候相机拍出的底片就是整体偏白,或者整体偏暗,这时就需要对图像进行调整,直方图均衡化就是其中调整的算法之一,通过直方图均衡化,把偏白或黑的直方图调整的跟所示的一样,让0到255的像素值都有个数,那么图像的整体画面就自然清晰,并且明暗错落有致。
如何进行直方图均衡:
1、把示例图的直方图中的个数从0到255一点点累加,比如从0到255访问每一个像素值,当访问到0时,纵坐标记录像素值等于0的个数,当访问到像素值1时,纵坐标就记录像素值等于0和像素值等于1的个数之和,当访问到像素值2时,纵坐标就记录像素值依次等于0,1,2的个数之和···依次类推,一直到像素值等于255时,纵坐标记录所有的像素个数,这个时候我们就得到对应的累计直方图,如下图所示:
2、把累计直方图中的纵坐标都除以像素个数(40000)(归1化),得到了图像的累计概率分布图
当得到累计概率分布图时,可以发现其分布也是不均衡的,看那个横坐标,从像素值0开始一直到像素值等于150多的时候,纵坐标才有概率值,如果想把图像调整均衡,肯定希望像素值等于0的时候就有概率值。这时,我们可能就想到要是把150多的像素值映射成0,也就是把像素值等于150多的概率(或者个数)直接给到像素值等于0那里该多好呀!没错,如果有个映射函数,让像素值进行映射,比如把上图的从150开始到255的概率分布,直接映射成0到255,那么就大功告成了。
3、 怎么得到这个映射函数呢?这时我们只需将累计概率分布图的纵坐标全部乘以255即可得到如下图的映射图:
上图中横坐标就是原图像素值,纵坐标就是结果图的像素值。横坐标范围是0到255,纵坐标的范围也是0到255,每一个横坐标的值都有一个纵坐标的值,它们是一一对应的。这样我们在遍历原图的时候,只需要按照上面的映射关系,把原图的像素值换成结果图的像素值就可以了。比如当访问一个像素是200时,只需要按照上图查看,横坐标是200,对应纵坐标的值是多少,就转换成这个值,就得到了直方图均衡化后的图了。
实现:
为了将原图像的亮度范围进行扩展, 需要一个映射函数, 将原图像的像素值均衡映射到新直方图中, 这个映射函数有两个条件:
不能打乱原有的像素值大小顺序, 映射后亮、 暗的大小关系不能改变;
映射后必须在原有的范围内,即像素映射函数的值域应在0和255之间;
综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数
九、图像旋转
采用旋转坐标计算