![846463fb2636a43049927575815f610a.png](https://i-blog.csdnimg.cn/blog_migrate/6b15a39c5341c2dbefceab778815c8ba.png)
雷总说:愿你归来仍是少年。
既然本章主要是讨论灰度变换和空间滤波的。我们既然知道了什么是灰度变换,那么让我们来看一看怎么做到他们。
2.1 图像翻转
图像翻转,其实我们在第二章的例子中已经讲到过,并且用OpenCV也实现过。它的实现原理非常简单,其实就是拿最大的灰度级
示例:
![db0c851dd78c90c16878520f986c4ddf.png](https://i-blog.csdnimg.cn/blog_migrate/aa96bf33932377ed8f5e700e7f7f830a.jpeg)
2.2 对数变换
对数变换我们在OpenCV的DFT章节也是用过,其目的是为了将计算的大数据映射到可显示的范围内。它的通用公式:
![e1ef396c30150b34facc581294238627.png](https://i-blog.csdnimg.cn/blog_migrate/394318dcd47a7490b5b56d1f31424c21.jpeg)
由上图可以看出来,对数变换中可以把输入的较窄的范围映射到输出比较宽的范围中,也可以把输入较宽的范围映射到输出较窄的范围中。
3.3 幂律(伽马)变换
幂律变换是对数变换的反变换,所以他的作用可以认为跟对数变换相似,都是输入的窄域和宽域与输出的宽域和窄域的对应。当然,如果r=1的时候就是系数为C的线性变换。
![33ad2a1c487191629bbff13e0e36050f.png](https://i-blog.csdnimg.cn/blog_migrate/b244777d9a7520ea3b630cb94eeea32b.jpeg)
我们什么时候会用到幂律变换呢?如幂律变换的指数变量伽马所示,幂律变换也被称为伽马校正,是一种在日常生活中非常常见的变换。
举个例子,比如阴极射线管(CRT)设备又一个灰度-电压响应,该响应是一个指数变换范围约为1.8 ~ 2.5的幂函数。可以参考上图,它的曲线在线性变换的下方,显示输出就会比输入要小(暗)。那么如果直接用该CRT用来显示一个简单的灰度渐变图像,跟预期一样就会得到一幅输出比输入要暗的图像。补偿的方案也很简单,就是只要对输入的图像做一个预处理,即进行
![73b459d40981cb2314f170d3b41c1f8b.png](https://i-blog.csdnimg.cn/blog_migrate/14388af7d9af97ed7f40774f7c15bcfa.jpeg)
在如今LED为主的显示设备中,他们的显示曲线同样也不是线性的,伽马校正一样重要,其原理是一致的,而且现在几乎所有的显示器都预设了伽马校正的程序。
- 幂律变换做对比度增强
![a00b58f43a017d3f572aa194d82c4e77.png](https://i-blog.csdnimg.cn/blog_migrate/830f0463064a83e0fde3ea06a86dba44.jpeg)
这种结果也很容易理解,一些人眼无法辨识的细微差距,可以通过幂函数在输出的图像中放大差异,显示出来。
![b260deb37b85fe2abb39497c60d4b777.png](https://i-blog.csdnimg.cn/blog_migrate/b9f56fdd8aaca82442291876e7595b33.jpeg)
同样道理,既然可以做到对比度的增强,也可以通过幂律大于1的函数来做到减小输出对比度的目的,这样看到的照片会明显偏暗(在线性变换的下方)。
2.4 分段线性变换
这个也很容易理解,有些照片,我们不希望是全局的变换,希望对局部的数据内容进行特殊变换,这样就可以使用分段线性变换。
- 对比度拉伸
对比度拉伸是扩展图像灰度级动态范围的处理,因此,它可以跨越记录介质和显示装置的全部灰度范围。
官话都是概括给本来就懂的人的。我们还是举例理解:如下图在一段变换函数的中间,截取输入r1 到 r2两个点,他们对应的输出为s1 和 s2。那么(r1, s1)到(r2, s2)两个点之间的函数曲线就可以是任意形式,如果斜率变高,可以把较小的输入映射到较大范围的输出上,就达到了对比度拉伸的目的。如果更极限,r1=r2, s1=0, s2=L-1了,那么变换函数就是一条垂直于X轴的直线,这种曲线叫做阈值处理函数。 我们在OpenCv的教程中叶用到过这种方法。
![31cfba877b5920b671ec1518e83fb2ea.png](https://i-blog.csdnimg.cn/blog_migrate/f3a099dfc99f48d846f8c98022668636.jpeg)
- 灰度级分层
灰度级分层的目的很简答,需求也比较多,就是把自己感兴趣的特定灰度范围用特殊的灰度级别标定出来(比如标定成白色或者黑色),以达到突出的目的。
![1df98ff1aafbac9f9f6e01484011baf1.png](https://i-blog.csdnimg.cn/blog_migrate/22166c6baf49989710eb8eb0028e954c.jpeg)
举个例子:
![d4050d77fba1d73d6390b5eb89edb775.png](https://i-blog.csdnimg.cn/blog_migrate/3ae29301cc2237e58c414beea3d7edfa.jpeg)
- 比特平面分层
既然是数字图像,那么每个像素就是由固定比特的数字组成,比如8bit的灰度级别的图像,我们把每个bit代表一位,就是有8位,拓展到整个图像,就可以得到想象中的8层(每个对应bit组成一层)。在这个想象中的空间中,很显然,位数越高,它代表的数越大,它们组成的高位比特层面,就越能体现图像的轮廓;相同道理,位数月底,它就可以表示约多的是细节。
![a402dd68dd06a91213c56b729a3aa87d.png](https://i-blog.csdnimg.cn/blog_migrate/6bd67de9268ebda5d5275da81f0ec122.jpeg)