imadjust
函数 imadjust 是对灰度图像进行亮度变换的基本工具。其语法为:
g=imadjust(f, [low_in high_in], [low_out high_out], gamma)
此函数将图像 f 中的亮度值映射到 g 中的新值,即将 low_in 至 high_in 之间的值映射到 low_out 至 high_out 之间的值。 Low_in 以下的值映射为 low_out, high_in 以上的值映射为 high_out。输入图像应为 uint8 类、 uint16 类或 double 类图像,输出图像与输入图像有着相同的类。除图像 f 外,函数 imadjust 的所有输入均指定在 0 和 1 之间,而不论图像 f 的类。
gamma 指定曲线的形状,用于映射 f 的亮度值以生成 g。若 gamma 小于 1,则映射被加权至更高(更亮)的输出值;若 gamma 大于 1,则映射被加权至更低(更暗)的输出值;若省略,则 gamma 默认为 1(线性映射)。
例 1 将图 1 所示 Pout 图像的灰度值调整到整个灰度范围[0, 255]。
答:
f=imread('Pout.tif');
g=imadjust(f);
figure; imshow(f);
figure; imhist(f);
figure; imshow(g); imwrite(g, '灰度扩展图像.tif');
figure; imhist(g);
对数变换通过式 ( 1 ) (1) (1)中的表达式实现:
g = c ∗ log ( 1 + double ( f ) ) (1) g=c^{*} \log (1+\text { double }(f))\tag1 g=c∗log(1+ double (f))(1)
图 3 是一个取值范围为 0 至 1.5×106 的傅里叶频谱,它被线性地显示在一个 8 比
特系统中。请使用对数变换减小其动态范围,以改善图像的视觉效果。
答:
f=imread('2.tif');
g=im2uint8(mat2gray(log(1+double(f))));
%使用函数 mat2gray 可将值限定在范围[0 1]内;
%使用函数 im2uint8 可将值限定在范围[0 255]内。
imshow(g);
imwrite(g, '对数变换后图像.tif');
f=imread('傅里叶频谱.tif');
g=im2uint8(log(1+double(f)));
%使用函数 im2uint8 可将值限定在范围[0 255]内。
imshow(g);
imwrite(g, '对数变换后图像.tif');
实际上这里会显示出来一个黑白的图片, g g g变成了 0 0 0和 255 255 255两种数字,必须先使用mat2gray
函数将范围限定到 [ 0 , 1 ] [0 ,1] [0,1] 之间。
执行对数变换后的图像与原图像相比,视觉效果得到了明显的改善,图像中可见细节的丰富程度更明显。
直方图均衡化由工具箱中的函数 histeq 实现,该函数的语法为:
g=histeq(f, nlev)
其中, f 为输入图像, nlev 是为输出图像指定的灰度级数,其默认值为 64。一般来说,我们将 nlev 赋值为灰度级的最大可能数量(通常为 256), 以得到较为正确的执行结果。
图 4 是电子显微镜下放大了近 700 倍的花粉图像,其突出特点是较暗且动态范围较低。请给出其灰度直方图,并给出直方图均衡化之后的结果。
答:
f=imread('3.tif');
figure; imhist(f);
ylim('auto'); %自动设定坐标轴的取值范围和刻度线
g=histeq(f, 256);
figure; imshow(g);
imwrite(g, '直方图均衡化后的图像.tif');
figure; imhist(g)
ylim('auto')
个人视角看,直方图均衡化得到的图片更加的清晰。