Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

histeq

使用直方图均衡增强对比度

说明

示例

J = histeq(I) 变换灰度图像 I,以使输出灰度图像 J 的直方图具有 64 个 bin 且大致平坦。

J = histeq(I,n) 变换灰度图像 I,以使输出灰度图像 J 具有 n 个 bin 的直方图大致平坦。当 n 远小于 I 中的离散灰度级数时,J 的直方图更平坦。

J = histeq(I,hgram) 变换灰度图像 I,以使输出灰度图像 J 具有 length(hgram) 个 bin 的直方图近似匹配目标直方图 hgram

newmap = histeq(X,map) 变换颜色图层中的值,使索引图像 X 的灰度分量直方图大致平坦。变换后的颜色图为 newmap

newmap = histeq(X,map,hgram) 变换与索引图像 X 相关联的颜色图,以使索引图像 (X, newmap) 的灰度分量直方图近似匹配目标直方图 hgramhisteq 函数在 newmap 中返回变换后的颜色图。length(hgram) 必须与 size(map,1) 相同。

[___,T] = histeq(___) 还返回变换 T,该变换将输入灰度图像或颜色图的灰度分量映射到输出灰度图像或颜色图的灰度分量。

示例

全部折叠

将图像读入工作区。

I = imread('tire.tif');

使用直方图均衡增强强度图像的对比度。

J = histeq(I);

显示原始图像和调整后的图像。

imshowpair(I,J,'montage')
axis off

Figure contains an axes object. The axes object contains an object of type image.

显示原始图像的直方图。

figure
imhist(I,64)

Figure contains 2 axes objects. Axes object 1 contains an object of type stem. Axes object 2 contains 2 objects of type image, line.

显示处理后的图像的直方图。

figure
imhist(J,64)

Figure contains 2 axes objects. Axes object 1 contains an object of type stem. Axes object 2 contains 2 objects of type image, line.

加载三维数据集。

load mristack

执行直方图均衡。

enhanced = histeq(mristack);

显示原始图像和对比度增强图像的第一个数据切片。

figure
subplot(1,2,1)
imshow(mristack(:,:,1))
title('Slice of Original Image')
subplot(1,2,2)
imshow(enhanced(:,:,1))
title('Slice of Enhanced Image')

Figure contains 2 axes objects. Axes object 1 with title Slice of Original Image contains an object of type image. Axes object 2 with title Slice of Enhanced Image contains an object of type image.

输入参数

全部折叠

灰度图像,指定为任意维度的数值数组。

数据类型: single | double | int16 | uint8 | uint16

目标直方图,指定为数值向量。hgram 有等间距的 bin,包含一定范围内的强度值:

  • 对于 doublesingle 类的图像,范围为 [0, 1]

  • 对于 uint8 类的图像,范围为 [0, 255]

  • 对于 uint16 类的图像,范围为 [0, 65535]

  • 对于 int16 类的图像,范围为 [-32768, 32767]

histeq 自动缩放 hgram 以使 sum(hgram)=numel(I)。当 length(hgram) 远小于 I 中的离散灰度级数时,J 的直方图会更好地匹配 hgram

数据类型: single | double

离散灰度级的数量,指定为正整数。

数据类型: single | double

索引图像,指定为任意维度的数值数组。X 中的值是颜色图 map 的索引。

数据类型: single | double | uint8 | uint16

与索引图像 X 相关联的颜色图,指定为由范围 [0, 1] 内的值组成的 c×3 数值矩阵。每行是一个三元素 RGB 三元组,指定颜色图的单个颜色的红、绿和蓝分量。

数据类型: double

输出参数

全部折叠

变换后的灰度图像,以大小和类与输入图像 I 相同的数值数组形式返回。

灰度变换,以数值向量形式返回。变换 T 将图像 I 中的灰度级映射到 J 中的灰度级。

数据类型: double

变换后的颜色图,指定为由 [0, 1] 范围内的值组成的 n×3 数值矩阵。每行是一个三元素 RGB 三元组,指定颜色图的单个颜色的红、绿和蓝分量。

数据类型: double

算法

当您提供目标直方图 hgram 时,histeq 选择灰度变换 T 以最小化

|c1(T(k))c0(k)|,

c0 是输入图像 I 的累积直方图,c1hgram 中所有强度 k 上的累积总和。这种最小化受以下条件的限制:

  • T 必须单调

  • c1(T(a))c0(a) 的过冲不能超过 a 处直方图计数之间差距的一半。

histeq 使用变换 b = T(a) 将 X(或颜色图)中的灰度级映射到其新值。

如果您不指定 hgram,则 histeq 创建平坦的 hgram

hgram = ones(1,n)*prod(size(A))/n;

然后应用前面的算法。

扩展功能

版本历史记录

在 R2006a 之前推出