0004灰度变换是空间域的图像增强方法(冈萨雷斯第三章)
目录
灰度变换
- 针对输入图像src的像素进行变换,不改变该像素的位置
s = T(r)
s是新图上的像素,r是旧图上的像素,T是映射函数
灰度变换函数分为两种(线性变换和非线性变换)
线性变换
- 线性变换公式:
s = Ar + B
- 分段线性变换
- 通俗讲就是:不同像素区间用不同的变换函数,比如
r=[0到100]
用T1(r)
进行变换,r=[101到200]
用T2(r)
变换,需要针对图像进行设计分段函数
比如:有一张图片src640x480
,这张图片的左下角的100x100
有比较多我想看的细节,但是左下角像素都集中在0到50
之间,于是我们就可以只针对0到50
设计拉伸函数T(r=[0-50])
缺点是:
1.非左下角的[0到50]像素也T函数被拉伸了。
2. 每一张图都要重新设计T函数
非线性变换
非线性变换:对数变换(适合比较暗的图像)
- 注意:伽马(幂变换)曲线是可变的,而对数函数的形状是固定的
- 公式为:
s = c * log(1+r)
从如下图中我们可以看到,比较暗的像素(如0到50)变换后的s
动态范围非常宽,相反比较亮的像素(如200到256)变换后s
动态范围几乎没什么变化
因此对数变换跟适合暗的图像,幂次变换刚好返过来。(对数可以化成指数形式,高中知识\(a^b=N, log_aN=b\))
术语就是:对数变换适用于把窄带低灰度src图
转化为宽带dst图
,如下图左边是很暗的原图的傅里叶图像,经过对数变换后得到右边的新图
- 应用
- 对数变换用于压缩动态范围,如果原始动态范围太高,比如在[0,10^6]的范围里,可以考虑对数变换压小动态范围
在傅里叶变换里有用到,输入像素r
,输出新像素值在[0,10^6]
的情况并不少见,显示如果只有0到255肯定要压缩啦,通常为了显示方便傅里叶频谱都会做一个对数变换的操作
- 问题:
- 为什么
s = c * log(1+r)
要加上1呢?
答:为了放置出现正无穷和负无穷的情况
- 为什么
非线性变换:幂次变换(适合比较亮的图像)
- 公式为:
s = c * r^y
,y是伽马,y大于1和y小于1时生成的曲线正好相反
,c和y都是常数,函数图像过(1,1)
这点
因此图像太亮或太暗都可以用幂次变换,只不过是伽马值y选大于1还是小于1的问题
应用:- 对比度增强,书上脊柱核磁共振那张图,图像非常亮可以考虑把y伽马值增大
- 老旧的阴极射线管电视颜色校正
非线性变换:对比度拉伸变换
-
公式:
s = T(r) = 1 / [1+(m/r)^E]
用m
控制s的输出值,E
控制函数斜率
一般来说要E
要大于7,对比度拉伸函数才会有比较美的S
形图像 -
在冈萨雷斯第四版132页,pdf第147页的习题3.2(a)中要求构造一个连续的对比度拉伸函数
答案里是使用: \(e^{-ar^2}\)这个s
形的函数,
非线性变换:直方图均衡
- 用
累积分布函数
作为T映射函数,可以把直方图拉伸成矮胖
直方图- 像素
k
的累积分布函数公式:\(Func_k=\sum_{i=0}^{k} {i 像素出现的概率}\)
每一个像素对应一个累积分布函数值,因此每个像素都有一个T映射函数- 得到像素\(r\)的映射函数\(T(r)=(255-0)*Func_r=255*(\sum_{i=0}^{r}{像素r出现的概率})\)
原则上单调增不会出现不同像素\(r1\)和\(r2\)映射到同一个\(s1\)的情况,\(s1=T(r1)=T(r2)\),但是我们一般会取整数
- 得到像素\(r\)的映射函数\(T(r)=(255-0)*Func_r=255*(\sum_{i=0}^{r}{像素r出现的概率})\)
- 累积分布函数性质:
- 累积分布函数值域在\([0,1]\)之间,可以保证映射后像素值还在\([0,255]\)以内
- 累积分布函数是单调递增的,
如果有像素A
和B
,并且A比B亮,可以保证映射后的sA=T(A)
依旧比sB=T(B)
亮
如果有像素A
和B
,并且A比B暗,可以保证映射后的sA=T(A)
依旧比sB=T(B)
暗
- 像素
- 优点:
- 是无参数的改善对比度算法,免去了根据图像调的过程
- 处理后像素值几乎均匀分布
- 问题:
- 离散型由于取整,导致出现多对一的映射关系。比如把像素128和像素130映射后得到
T(120)=131.25
,T(125)=131.94
,由于我们取整,得到两个都是131
,这就使得图像不平坦。 - 直方图均衡只能使用一次,多了也没什么效果
- 直方图均衡可以通过直方图匹配(直方图规定化)来实现,matlab里就是这样的。
- 离散型由于取整,导致出现多对一的映射关系。比如把像素128和像素130映射后得到
非线性变换:直方图规定化(课程视频里没讲)
- 什么是直方图规定化?
- 就是人为规定生成的新图的直方图长什么样。即:已知原图,原图直方图和新图直方图,如何求出新图各个像素点(新图未知)?
- 如何生成一个我想要的新直方图,比如一个如下图的双峰的直方图(双峰对比度高)?