对数变换的公式为:
其中:c是伸缩系数,常设为1。src为输入的原图像,dst为经过对数变换的输出图像
对数变换的曲线为:
由曲线的形状可以发现,对数变换将输入中范围较窄的低灰度值映射为输出中灰度值较宽的部分。也就是对数变换可以提升原图中暗区的对比度,同时可以压缩明亮区的对比度。
反对数变换的效果刚好相反
import numpy as np import cv2 def log(x): y =np.log(1+x) ym = y- y.min() dst = (ym / ym.max()) * 255 return dst.astype(np.uint8) img = cv2.imread('./f.jpg',0) dst = log(img) cv2.imshow('img',np.hstack((img,dst))) cv2.waitKey() cv2.destroyAllWindows()
处理的结果为
注:
因为图像经过对数变换后的值域很小,所以需要放大到0-255范围当中
而使用书上的方法则不会出现这种情况