直方图
直方图是图象的一种统计表达,反映了图中灰度的分布情况。
直方图处理以概率论为基础,常用的方法主要有直方图均衡化和直方图规定化。
直方图均衡化:自动增强,效果不易控制,总得到全图增强的结果
直方图规定化:有选择地增强,须给定需要的直方图,可特定增强的结果
直方图均衡化
直方图均衡化是一种利用灰度变换自动调节图像对比度质量的方法,基本思想是通过灰度级的概率密度函数求出灰度变换函数,它是一种以累计分布函数变换法为基础的直方图修正法。
通俗点说就是:
把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布,说的简单点,就是把原来的图像的灰度分配均匀,使得0-255都有一定的取值,这样对比度相对大些,视觉上更好看。
主要作用: 增强动态范围偏小的图像的反差 。
基本思想: 把原始图的直方图变换为在整个灰度范围内均匀分布的形式,增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。直方图更一般的(归一化的)概率表达形式 :
上式中,n 是图像里像素的总个数。通过图像里像素的总个数归一化,所得到的直方图表达了比例。
实现步骤
直方图均衡化处理的步骤如下:
- 求出给定待处理图像的直方图
- 利用累计分布函数对原图像的统计直方图做变换,得到新的图像灰度。
- 进行近似处理,将新灰度代替旧灰度,同时将灰度值相等或相近的每个灰度直方图合并在一起
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("输出图像直方图");
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("灰度输出图像直方图");
直方图规定化
直方图规定化的基本思想:有目的的增强某个灰度区间的图像,即能够人为地修正直方图的形状,使之与期望的图像相匹配。
直方图规定化是在运用均衡化原理的基础上,通过建立原始图像和期望图像之间的关系,选择地控制直方图,使原始图像的直方图变成规定的形状,从而弥补了直方图均衡不具备交互作用的特性。
方法步骤
直方图的规定划的方法步骤:
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('匹配之后图像直方图');
彩色图像效果
灰度图像效果