3.8 直方图规定化

直方图均衡化算法可以自动确定灰度变换函数,从而获得具有均匀直方图的输出图像。它主要用于增强动态范围偏小的图像对比度,丰富图像的灰度级。这种方法的优点是操作简单,且结果可以预知,当图像需要自动增强时是一种不错的选择。

但有时希望可以对变换过程加以控制,如能够人为地修正直方图的形状,或者说是获得具有指定直方图的输出图像。这样就可以有选择地增强某个灰度范围内的对比度或使图像灰度值满足某种特定的分布。这种用于产生具有特定直方图的图像的方法叫做直方图规定化,或直方图匹配

3.8.1 理论基础

直方图规定化是在运用均衡化原理的基础上,通过建立原始图像和期望图像(待匹配直方图的图像)之间的关系,使原始图像的直方图匹配特定的形状,从而弥补了直方图均衡不具备交互作用的特性。

其匹配原理是先对原始的图像均衡化。

同时对待匹配直方图的图像进行均衡化处理。

由于都是均衡化,故可令 s = v,则

于是我们可以按照如下的步骤由输入图像得到一个具有规定概率密度函数的图像。

(1)根据式3-14得到变换关系f(r)。

(2)根据式3-15得到变换关系g(z)。

(3)求得反变换函数g–1

(4)对输入图像所有像素应用式3-16中的变换,从而得到输出图像。

当然,在实际计算中我们利用的是上述公式的离散形式,这样就不必去关心函数 f(r)、g(z)以及反变换函数g-1 具体的解析形式,而可以直接将它们作为映射表处理了。其中,f(r)为输入图像均衡化的离散灰度级映射关系;g(z)为标准图像均衡化的的离散灰度级映射关系;而g-1 则是标准图像均衡化的逆映射关系,它给出了从经过均衡化处理的标准化图像到原标准图像的离散灰度映射,相当于均衡化处理的逆过程。

3.8.2 Matlab实现

histeq 函数不仅可以用于直方图均衡化,也可以用于直方图规定化,此时需要提供可选参数hgram。调用语法如下。

[J, T] = histeq(I, hgram)

函数会将原始图像I处理成一幅以用户指定向量hgram作为直方图的图像。

参数hgram的分量数目即为直方图的收集箱数目。对于double型图像,hgram的元素取值范围是[0, 1];对于 uint8型图像为[0, 255];对于 uint16型图像则为[0, 65535]。

其他参数的意义与在直方图均衡化中的相同。

[例3.4]直方图匹配

下面的程序实现了从图像I分别到图像I1和I2的直方图匹配。

I = imread('pout.tif'); %读入原图像

I1 = imread('coins.png'); %读入要匹配直方图的图像

I2 = imread('circuit.tif'); %读入要匹配直方图的图像

% 计算直方图

[hgram1, x] = imhist(I1);

[hgram2, x] = imhist(I2);

% 执行直方图均衡化

J1=histeq(I,hgram1);

J2=histeq(I,hgram2);

% 绘图

subplot(2,3,1);

imshow(I);title('原图');

subplot(2,3,2);

imshow(I1); title('标准图1');

subplot(2,3,3);

imshow(I2); title('标准图2');

subplot(2,3,5);

imshow(J1); title('规定化到1')

subplot(2,3,6);

imshow(J2);title('规定化到2');

% 绘直方图

figure;

subplot(2,3,1);

imhist(I);title('原图');

subplot(2,3,2);

imhist(I1); title('标准图1');

subplot(2,3,3);

imhist(I2); title('标准图2');

subplot(2,3,5);

imhist(J1); title('规定化到1')

subplot(2,3,6);

imhist(J2);title('规定化到2');

上述程序的运行结果如图3.18和图3.19所示。可以看到,经过规定化处理,原图像的直方图与目标图像的直方图变得较为相似。

▲图3.18 直方图规定化结果

▲图3.19 直方图规定化后的灰度直方图

直方图规定化本质上是一种拟合过程,因此变换得到的直方图与标准目标图像的直方图并不会完全一致。然而即使只是相似的拟合,仍然使规定化的图像在亮度与对比度上具有类似标准图像的特性,这正是直方图规定化的目的所在。