对数变换在图像处理中通常有以下作用:
- 因为对数曲线在像素值较低的区域斜率较大,像素值较高的区域斜率比较低,所以图像经过对数变换之后,在较暗的区域对比度将得到提升,因而能增强图像暗部的细节。
- 图像的傅里叶频谱其动态范围可能宽达0~10^6。直接显示频谱的话显示设备的动态范围往往不能满足要求,这个时候就需要使用对数变换,使得傅里叶频谱的动态范围被合理地非线性压缩。
本节中所使用的样图如下:
首先导入所需的程序包:
In [ ]:
import numpy as np
import matplotlib.pyplot as plt
import cv2
定义对数变化函数:
In [ ]:
def log(c, img):
output = c * np.log(1.0 + img)
output = np.uint8(output + 0.5)
return output
读取原始图像:
In [ ]:
img = cv2.imread('./street.jpg')
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img2)
plt.show()
对图像进行对数变换:
In [ ]:
output = log(42, img)
显示结果图像:
In [ ]:
output2 = cv2.cvtColor(output, cv2.COLOR_BGR2RGB)
plt.imshow(output2)
plt.show()
可以观察到,对数变换效果非常明显,且对于整体对比度偏低并且灰度值偏低的图像增强效果较好。