图像的线性变换
S = k × r + b S=k\times r+b S=k×r+b
其中 r r r 为输入变量, S S S为输出变量, k , b k,b k,b为线性变换中的倍数因子和偏移因子。
当 0 < k < 1 0
当 k = 1 , b = 0 k=1,b=0 k=1,b=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]))
图像的非线性变换常有对数变化和gamma变化(指数变换,幂次变换)。
对数变换的公式为: 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
对数变换的公式为: 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