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

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 00<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时,亮处变暗,暗处变亮。
数字图像处理_02.3_(图像线性,非线性变换)_第1张图片
代码实现:

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)
数字图像处理_02.3_(图像线性,非线性变换)_第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为线性变换中的倍数因子。数字图像处理_02.3_(图像线性,非线性变换)_第3张图片
可见,灰度较低时对灰度进行拉伸,灰度较高时则灰度压缩。
代码实现:

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

数字图像处理_02.3_(图像线性,非线性变换)_第4张图片

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时,压缩图像中灰度级较高的区域,拉伸灰度级较低的部分
数字图像处理_02.3_(图像线性,非线性变换)_第5张图片
代码实现:

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):
数字图像处理_02.3_(图像线性,非线性变换)_第6张图片

你可能感兴趣的:(数字图像处理,opencv,python,图像处理)