如何在 MATLAB 中使用直方图均衡执行对比度增强?
图像增强是一种方式 加强 照片/图像对人类观众或图像处理设备性能的外观。图像增强策略 或许 分为空间区域和频率区域。 _有5个 空间域中的图像增强算法 FPGA技术的使用。
这些算法如下:
- 中值滤波器
- 对比拉伸_
- 直方图均衡
- 消极的 图像变换
- 幂律变换
有几个 导致缺乏增强的原因:
- 使用的成像设备质量差,
- 缺乏运算符信息
- 不利的 外部的 条件或环境 条件 在捕获时。
图像增强有两种方法:
- 去噪
- 对比度增强
在本文中,我们将看到使用直方图均衡化的对比度增强。直方图均衡是一种扩大直方图动态范围的数学技术。有时直方图跨越一个短范围。
脚步:
- 找出在直方图的水平轴上表示的每个值的频率,即图像中的强度。
- 计算每个强度值的概率密度函数。
- 找到 PDF 后,计算每个强度频率的累积密度函数。
- CDF 值在 0-1 范围内,因此我们将所有 CDF 值乘以强度的最大值,即 255。
- 将最终值四舍五入为整数值。
使用的函数:
- imread( ) 是用于读取图像的内置函数。
- size( ) 是用于获取图像大小的内置函数。
- rgb2gray( ) 是用于将 RGB 图像转换为灰度图像的内置函数。
- zeros(row, col) 是用于创建 row*col 零矩阵的内置函数。
- unit8( ) 是用于将双精度值转换为整数格式的内置函数。
- imshow() 是用于显示图像的内置函数。
- title( ) 是用于将标题附加到图像的内置函数。
- pause( ) 是用于暂停系统执行下一条语句的内置函数。
例子:
Matlab
% MATLAB code for Histogram equalisation
% function to return resultant
% image: Apply on single channel only.
function new_img=myhisteq(img)
Freq=zeros(1,256);
[x,y,z]=size(img);
% Convert into grayscale if
% image is coloured.
if(z==3)
img=rgb2gray(img);
end
% Calculate frequency of each
% intensity value.
for i=1:x
for j=1:y
Freq(img(i,j)+1)=Freq(img(i,j)+1)+1;
end
end
% Calculate PDF for each intensity value.
PDF=zeros(1,256);
Total=x*y;
for i=1:256
PDF(i)=Freq(i)/Total;
end
% Calculate the CDF for each intensity value.
CDF=zeros(1,256);
CDF(1)=PDF(1);
for i=2:256
CDF(i)=CDF(i-1)+PDF(i);
end
% Multiply by Maximum intensity value
% and round off the result.
Result=zeros(1,256);
for i=1:256
Result(i)=uint8(CDF(i)*(255));
end
% Compute the new image.
mat=zeros(size(img));
for i=1:x
for j=1:y
mat(i,j)=Result(img(i,j)+1);
end
end
new_img=mat;
imshow(img, []);
caption = sprintf("Original input Image");
title(caption, 'FontSize', 14);
drawnow;
pause(5);
imshow(new_img, []);
caption = sprintf("Original output Image");
title(caption, 'FontSize', 14);
drawnow;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Utility Code
k=imread("poor_contrast_image.png");
myhisteq(k);
输出:
直方图均衡是一个伟大的 图像增强的方法。它提供了更好的 图像质量_ 没有 缺乏任何信息。此方法全局应用直方图均衡。我们也可以在图像的小块中应用这种方法以增强对比度。该技术称为自适应直方图均衡。 AHE 比简单的 HE 更有效。