如何在 MATLAB 中对直方图进行归一化?
直方图归一化是一种将直方图的频率分布在比当前范围更广的范围内的技术。该技术也用于图像处理。在那里,我们进行直方图归一化以增强对比度差的图像的对比度。
公式:
这里 ./ 和 .* 表示操作必须按元素执行。
脚步:
- 阅读图像。
- 将彩色图像转换为灰度。
- 显示直方图。
- 观察直方图中的最大和最小强度。
- 将图像类型从 uint8 更改为 double。
- 应用直方图归一化公式。
- 转换回单位格式。
- 显示图像和修改后的直方图。
例子:
Matlab
% MATLAB code for
% Histogram normalisation.
% Read the image.
k=imread("lincoln.jfif");
% Convert into grayscale
k1=rgb2gray(k);
% Display the image and histogram.
imtool(k1,[]);
imhist(k1);
% Set the minimum and maximum
% Values from histogram.
min=45;
max=180;
% Convert image into double.
k2=double(k1);
% Apply the formula.
k3=(k2-min)./(max-min);
% Multiply with maximum possible value.
k4=k3.*255;
% Convert the final result into uint8.
k5=uint8(k4);
% Display the enhanced image and histogram.
imtool(k5,[]);
imhist(k5);
输出:
代码说明:
- 首先,我们使用 imread()函数读取图像。
- 读取图像后,我们将其转换为灰度格式。
- 将其转换为灰度后,我们显示图像及其直方图。
- 从直方图中记录了最大和最小强度。
- 图像数据类型从 uint8 更改为 double,以方便计算步骤。
- 应用归一化公式。
- 图像数据类型更改回 uint8。