数字图像处理之点运算---对数变换

一.理论基础
对数变换的一般形式:t=clog(1+s),其中c为尺度比例常数,s为源灰度值,t为变换后的目标灰度值。由函数曲线可知,灰度值低的时候斜率较高,灰度值高的时候斜率低哦,根据这个特点对数变换主要应用于下面的两个方向:
1.增强一副图像中比较暗的部分,从而用来扩展被压缩的高值图像中的较暗像素。
2.广泛用于频谱图像的显示中。傅里叶变换的频谱动态范围可能宽达0~10六次方,直接显示频谱时,图像显示设备的动态范围往往不能满足要求,从而丢失了大量的暗部细节。

二.matlab实现:
下面的代码用来增强图像中较暗的部分,可以看出图像相比原图暗的部分明显增亮,而高灰度值的部分则变化不明显。

I=im2double(I);
imshow(I,[]);
title('原图像');
L=log(I+1);
subplot(1,2,2);
imshow(L,[]);
title('经对数变换的图像');

在这里插入图片描述
下面的代码则是在频谱中的应用:可以看出原图像中心绝对高灰度值的存在压缩了低灰度值的动态范围,从而无法在显示时表现出细节;而经过对数灰度处理的图像,其低灰度区域对比度将会增加。

I=imread('coins.png');
F=fft2(im2double(I)); %计算频谱
F=fftshift(F);  %将频谱搬移到中心位置
F=abs(F);   %求频谱幅度
T=log(F+1); %对数变换
subplot(1,2,1);
imshow(F,[]);   %注意其中的[]规定了灰度值的范围,默认为[Imin,Imax]
title('未经变换的频谱');
subplot(1,2,2);
imshow(T,[]);
title('经过对数变换的频谱');

在这里插入图片描述
全部代码:

I=imread('coins.png');
F=fft2(im2double(I)); %计算频谱
F=fftshift(F);  %将频谱搬移到中心位置
F=abs(F);   %求频谱幅度
T=log(F+1); %对数变换
subplot(1,2,1);
imshow(F,[]);   %注意其中的[]规定了灰度值的范围,默认为[Imin,Imax]
title('未经变换的频谱');
subplot(1,2,2);
imshow(T,[]);
title('经过对数变换的频谱');
figure;
subplot(1,2,1);
I=im2double(I);
imshow(I,[]);
title('原图像');
L=log(I+1);
subplot(1,2,2);
imshow(L,[]);
title('经对数变换的图像');

三.总结
我们使用这种类型的变换来扩展图像中的暗像素值,同时压缩更高灰度级的值。即:将输入中范围较窄的低灰度值映射为输出中范围较宽的灰度值,或将输入中范围较宽的高灰度值映射为输出范围中范围较窄的灰度值。

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值