数字图像处理(1):直⽅图均衡(1)
数字图像处理(1):直⽅图均衡化
定义
直⽅图均衡化是图像处理领域中利⽤图像直⽅图对对⽐度进⾏调整的⽅法。这种⽅法通常⽤来增加许多图像的全局对⽐度,尤其是当图像的有⽤数据的对⽐度相当接近的时候。通过这种⽅法,亮度可以更好地在直⽅图上分布。这样就可以⽤于增强局部的对⽐度⽽不影响整体的对⽐度,直⽅图均衡化通过有效地扩展常⽤的亮度来实现这种功能。
这种⽅法对于背景和前景都太亮或者太暗的图像⾮常有⽤,这种⽅法尤其是可以带来X光图像中更好的⾻骼结构显⽰以及曝光过度或者曝光不⾜照⽚中更好的细节。这种⽅法的⼀个主要优势是它是⼀个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直⽅图,并且计算量也不⼤。这种⽅法的⼀个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对⽐度并且降低有⽤信号的对⽐度。
例⼦
具体要求如下:
假定有64×64⼤⼩的图像,灰度分16级,概率分布如下表所⽰,试⽤直⽅图均衡的⽅法处理之。
附:源代码
解答
环境
编程语⾔:Matlab 2018b
语⾔:Matlab
处理直⽅图的步骤
直⽅图输⼊->计算概率->计算累加概率->计算均衡后的灰度级->输出灰度级直⽅图
步骤
(1).直⽅图输⼊
clc
count=[800,650,600,430,300,230,200,170,150,130,110,96,80,70,50,30]; N=4096;
x=16;
figure(1);
hold on;
bar(count)
OUT1=zeros(1,x);
(2)计算概率
PDF=count/N;%PDF±íʾÿ¸ö»Ò¶È¼¶±ð³öÏֵĸÅÂÊ£¬Ò»¹²ÓÐ256ÐÐ(3)计算累加概率:
CDF=cumsum(PDF);%CDF±íʾÖðÐÐÏà¼ÓµÄ¸ÅÂÊ£¬Ò²¾ÍÊÇÀÛ¼Ó¸ÅÂÊ(4)计算均衡后的灰度级:
for i=1:x
for j=1:count(i)
%d=round(CDF(i)*x-1);
OUT1(round(CDF(i)*x-1))=OUT1(round(CDF(i)*x-1))+1;
end
end
(5).输出灰度级直⽅图
figure(2);
hold on;
bar(OUT1
实验结果
原始图像的直⽅图
均衡后的直⽅图:
图像的直⽅图均衡化
代码
使⽤基本的图像读取⽅法和写⼊⽅法,编写matlab代码如下:
clear all;
clc;
close all;
f=imread('1.jpg');
[m,n,d]=size(f);%灰度图1维,彩⾊图3维
if d==1
f1=f;%复制后新的图⽚f1,作为改变后的图⽚
elseif d==3
f=rgb2gray(f);
f1=f;
end
figure
imhist(f)
[count,x]=imhist(f);%count表⽰每个灰度级别有多少个像素,x表⽰有多少个灰度级别PDF=count/(m*n);%PDF表⽰每个灰度级别出现的概率,⼀共有256⾏
CDF=cumsum(PDF);%CDF表⽰逐⾏相加的概率,也就是累加概率
for i=1:256
xiangsuxushu=find(f==i);%原本灰度级别为i的像素在第⼏位
changdu=length(xiangsuxushu);
for j=1:changdu
f1(xiangsuxushu(j))=round(CDF(i)*256-1);%每⼀个原本灰度级别为i的像素,
%灰度级别改为累加出现概率*256
%再取整
end
end
figure
imhist(f1)
figure
局部直方图均衡化subplot(1,2,1);
imshow(f)
subplot(1,2,2);
imshow(f1)
结果
1. 原始直⽅图:
2. 均衡化后的直⽅图:
3. 图⽚对⽐:
可见,直⽅图均衡化使灰度被拉开。MATLAB⾃带的直⽅图处理⼯具代码
可使⽤函数histeq()进⾏直⽅图均衡化处理:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。