% 读取彩色lenna图像(请从课程主页下载)
img,map = imread('lenna.jpg');
% 转化为灰度图像
g = zeros(512,512);
for x=1:512
for y=1:512
% 对每一个像素的RGB分量分别乘以系数0.2989,0.5870,0.1140再相加
g(x,y) = img(x,y,1) * 0.2989 + img(x,y,2) * 0.5870 + img(x,y,3) * 0.1140;
end
end
g = uint8(g);
% 显示lenna灰度图像
figure;
imshow(g);
% 计算直方图
hist = zeros(256,1);
for x=1:512
for y=1:512
% 获取灰度值
level = g(x,y)+1;
% 累加
hist(level) = hist(level)+1;
end
end
% 显示直方图
figure;
bar(hist);
% 计算直方图的累积分布 CDF
cdf = zeros(256,1);
c = 0;
for l=1:256
c = c + hist(l);
cdf(l) = c;
end
% 直方图均衡化
geq = uint8(zeros(512,512));
for x=1:512
for y=1:512
% 原灰度为 l 的像素被映射为灰度为 cdf(l)*256/(512*512)
level = g(x,y)+1;
geq(x,y) = cdf(level)*256/(512*512);
end
end
%显示均衡化后的图像
figure;
imshow(geq);
% 计算均衡化后图像的直方图
hist = zeros(256,1);
for x=1:512
for y=1:512
% 获取灰度值
level = geq(x,y)+1;
% 累加
hist(level) = hist(level)+1;
end
end
% 显示直方图
figure;
bar(hist);