语言:C++
环境:vs2019
在我们拍照中,图像可能会不清晰,采集中未突出所需部分,有干扰(噪音、散斑、运动模糊等等)。所以我们要对图像进行处理,达到我们想要的,最清晰的效果。对于图像增强,有很多发方法,我们没有一种方法能解决所有的图片。所以什么情况下用什么样的方法,需要通过实验的方法,来确定方法的可行性,判断这个方法对的可行性,是我们人。
改善降质图像的方法:
图像增强:
对于图像增强,不一定完全逼近原图像,只需要对自己感兴趣的部分变量或者对比度拉伸。
所以图像增强可以不考虑降低图像质量的原因,关系有用的信息,抑制次要部分、去干扰,增强对比度。
恢复技术:
是尽可能逼近原始图像,能和原始图像一样;
所以恢复技术是设法补偿降低质量的原因,至于是什么原因,要建个模型尽可能逼近原图像。
图像增强是一个大范围,有很多的增强方法,在以后的笔记中我们会介绍很多增强方法(到时候有时间的话尽可能的用代码实现);除了本章即将介绍的灰度变换技术,还有平滑技术、锐化技术、频域里面的图像增强技术(高通滤波,低通滤波,带通滤波,带阻滤波)等等。
图像增强只是图像预处理阶段,预处理完之后,我们需要从图像中获取,我们想要的信息指标(比如,面积、周长、形状)。不是图像分析理解识别阶段,只是把图像增强了。
之前文章中介绍的是几何变换,不改变像素的颜色,而灰度变换是改变像素中的颜色,有可能比原来值大,也有可能比原来值小。
灰度变换是对点逐点运动,我们引入一个概念:
点运算:输入图像为f(x,y),输出图像为g(x,y),那么点运算可以写成g(x,y)= T[f(x,y)],这个公式描述了输入与输出值之间的转换关系。
这种关系,有很多:比如“直方图的均衡化法、取对数法、指数法、线程变换法等等”就是为了增强颜色。
g(x,y)= T[f(x,y)]我们可以将灰度变换分为先行变换和非线性变换。
线性变换:
输入和输出按照线性关系来放大或缩小
g(x,y)= T[f(x,y)] = a( f(x,y))+ b
当系数a > 1时,输出的值是增大;
当系数a < 1时,输出的值是减小的;
当系数a = 1,b ≠ 0,使所有的像素的灰度值上移或下移,使得整个图像更暗或者更亮;
当系数a = 1,b = 0时,输入、输出图像相同;
当系数a < 0 时,暗区域将变量,亮区域将变暗;
像素翻转:
g(x,y)= 255 - f(x,y)
如公式,是将图像的像素值翻转;
如果我们将感兴趣的目标突出出来,我们可以进行分段变换先行变换;
非线性变换:
输入输出之间按照非线性变换;
对数变换:
对原图像的动态范围进行压缩;右下图可以看出,当值输入值越大,输出值越小,当输入值越小,输入值越大。
g = c log(1 + f);
注意:这里公式中为什么加1,是因为零是没有对数的。
![176e6fb4c522c9c85e92c3d0b33d75d7.png](https://i-blog.csdnimg.cn/blog_migrate/890fce5d8ed0c42855569afc097a14c4.jpeg)
指数变换:
![b98ccd75ae45873c4b953bde838fffca.png](https://i-blog.csdnimg.cn/blog_migrate/2d0bf9f78c81fd805a9c6618bb8a8af6.jpeg)
输入越大,输出越大;输入越小,输出越小;
还有一种变换方法:通过取域值的方法,对图像进行非线性变换。
以上介绍为简单的图像增强的常见的方法理论,具体实现会结合程序讲,后面会用代码实现。喜欢的话,可以关注,一起学习,一起进步。