如何在 MATLAB 中对直方图进行归一化?

matlabdata analysisprogramming

直方图只是一种图形表示,用于显示一组数据点的分布情况。直方图的归一化是将其频率分布在较大范围内的过程。

在讨论如何在 MATLAB 中实现直方图归一化之前,我们先来了解一下直方图归一化的概述。

什么是直方图归一化?

直方图是一种图形化表示数据集频率分布的方式。有时,我们会看到直方图的频率分布在一个较小的范围内。这会导致数字图像的对比度较差。

  • 有一种称为"直方图归一化"的技术,用于将数据集的频率分布在较大的范围内。

  • 在数字图像处理中,直方图归一化用于提高图像的对比度。

从数学上讲,直方图归一化使用以下公式执行:

$$\mathrm{Hist. Norm=\frac{(强度 − 最小值)}{(最大值 \:值 − 最小值 \:值)}× 255}$$

现在,让我们讨论一下在 MATLAB 中直方图归一化的过程。

MATLAB 中的直方图归一化

在 MATLAB 中,直方图的归一化按以下步骤执行 -

  • 步骤 (1) - 读取需要进行直方图归一化的数字图像。为此,请使用"imread"函数。

  • 步骤 (2) - 如果需要,将输入图像转换为灰度图像。为此,请使用"rgb2gray"函数。

  • 步骤 (3) − 将灰度图像转换为双精度数据类型以进行计算。为此,请使用"double"函数。

  • 步骤 (4) - 指定直方图归一化所需的最小值和最大值。

  • 步骤 (5) - 使用直方图归一化公式对直方图进行归一化。

  • 步骤 (6) - 显示结果。

示例

让我们通过一个例子来理解这些步骤的实现和执行,以对图像进行直方图归一化。

% 用于执行直方图归一化的 MATLAB 代码
% 读取输入图像
img = imread('https://www.tutorialspoint.com/assets/questions/media/14304-1687425269.jpg');

% 将输入图像转换为灰度
gray_img = rgb2gray(img);

% 将灰度图像转换为双精度数据类型
double_img = double(gray_img);

% 指定直方图归一化的最小值和最大值
min_value = 50;
max_value = 170;

% 执行直方图归一化
norm_img = (double_img - min_value) / (max_value - min_value);

% 缩放归一化后的图像
scaled_img = norm_img * 255;

% 将缩放后的图像转换为 uint8 格式进行显示
hist_norm_img = uint8(scaled_img);

% 显示输入图像、归一化图像及其直方图
figure;
subplot(2, 2, 1);
imshow(gray_img);
title('Input Image');

subplot(2, 2, 2);
imhist(gray_img);
title('Input Image Histogram');

subplot(2, 2, 3);
imshow(hist_norm_img);
title('Normalized Image');

subplot(2, 2, 4);
imhist(hist_norm_img);
title('Normalized Histogram');

输出

运行此代码时,将生成以下输出 -

结论

总之,直方图归一化是一种将数据集的频率分布在较大范围内以提高对比度的技术。在本教程中,我借助 MATLAB 中的一个示例,逐步讲解了图像直方图归一化的过程。


相关文章