% Equalization.m
clear
%一,读取图像
originalpicture = imread('F:/personal/2_硕士/1_2_研一下学期/3_图像处理技术(李智)/2017.03.21/0_Equalization/lena512.bmp'); % 读入JPG彩色图像文件
imshow(originalpicture); % 显示出来
%二,绘制直方图
[m, n] = size(originalpicture); % 测量图像尺寸参数
GP = zeros(1, 256); % 预创建存放灰度出现概率的向量
% 通过循环计算每级灰度出现的概率,将其存入GP中相应位置
for k = 0 : 255
GP(k + 1) = length(find(originalpicture == k)) / (m * n);
end
figure, bar(0 : 255, GP, 'g'); % 绘制直方图
title('原图像直方图');
xlabel('灰度值');
ylabel('出现概率');
% 三,直方图均衡化
% 创建新的灰度级概率表,将灰度级概率进行累加,使灰度级概率的峰值变宽,图像变得更加细腻。
% S1 = zeros(1, 256);
% for i = 1 : 256
% for j = 1 : i
% S1(i) = GP(j) + S1(i); % 计算Sk
% end
% end
% 直方图均衡化
% 创建新的灰度级概率表,将灰度级概率进行累加,使灰度级概率的峰值变宽,图像变得更加细腻。
s1 = zeros(1, 256);
for i = 1 : 256
for j = 1 : i
s1(i) = GP(j) + s1(i);
end
end
% 将灰度级进行映射。
% S2 = round((S1 * 256) + 0.5); % 将Sk归到相近级的灰度
%
% for i = 1 : 256
% GPeq(i) = sum(GP(S2 == i)); % 计算现有每个灰度级出现的概率
% end
% 将灰度级进行映射。
newgray = round((s1 * 256) + 0.5);
for i = 1 : 256
% 计算现有每个灰度级出现的概率
GPeq(i) = sum(GP(newgray == i)); % #ok<SAGROW>
end
figure, bar(0 : 255, GPeq, 'b'); % 显示均衡化后的直方图
title('均衡化后图像的直方图');
xlabel('灰度值');
ylabel('出现概率');
% 四,图像均衡化
equalizationpicture = originalpicture;
for i = 0 : 255
% 将各个像素归一化后的灰度值赋给这个像素
equalizationpicture(find(originalpicture == i)) = newgray(i + 1);
end
figure, imshow(equalizationpicture); % 显示均衡化后的图像
title('均衡化后图像');
imwrite(equalizationpicture, 'PicEqual.bmp');