数字图像处理_02.3_(图像线性,非线性变换——对数变换,gamma变换)

1.图像的线性变换

图像的线性变换
S = k × r + b S=k\times r+b S=k×r+b
其中 r r r 为输入变量, S S S为输出变量, k , b k,b kb为线性变换中的倍数因子和偏移因子。
0 < k < 1 0<k<1 0<k<1时,对灰度压缩,整体变灰变暗。
k = 1 , b = 0 k=1,b=0 k=1b=0时,和原图像相同。
k > 1 k>1 k>1时,对灰度拉伸,对比明显,变亮。
k < 0 k<0 k<0时,亮处变暗,暗处变亮。
在这里插入图片描述
代码实现:

k=-1
b=50
img2=b + k*img.astype(np.int32)#要进行类型转化,因为uint8在+1时可能会溢出错误
img2=np.clip(img2,0,255)#对溢出值做一个截断,当大于255时取255,小于0时取0,以保证灰度区间在0-255

k=0.1
b=50
img3=b + k*img.astype(np.int32)
img3=np.clip(img3,0,255)

k=2
b=50
img4=b + k*img.astype(np.int32)
img4=np.clip(img4,0,255)
show(np.hstack([img2,img,img3,img4]))

效果展示(k=-1,k=1,k=0.1,k=2)
在这里插入图片描述

2.图像的非线性变换

图像的非线性变换常有对数变化和gamma变化(指数变换,幂次变换)。

1)对数变换

对数变换的公式为: S = c × l o g ( r + 1 ) S=c\times log(r+1) S=c×log(r+1)
其中 r r r 为输入变量, S S S为输出变量, c c c为线性变换中的倍数因子。在这里插入图片描述
可见,灰度较低时对灰度进行拉伸,灰度较高时则灰度压缩。
代码实现:

img4=10+np.log(img.astype(np.float32)+1)/0.1#同样的,log内可能会0会出现错误,故进行浮点转换+1

在这里插入图片描述

1)gamma变换

对数变换的公式为: S = c × r γ S=c\times r^{\gamma} S=c×rγ
其中 r r r 为输入变量, S S S为输出变量, c , γ c,\gamma cγ为线性变换中的倍数因子和指数因子。
γ > 1 \gamma>1 γ>1时,拉伸图像中灰度级较高的区域,压缩灰度级较低的部分
γ < 1 \gamma<1 γ<1时,压缩图像中灰度级较高的区域,拉伸灰度级较低的部分
在这里插入图片描述
代码实现:

r=img/255#归一化,使r为0-1间的数值
img5=np.power(r,0.5)*255
img6=np.power(r,2)*255

效果展示(r=0.5, r=1, r=2):
在这里插入图片描述

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值