不使用 MATLAB 中的 histeq() 函数进行直方图均衡化

matlabdata analysisprogramming

在数字图像处理中,直方图均衡化是改善数字图像视觉质量的常用方法。我们可以使用 MATLAB 对数字图像进行直方图均衡化。我们在 MATLAB 中有一个内置函数"histeq"来执行此任务。但是,我们也可以不使用 MATLAB 的"histeq"函数来执行直方图均衡化。

在本教程中,我将向您展示不使用 MATLAB 中的"histeq"函数进行直方图均衡化的过程。但在此之前,让我们先了解一下数字图像处理中的直方图和直方图均衡。

什么是直方图和直方图均衡?

在数字图像处理中,用于显示数字图像中像素强度值分布的图形表示称为直方图

有时,在图像中,特定区域的像素强度较高,导致图像的对比度和视觉质量较差。有一种称为直方图均衡的技术,可以重新分配图像的像素强度以获得增强的图像。

直方图均衡是一种常用技术,可以使图像的直方图均匀,从而提高其对比度。

现在让我们讨论不使用 MATLAB 中的"histeq"函数的直方图均衡过程。

不使用 MATLAB 中的 Histeq 函数的直方图均衡

我们可以利用 MATLAB 对图像进行直方图均衡。为此,MATLAB 提供了一个内置函数"histeq"。但是,我们也可以不使用这个函数来执行直方图均衡化。

下面是在不使用 MATLAB 中的"histeq"函数的情况下均衡图像直方图的步骤。

  • 步骤 (1) - 使用"imread"函数读取输入图像。

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

  • 步骤 (3) - 使用"imhist"函数创建灰度图像的直方图。

  • 步骤 (4) - 计算图像的概率密度函数。

  • 步骤 (5) - 计算图像的累积分布函数。

  • 步骤 (6) - 均衡直方图。

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

这就是我们如何在不使用 MATLAB 中的"histeq"函数的情况下对图像进行直方图均衡化。

示例

现在,让我们举一个例子来了解这些步骤在MATLAB 编程。

% 不使用 histeq 函数执行直方图均衡化的 MATLAB 代码
% 读取输入图像
img = imread('https://www.tutorialspoint.com/assets/questions/media/14304-1687425269.jpg');

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

% 创建输入图像的直方图
hist = imhist(gray_img);

% 计算图像的概率密度函数
PDF = hist / numel(gray_img);

% 计算累积分布函数
CDF = cumsum(PDF);

% 均衡直方图
eq_hist = uint8(255 * CDF(gray_img + 1));

% 显示输入和均衡后的图像及其直方图
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(eq_hist), title('Equalized Image');
subplot(2, 2, 4), imhist(eq_hist), title('Equalized Image Histogram');

输出

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

代码说明

在此 MATLAB 示例中,我们首先使用"imread"函数读取输入图像并将其存储在变量"img"中。接下来,我们使用"rgb2gray"函数将输入图像转换为灰度,并将生成的图像存储在变量"gray_img"中。

之后,我们使用"imhist"函数计算图像的直方图,并将结果存储在变量"hist"中。然后,通过使用这个直方图,我们计算图像的概率密度函数并将结果存储在变量"PDF"中。接下来,我们使用"cumsum"函数计算图像的累积分布函数,并将结果存储在"CDF"变量中。

然后,我们利用"CDF"对图像进行直方图均衡化,并将增强后的图像存储在变量"eq_hist"中。

最后,我们使用"imshow"函数显示输入和均衡后的图像,使用"imhist"函数显示它们的直方图。

结论

这就是不使用 MATLAB 的"histeq"函数进行直方图均衡化的全部内容。在本教程中,我解释了在不使用"histeq"函数的情况下对图像进行直方图均衡化的分步过程。我还在 MATLAB 编程中包含了一个示例来演示所涉及步骤的实现。


相关文章