数字图像处理---直⽅图均衡化
直⽅图均衡化的英⽂名称是Histogram Equalization.
图像对⽐度增强的⽅法可以分成两类:⼀类是直接对⽐度增强⽅法;另⼀类是间接对⽐度增强⽅法。直⽅图拉伸和直⽅图均衡化是两种最常见的间接对⽐度增强⽅法。直⽅图拉伸是通过对⽐度拉伸对直⽅图进⾏调整,从⽽“扩⼤”前景和背景灰度的差别,以达到增强对⽐度的⽬的,这种⽅法可以利⽤线性或⾮线性的⽅法来实现;直⽅图均衡化则通过使⽤累积函数对灰度值进⾏“调整”以实现对⽐度的增强。
直⽅图均衡化处理的“中⼼思想”是把原始图像的灰度直⽅图从⽐较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直⽅图均衡化就是对图像进⾏⾮线性拉伸,重新分配图像像素值,使⼀定灰度范围内的像素数量⼤致相同。直⽅图均衡化就是把给定图像的直⽅图分布改变成“均匀”分布直⽅图分布。
缺点:
1)变换后图像的灰度级减少,某些细节消失;
2)某些图像,如直⽅图有⾼峰,经处理后对⽐度不⾃然的过分增强。
直⽅图均衡化是图像处理领域中利⽤图像直⽅图对对⽐度进⾏调整的⽅法。
这种⽅法通常⽤来增加许多图像的局部对⽐度,尤其是当图像的有⽤数据的对⽐度相当接近的时候。通过这种⽅法,亮度可以更好地在直⽅图上分布。这样就可以⽤于增强局部的对⽐度⽽不影响整体的对⽐度,直⽅图均衡化通过有效地扩展常⽤的亮度来实现这种功能。
这种⽅法对于背景和前景都太亮或者太暗的图像⾮常有⽤,这种⽅法尤其是可以带来X光图像中更好的⾻骼结构显⽰以及曝光过度或者曝光不⾜照⽚中更好的细节。这种⽅法的⼀个主要优势是它是⼀个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直⽅图,并且计算量也不⼤。这种⽅法的⼀个缺点是它对处理的数据不加选择,它可能会增加背景杂讯的对⽐度并且降低有⽤信号的对⽐度。
1.连续灰度值
r:待处理图像的灰度。假设r的取值区间[0,L-1], r = 0表⽰⿊⾊,r = L - 1表⽰⽩⾊。
变换形式: s = T(r);今天我生日
p r(r)和p s(s)分别表⽰变量 r 和 s 的概率密度函数(PDF)。
输出灰度变量s的PDF由输⼊灰度的PDF的变换函数:s = T(r) = (L - 1)∫p r(w)dw.
阿伊努人其中,w是积分的假变量。公式右边是随机变量 r 的累积分布函数(CDF).
新图像中的灰度的PDF是均匀的,p s(s) = 1/(L - 1);
2.离散灰度值
p r(r k) = n k/MN, k = 0,,L-1
其中,MN是图像中像素的总数,nk是灰度为rk的像素个数。
输出灰度变量s的PDF由输⼊灰度的PDF的变换函数:s k = T(r k) = ((L - 1)/MN)∑n j, k = 0,,L-1.
matlab调⽤⾃带函数编码实现:
f = imread('D:\图像处理\image\DIP3E_Original_Images_CH03\Fig0316(2)(2nd_from_top).tif');
f_enhance = histeq(f);
subplot(221)
imshow(f)养肺吃什么食物好
subplot(222)
imshow(f_enhance)
subplot(223)
imhist(f)
subplot(224)
imhist(f_enhance)
matlab⼿动实现:
f = imread('D:\图像处理\image\DIP3E_Original_Images_CH03\Fig0316(2)(2nd_from_top).tif');
[height,width] = size(f);
f_enhance = uint8(zeros(height,width));
合作的俗语%统计各灰度数⽬,共256个灰度级
Num_Pixel = zeros(1,256);
for i = 1:height
for j = 1:width
Num_Pixel(f(i,j) + 1) = Num_Pixel(f(i,j) + 1) + 1;
end
洗涤方法
end
%计算灰度分布密度
Prob_Pixel = zeros(1,256);
for i = 1:256
Prob_Pixel(i) = Num_Pixel(i)/ (height * width * 1.0);
end
毕业感悟
%计算累计直⽅图分布
Equalization_Pixel = zeros(1,256);
for i = 1:256
if i ==1
Equalization_Pixel(i) = Prob_Pixel(i);
el
Equalization_Pixel(i) = Equalization_Pixel(i - 1) + Prob_Pixel(i);
end
end
%对灰度值进⾏映射(均衡化)
pixel_max=255;
pixel_min=0;
亲切近义词for i = 1:height
for j = 1: width
f_enhance(i,j) = Equalization_Pixel(f(i,j)+1)*(pixel_max-pixel_min)+pixel_min;
end
end
subplot(221)
imshow(f)
subplot(222)
imshow(f_enhance)
subplot(223)
imhist(f)
subplot(224)
imhist(f_enhance)
显⽰:
上⾯代码在⼿动实现时本想调⽤matlab⾃带函数求概率分布以及转换后的灰度值,实现过程中发现⽤以下⽅法⾏不通,⽆法把均衡后的灰度值替换回去,还未解决,不知⽤以下⽅法是否有解决办法,希望有⽼师愿意指导⼀下,谢谢!
f = imread('D:\图像处理\image\DIP3E_Original_Images_CH03\Fig0316(2)(2nd_from_top).tif'); [m,n] = imhist(f);%进⾏像素灰度级统计
x = m ./ numel(f);%概率近似
y = zeros(1,256);
for i = 1:256
if i == 1
人力资源管理专业y(i) =x(i);
el
y(i) =(y(i-1) + x(i));
end
end
y = 255 * y; %直⽅图均衡化