数字图像处理--(03)数字图像增强之直方图操作(MATLAB)

简介: 数字图像处理--(03)数字图像增强之直方图操作(MATLAB)

直方图


直方图是图象的一种统计表达,反映了图中灰度的分布情况。

直方图处理以概率论为基础,常用的方法主要有直方图均衡化和直方图规定化。

直方图均衡化:自动增强,效果不易控制,总得到全图增强的结果

直方图规定化:有选择地增强,须给定需要的直方图,可特定增强的结果

直方图均衡化


直方图均衡化是一种利用灰度变换自动调节图像对比度质量的方法,基本思想是通过灰度级的概率密度函数求出灰度变换函数,它是一种以累计分布函数变换法为基础的直方图修正法。

通俗点说就是:

把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布,说的简单点,就是把原来的图像的灰度分配均匀,使得0-255都有一定的取值,这样对比度相对大些,视觉上更好看。

主要作用: 增强动态范围偏小的图像的反差 。

基本思想: 把原始图的直方图变换为在整个灰度范围内均匀分布的形式,增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。直方图更一般的(归一化的)概率表达形式 :

image.png

上式中,n 是图像里像素的总个数。通过图像里像素的总个数归一化,所得到的直方图表达了比例。

实现步骤


直方图均衡化处理的步骤如下:

  1. 求出给定待处理图像的直方图
  2. 利用累计分布函数对原图像的统计直方图做变换,得到新的图像灰度。
  3. 进行近似处理,将新灰度代替旧灰度,同时将灰度值相等或相近的每个灰度直方图合并在一起

MATLAB实现直方图均衡化处理的函数是:J=histeq(I,n):I为输入的原图像,J为直方图均衡化后得到的图像,n为均衡化后的灰度级数,默认值为64

MATLAB实现


Matlab图像处理工具箱提供了用于直方图均衡化的函数histeq(),调用语法如下:[J,T]=histeq(I)

I是原始图像,J是经过直方图均衡化的输出图像,T是变换矩阵

图像归一化:将图像转换成唯一的标准形式以抵抗各种变换,从而可消除同类图像不同变形体之间的外观差异

灰度归一化:当图像归一化用于消除灰度因素(光照)等造成的图像外观变化时,称为灰度归一化.

编写均衡化函数


clc;
clearall;closeall;
img=imread('../img1.jpg');
subplot(2,2,1);imshow(img);title("原始图像");
subplot(2,2,2);imhist(img);title("原始图像直方图");
%%进行灰度统计[H,W]=size(img);
nk=zeros(1,256);
fori=1 : Hforj=1: Wnk(img(i,j)+1) =nk(img(i,j)+1)+1;
endend%%计算灰度分布pk=zeros(1,256);
pk=nk/ (H*W);
%%计算累计直方图分布sk=zeros(1,256);
sk(1)=pk(1);
fori=2:256sk(i) =sk(i-1) +pk(i); 
end%%累积分布取整数值归一化kt=zeros(1,256);
kt=uint8(255.*sk );
%%对图像均衡化o_img=zeros(size(img));
fori=1 : Hforj=1: Wo_img(i,j)=kt(img(i,j)+1);
endendo_img=uint8(o_img);
subplot(2,2,3);imshow(o_img);title("输出图像");
subplot(2,2,4);imhist(o_img);title("输出图像直方图");

image.png

histeq函数使用


clc;
clearall;closeall;
gray1=uint8(imread('../gray1.jpg'));
o_gray1=histeq(gray1);
subplot(2,2,1);imshow(gray1);title("灰度原始图像");
subplot(2,2,2);imhist(gray1);title("灰度原始图像直方图");
subplot(2,2,3);imshow(o_gray1);title("灰度输出图像");
subplot(2,2,4);imhist(o_gray1);title("灰度输出图像直方图");

image.png

直方图规定化


直方图规定化的基本思想:有目的的增强某个灰度区间的图像,即能够人为地修正直方图的形状,使之与期望的图像相匹配。

直方图规定化是在运用均衡化原理的基础上,通过建立原始图像和期望图像之间的关系,选择地控制直方图,使原始图像的直方图变成规定的形状,从而弥补了直方图均衡不具备交互作用的特性。

方法步骤


直方图的规定划的方法步骤:

1.分别计算原图像与目标图像的累计概率分布

2.分别对原图像与目标图像进行直方图均衡化操作

3.利用组映射关系使原图像直方图按照规定进行变换

代码实现


clearI=imread('../img1.jpg');%读取图像Imatch=imread('../img2.jpg');%读取匹配图像Jmatch=imhist(Imatch);%获取匹配图像直方图Iout=histeq(I,Jmatch);%直方图匹配figure;%显示原图像、匹配图像和匹配后的图像subplot(1,3,1),imshow(I);title('原图像');
subplot(1,3,2),imshow(Imatch);title('匹配图像');
subplot(1,3,3),imshow(Iout);title('匹配之后图像');
figure;%显示原图像、匹配图像和匹配后图像的直方图subplot(3,1,1),imhist(I,64);title('原图像直方图');
subplot(3,1,2),imhist(Imatch,64);title('匹配图像图像直方图');
subplot(3,1,3),imhist(Iout,64);title('匹配之后图像直方图');

彩色图像效果


image.png

image.png

灰度图像效果


image.png

image.png

目录
相关文章
|
2月前
|
编解码 资源调度
MATLAB | 绘图配色第九期带高斯分布的直方图
MATLAB | 绘图配色第九期带高斯分布的直方图
43 0
|
2天前
|
算法 计算机视觉 异构计算
基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证
该内容展示了FPGA实现图像累积直方图的算法。使用Vivado2019.2和matlab2022a,通过FPGA的并行处理能力优化图像处理。算法基于像素值累加分布,计算图像中像素值小于等于特定值的像素个数。核心代码为`test_image`模块,读取二进制图像文件并传递给`im_hist`单元,生成直方图和累积直方图。
|
1月前
|
计算机视觉
数字图像处理笔记(一)Matlab实现直方图均衡化
数字图像处理笔记(一)Matlab实现直方图均衡化
|
3月前
|
机器学习/深度学习 存储 算法
毕业论文:基于matlab的数字图像分割技术研究及实现(分享需要的同学)
毕业论文:基于matlab的数字图像分割技术研究及实现(分享需要的同学)
|
5月前
专题一MATLAB基础知识——1.3变量及其操作
专题一MATLAB基础知识——1.3变量及其操作
47 0
|
8月前
|
运维 新能源 C语言
不平衡电网条件下基于变频器DG操作的多目标优化研究(Matlab代码&Simulink实现)
不平衡电网条件下基于变频器DG操作的多目标优化研究(Matlab代码&Simulink实现)
|
8月前
|
编解码 算法 Java
基于Gabor-小波滤波深度图表面法线的特征提取算法【通过正常Gabor-小波的直方图进行2D或3D特征提取】研究(Matlab代码实现)
基于Gabor-小波滤波深度图表面法线的特征提取算法【通过正常Gabor-小波的直方图进行2D或3D特征提取】研究(Matlab代码实现)
MATLAB系统环境、数值数据与变量及其操作
MATLAB系统环境、数值数据与变量及其操作
|
9月前
|
算法 数据安全/隐私保护
一种基于Arnold变换的数字图像加密算法(Matlab代码实现)
一种基于Arnold变换的数字图像加密算法(Matlab代码实现)
|
9月前
|
机器人 定位技术 计算机视觉
基于DIPUM工具箱对图书数字图像进行处理(Matlab代码实现)
基于DIPUM工具箱对图书数字图像进行处理(Matlab代码实现)

热门文章

最新文章