在图像的获取、传输等过程中往往会有诸多因素对图像带来一定的干扰,从而使得图像产生噪声、质量降低等现象,进而不能达到人们对图像的视觉要求。为了使图像充分的满足人们的需求,所以需要对图像进行相应的处理。
图像增强处理是对图像进行加工,使其结果对于特定的应用比原始图像更合适的一种处理。它能够提高图像整体和局部的对比度,突出图像的细节信息,从而使得增强后的图像更符合人眼的视觉特性且易于机器识别。图像增强没有通用的“理论”,不同的环境所使用的图像增强技术并不一定是相同的,比如对于增强X射线图像非常有用的方法,可能并不是增强由电磁波谱中远红外波段拍摄的图像的最好方法。图像增强应当注意以下四个方面:(1)提高图像整体和局部的对比度,图像增强算法不仅仅只是使图像整体的对比度提高,而且还能使得图像的局部细节信息得到相应的增强。(2)在增强图像的同时,应该避免放大噪声,这在一定程度上将会对图像质量造成影响。(3)增强后的图像应该具有良好的视觉效果,避免增强后的图像局部增强过度或过弱。(4)图像增强应该具备较好的实时性。近年来应用最为广泛的图像增强算法包含直方图均衡、小波变换、偏微分方程以及基于Retinex理论的图像增强算法。
本文主要讲述的图像增强算法是直方图均衡化。
直方图是多种空间域处理技术的基础,它表示了图像中每个灰度级与出现该灰度级的像素点个数的统计关系,反映了图像中每种灰度出现的概率。
假设I∈I(i,j)表示的是灰度级为L的图像,I(i,j)表示坐标位置为(i,j)处的灰度值,I(i,j)∈[0,L-1],图像I灰度级的概率密度函数定义为:
式中,N为像素点的总数,nk表示灰度级为k的像素点的个数。图像I灰度级的累积分布函数定义为:
标准的直方图均衡算法通过累积分布函数将原始图像映射为具有近似均匀灰度级分布的增强图像,相应的映射关系为:
MATLAB代码:
clc;
close all;
clear
image=imread('ball.tif');
[height,width,z]=size(image);
if z>1
Img=rgb2gray(image);
else
Img=image;
end
[hist,x1]=imhist(Img);
hist=hist./(height*width);
%% 统计每个灰度的像素值累计数目
NumPixel=zeros(1,256);
for s=1:height
for t=1:width
NumPixel(Img(s,t)+1)=NumPixel(Img(s,t)+1)+1;
end
end
%% 将每个灰度值的像素值累计数目转变成频率
ProbPixel=zeros(1,256);
for s=1:256
ProbPixel(s)=NumPixel(s)/(height*width);
end
CumuPixel=cumsum(ProbPixel);
CumuPixel=uint8(255.*CumuPixel+0.5);
%% 直方图均衡的反映射
for s= 1:height
for t = 1: width
HE(s,t) = CumuPixel(Img(s,t)+1);
end
end
[hist2,x2]=imhist(HE);
%% 显示图像
figure,subplot(121),imshow(Img),title('original image')
subplot(122),imshow(HE),title('histogram equalization')
结果图: