上一篇:
MATLAB安装与简单的图像操作
上一篇文章忘记介绍灰度直方图了,灰度直方图就是将RGB图像转成灰度图后,统计灰度图中各灰度级出现的次数或频率,可用于图像分割和图像灰度变换;
常见的灰度变换上一篇介绍过线性变换,即O = Fa * I + Fb;
继续学习图像灰度变换之:
灰度对数变换
t = c log(s + 1)
这种变换可以增强一幅图中较暗部分的细节,从而可以用来扩展被压缩的告知图像中的较暗像素。一般傅里叶频谱动态范围可宽达0~1000000,直接显示,图像设备的动态范围不能满足要求,从而丢失大量暗部细节,在使用对数变换之后 ,被合理地非线性压缩,可以清晰显示。
由曲线可以看出,横轴值较小时,纵轴值变化很大;横轴值较小时,纵轴值变化趋于平缓;所以暗部的细节区分度变大,可以保留暗部细节。
最终MATLAB实验结果结果如下图所示
建议了解下傅里叶变换,在高等数学中有专门讲到傅里叶变换,用于信号处理等方面;
傅里叶变换在图像处理中的应用,这篇博文将大概应用类型介绍了一下,我是参照它来学习的,还附有MATLAB代码,实践起来比较方便:
伽马变换
伽马变换,也叫指数变换或者幂次变换;
表达式一般为y = (x +esp)^γ;
x,y的取值范围为[0,1],说esp是补偿系数,但是感觉esp应该是不大于1的,因为esp如果大于1的话,当x为1时,x + esp 的25次方肯定大于1了。具体多少应该有其他规定;
不过在网上有一部分介绍是把esp补偿系数省掉了;
下图为伽马变换的曲线图:
MATLAB里面有对应gamma变换的处理函数,
imadjust,用法为:
J = imadjust(I,[low_in high_in],[low_out,high_out],gamma);
比较好懂,将输入图像在low_in到high_in的值映射到lou_out到high_out区间上,所以自然就将[low_in high_in]区间外的值过滤掉了。
gamma指定了映射关系上的权重,gamma < 1的话映射被加权至更高的输出值;反之,加权至更低的输出值;具体效果如“伽马变换的曲线图”所示。
MATLAB效果图如下:
代码:
I = imread('test1_gray.png');
subplot(1,3,3);
J = imadjust(I,[],[],1.5);
imshow(J);
title('gamma 1.5');
根据前面
伽马变换的曲线图,不同的gamma,其曲线在不同区间曲率变化规律不同,gamma < 1时,较暗区域的细节会更加明显,gamma > 1时,较亮区域的细节会更加明显。
同时还比较了直方图:
书上总结说是:伽马变换不是线性变换,不仅可以改变图像的对比度,还能够增强细节,改善整体效果。