一. 图像的基本概念
像素:一张图片在不停的放大到再也无法放大的时候,呈现在我们眼前的是一个个小的颜色块,这种带有颜色的小方块就可以被称为像素
格式:根据图像编解码算法的不同,我们经常可以看见图像文件有.jpg,.png,.bmp等不同的后缀
位深:在计算机中,为每个图像的像素分配的比特数。比如位深为8位,则每个像素的值范围为[0, 255]
颜色通道:在RGB颜色模型中,一个像素占有三个颜色通道,分别为R通道,G通道,B通道。灰度图的存储是一个二维数组的话,那么一张二维彩色图片就可以看成由三个二维数组构成。
灰度图:又称灰阶图,白色与黑色之间按对数关系分为若干等级,称为灰度,灰度分为[0, 255]共256阶,0表示纯黑,255表示纯白
二. 用波来描述图像
在数字图像处理过程中,Lena是一张被广泛使用的标准图片。为什么用这幅图?是因为这图的各个频段的能量都很丰富:既有低频(光滑的皮肤),也有高频(帽子上的羽毛),很适合来验证各种算法。上图:
在这张400x400的彩色照片中,每个像素都可以用RGBA四个通道来描述,每个通道的范围为[0, 255],黑色为[0, 0, 0, 255],白色为[255, 255, 255, 255]
如果用每一行上所有像素值的R,G,B值画三条线,Lena图的第一行结果如下图所示:
// 代码采用python3.7 + opencv + matplotlib
// idea采用PyCharm + Anaconda
从曲线图上可以看到有四个地方波动剧烈,对照原图,可以发现波动剧烈的地方正是图像色彩突变的地方
这说明波动和图像是紧密联系的,图像可以使用各种色彩波的叠加来描述,波动大就表示色彩变化剧烈,波动小就表示色彩平滑
换一张图片再次测试一下,天空图的第一行RGB色彩曲线图为:
从原图中我们可以看到,第一行都是蓝色天空,整行的像素颜色通道的值曲线很平滑
如果我们取一半高度的这一行来看曲线图,可以知道必定有两次剧变的地方
三. 图像的频域表达
从上面的测试可以知道,色彩的波动可以用来描述图像信息,波动大,则图像色彩变化剧烈,波动小,则平滑过渡
频率是描述波动快慢的指标,单位时间内波动次数多,则频率高,反之则低
在这张天空背景的图片中,
如果按照频率进行划分的话,可以分为两个部分:
背景--天空:都是蓝色值,色值波动很小,振幅长,频率低; 前景--鸟:跟背景对比色差大,在Y轴上波动大,振幅短,频率高;
以合适的频率为分割线,我们很容易就能将背景和前景进行分割开来
在数字信号处理领域,要将时域信号转化为频域信号,需要用到大名鼎鼎的傅立叶变换。
傅立叶变换:将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合
如上图所示,黑色波形(时域信号)和所有的彩色波形(频域信号)描述的信息是等量的。可以看到在频域中,如果需要分割或者剔除某个频率的信号是很容的事情
图像中将像素数据转化为频率数据也是可以运用离散傅立叶变换的,不过由于傅立叶变换涉及到复数操作,较为复杂,尽管FFT可以提高运算速度,但是在实时图像编码的场景下还是非常不方便,所以在数字图像处理技术中,通常使用DCT离散余弦变换(如:在静止图像编码标准JPEG中,在运动图像编码标准MJPEG和MPEG的各个标准中都使用了DCT)
四. 常用滤波器
低频信号表示图像色彩过渡平滑,当采用低通滤波器时,有利于图像去噪和模糊图像;
高频信号表示图像色彩变换剧烈,当采用高通滤波器时,有利于找到图像边界;
OpenCV提供了很多滤波器的实现,比如:中值滤波,双边滤波,均值滤波,高斯模糊等
下面的这个网站可以将滤波器拖到图像上,产生滤波效果,感兴趣的小伙伴可以尝试一下
https://fellipe.com/demos/lena-js/
例如对lena运用高通滤波,效果如下:
参考资料
1.https://www.cnblogs.com/hanxiaosheng/p/9566320.html
2.https://blog.csdn.net/u012819339/article/details/82222008
3.https://www.bilibili.com/video/av19141078?from=search&seid=11648598076536911524
4.https://www.jianshu.com/p/9aea8db59572
5.http://www.ruanyifeng.com/blog/2017/12/image-and-wave-filters.html