对数变换将输入中范围较窄的低灰度值映射为输出中范围较宽的灰度值,或将输入中范围较宽的高灰度值映射为输出中范围较窄的灰度值。结合书本图片说明:
对于对数函数,可以看到输入中范围在[0~L/4]的灰度值映射为输出中范围为[0~3L/4]的灰度值,同理反对数函数也是这样理解。使用对数变换来扩展图像中的暗像素值,同时压缩更高灰度级的值。反对数函数的作用于此相反。
对数变换的通用形式为:
对书中傅里叶频谱的图片进行对数变换,代码如下:
% 读取图像
img_1 = imread('Fig0305(a)(DFT_no_log).tif');
% 输入图像是uint8类型的,所以第一步先将输入图像转换成double型的:double(img_1)
% 对转换成double型的img_1,参照对数变换的公式,其中c = 1,调用log函数:log(1 + double(img_1))
% 将结果标定为[0, 1]范围内的double类的数组:mat2gray(log(1 + double(img_1)))
% 最后再将数组转换成uint8类型的图像:im2uint8(mat2gray(log(1 + double(img_1))))
img_2 = im2uint8(mat2gray(log(1 + double(img_1))));
% 显示图像
subplot(121), imshow(img_1);
subplot(122), imshow(img_2);
实验结果如下: