0004灰度变换是空间域的图像增强方法(冈萨雷斯第三章)

灰度变换

  • 针对输入图像src的像素进行变换,不改变该像素的位置
  • s = T(r) s是新图上的像素,r是旧图上的像素,T是映射函数

灰度变换函数分为两种(线性变换和非线性变换)

线性变换

  1. 线性变换公式: s = Ar + B
    drawing
  2. 分段线性变换
  • 通俗讲就是:不同像素区间用不同的变换函数,比如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函数
    drawing

非线性变换

非线性变换:对数变换(适合比较暗的图像)

  • 注意:伽马(幂变换)曲线是可变的,而对数函数的形状是固定的
  • 公式为:s = c * log(1+r)
    从如下图中我们可以看到,比较暗的像素(如0到50)变换后的s动态范围非常宽,相反比较亮的像素(如200到256)变换后s动态范围几乎没什么变化
    因此对数变换跟适合暗的图像,幂次变换刚好返过来。(对数可以化成指数形式,高中知识\(a^b=N, log_aN=b\)
    drawing
    术语就是:对数变换适用于把窄带低灰度src图转化为宽带dst图,如下图左边是很暗的原图的傅里叶图像,经过对数变换后得到右边的新图
    drawing
  • 应用
  1. 对数变换用于压缩动态范围,如果原始动态范围太高,比如在[0,10^6]的范围里,可以考虑对数变换压小动态范围
    在傅里叶变换里有用到,输入像素r,输出新像素值在[0,10^6]的情况并不少见,显示如果只有0到255肯定要压缩啦,通常为了显示方便傅里叶频谱都会做一个对数变换的操作
  • 问题:
    1. 为什么s = c * log(1+r)要加上1呢?
      答:为了放置出现正无穷和负无穷的情况

非线性变换:幂次变换(适合比较亮的图像)

  • 公式为:s = c * r^y,y是伽马,y大于1和y小于1时生成的曲线正好相反,c和y都是常数,函数图像过(1,1)这点
    因此图像太亮或太暗都可以用幂次变换,只不过是伽马值y选大于1还是小于1的问题
    drawing
    应用:
    1. 对比度增强,书上脊柱核磁共振那张图,图像非常亮可以考虑把y伽马值增大
    2. 老旧的阴极射线管电视颜色校正

非线性变换:对比度拉伸变换

  • 公式:s = T(r) = 1 / [1+(m/r)^E]m控制s的输出值,E控制函数斜率
    image
    一般来说要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)\),但是我们一般会取整数
    • 累积分布函数性质:
      • 累积分布函数值域在\([0,1]\)之间,可以保证映射后像素值还在\([0,255]\)以内
      • 累积分布函数是单调递增的,
        如果有像素AB,并且A比B亮,可以保证映射后的sA=T(A)依旧比sB=T(B)
        如果有像素AB,并且A比B暗,可以保证映射后的sA=T(A)依旧比sB=T(B)
        drawing
  • 优点:
    1. 无参数的改善对比度算法,免去了根据图像调的过程
    2. 处理后像素值几乎均匀分布
  • 问题:
    1. 离散型由于取整,导致出现多对一的映射关系。比如把像素128和像素130映射后得到T(120)=131.25T(125)=131.94,由于我们取整,得到两个都是131,这就使得图像不平坦。
    2. 直方图均衡只能使用一次,多了也没什么效果
    3. 直方图均衡可以通过直方图匹配(直方图规定化)来实现,matlab里就是这样的。

非线性变换:直方图规定化(课程视频里没讲)

  • 什么是直方图规定化?
    1. 就是人为规定生成的新图的直方图长什么样。即:已知原图,原图直方图和新图直方图,如何求出新图各个像素点(新图未知)?
    2. 如何生成一个我想要的新直方图,比如一个如下图的双峰的直方图(双峰对比度高)?
      1. drawing
posted @ 2023-02-23 11:32  马角的逆袭  阅读(90)  评论(0编辑  收藏  举报