目录
- 实验 2 灰度变换与空间滤波
- 一、实验目的
- 二、实验例题
- 1. 灰度变换函数 `imadjust`
- 2. 使用对数变换压缩动态范围。
- 3. 直方图均衡化 histogram equalization
实验 2 灰度变换与空间滤波
一、实验目的
- 掌握灰度变换的原理和应用。
- 掌握对数变换、幂律变换和直方图均衡化的原理和应用。
- 掌握线性空间滤波和非线性空间滤波中相关函数的使用。
二、实验例题
1. 灰度变换函数 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 的类。
- 若 f 是 uint8 类图像,则函数 imadjust 将乘以 255 来确定应用中的实际值;
- 若 f 是 uint16 类图像,则函数 imadjust 将乘以 65535。[low_in high_in]或[low_out high_out]
- 使用空矩阵( [] ),会得到默认值[0 1]。若 high_out 小于 low_out,则输出亮度会反转。
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);
2. 使用对数变换压缩动态范围。
对数变换通过式
(
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');
另一种情况,仅仅使用im2uint8
函数
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] 之间。
执行对数变换后的图像与原图像相比,视觉效果得到了明显的改善,图像中可见细节的丰富程度更明显。
3. 直方图均衡化 histogram equalization
直方图均衡化由工具箱中的函数 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')
个人视角看,直方图均衡化得到的图片更加的清晰。