如何在MATLAB中归一化直方图?
直方图不过是一种图形表示,它显示了一组数据点的分布。直方图的归一化是一个将它的频率分布在一个较宽范围内的方法。
在讨论MATLAB中直方图归一化的实现之前,让我们首先概述一下直方图归一化。
什么是直方图归一化?
直方图是一种图形化地表示数据集频率分布的方法。有时,我们会看到一个直方图,其中频率分布在一个很小的范围内。这会导致数字图像对比度变差。
有一种叫做“直方图归一化”的技术,用于将数据集的频率分布在更宽的范围内。
在数字图像处理中,直方图归一化用于提高图像的对比度。
数学上,直方图归一化使用以下公式执行:
$$\mathrm{直方图归一化=\frac{(强度 − 最小值)}{(最大值 − 最小值)}× 255}$$
现在,让我们讨论MATLAB中直方图归一化的过程。
MATLAB中的直方图归一化
在MATLAB中,直方图的归一化按照以下步骤执行:
步骤(1) - 读取需要归一化直方图的数字图像。为此,使用“imread”函数。
步骤(2) - 根据需要将输入图像转换为灰度图像。为此,使用“rgb2gray”函数。
步骤(3) - 将灰度图像转换为双精度数据类型以进行计算。为此,使用“double”函数。
步骤(4) - 指定直方图归一化所需的最小值和最大值。
步骤(5) - 使用直方图归一化公式进行直方图归一化。
步骤(6) - 显示结果。
示例
让我们通过一个示例来了解执行这些步骤以对图像进行直方图归一化的实现和执行。
% MATLAB code to perform histogram normalization % Read the input image img = imread('https://tutorialspoint.com/assets/questions/media/14304-1687425269.jpg'); % Convert the input image to grayscale gray_img = rgb2gray(img); % Convert the grayscale image to double datatype double_img = double(gray_img); % Specify the minimum and maximum values for histogram normalization min_value = 50; max_value = 170; % Perform histogram normalization norm_img = (double_img - min_value) / (max_value - min_value); % Scale the normalized image scaled_img = norm_img * 255; % Convert the scaled image to uint8 to display hist_norm_img = uint8(scaled_img); % Display the input image, normalized image, and their histograms 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中的示例解释了图像直方图归一化的分步过程。
广告