图像直方图均衡化c语言程序,数字图像处理——直方图均衡化

1、相关了解

直方图均衡化又称为直方图平坦化。直方图均衡化的基本思想是将原始图像的不均衡的直方图变换为均匀分布的形式。即将输入图像转化为在每一灰度级上都有相同的像素点数(即输出的直方图是平坦的,其分布为均匀分布)。直方图均衡化的结果扩展了像元取值的动态范围,从而达到增强图像整体对比度的效果。

2、相关实例:对UESTC_rain 图像进行直方图均衡化

① Matlab 程序代码:

方案一:

function

he

%by Yuanshuai ZhengUESTC

数字视觉视频技术exercise

histogram equalization

histgram=zeros(1,256);%生成直方图数组

cdf=zeros(1,256);%累积分布密度cdf

[uestc_rain,map]=imread('UESTC_rain.bmp');%读取图像

[m,n]=size(uestc_rain);

uestc_rain_equ=zeros(128,128);

for

i=1:m

for

j=1:n

k=uestc_rain(i,j)+1;

histgram(k)=histgram(k)+1;

end

end

%得到cdf

cdf(1)=histgram(1);

for

i=2:256

cdf(i)=cdf(i-1)+histgram(i);

end

%点运算

for

i=1:m

for

j=1:n

k=uestc_rain(i,j)+1;

uestc_rain_equ(i,j)=cdf(k)*256/(m*n);%均衡化后的直方图

end

end

uestc_rain_equ(:,[n/3:n])=[];

%imwrite(uestc_rain_equ,map,'uestc_rain_equ.bmp');%保存均衡化后的图像

%显示原图及均衡化后的图像,显示原直方图和均衡化后的直方图

figure(1);

imshow(uint8(uestc_rain));

figure(2);

imshow(uint8(uestc_rain_equ));

%imhist(uint8(uestc_rain));

%imhist(uint8(uestc_rain_equ));

方案二:

function

he2

%by Yuanshuai Zheng UESTC 数字视觉视频技术exercise histogram equalization

A=imread('UESTC_rain.bmp');

figure(1);

imshow(A);

A=rgb2gray(A);%转换成灰度图——关键一步!!!

figure(2);

imhist(A);

B=histeq(A,n);

figure(3);

imhist(B);

figure(4);

imshow(uint8(B));

处理结果

雨晴立人楼原图像

直方图均衡化处理后图像

原图像的直方图

均衡化后图像的直方图

③ 结果简析和反思

从图中可以明显看出,均衡化的图像的对比度明显大于原始图像。

第一种方法是利用直方图变化公式,过程比较繁琐。

第二种方法直接用MATLAB中的histeq即可完成大部分工作。需要注意的的是:要把三维图像转化成灰度图像之后才能用inhist!

你可能感兴趣的:(图像直方图均衡化c语言程序)