📄 ch411_zb.m
字号:
%灰度图象的直方图均衡化
function zhisteq()
I=imread ('pout.tif');
% I=[ 0 1 2 2 2 2 2 2
% 7 0 0 0 0 0 0 0
% 4 4 4 4 4 4 4 4
% 3 2 1 2 3 2 1 2
% 3 4 5 3 4 5 3 4
% 1 1 3 3 5 5 7 7
% 6 6 4 4 2 2 0 0
% 6 7 5 4 3 2 1 0];
L=256; %灰度级
[row,col]=size(I);
Pr = zeros(1,L); %统计直方图结果数据
Sk= zeros(1,L);
Tk= zeros(1,L);
Gk= zeros(1,L);
G= zeros(row,col); %均衡化后的图像
n=row*col; %总像素个数
%------------均衡化-----------------
%nk=imhist(I); %生成直方图函数(L=256),返回灰度图象直方图数据
nk=zimhist(I,L); %自编生成直方图函数,灰度值任意
%计算直方图概率估计
Pr=nk/n; %概率估计,矩阵除以标量
%求累计直方图
Sk(1)=Pr(1);
for i=2:L
Sk(i)=Sk(i-1)+Pr(i);
end
%计算Tk(映射)
Tk=uint8(Sk*(L-1)+0.5); %矩阵除以标量,结果是矩阵
Tk=double(Tk);
%计算变换后的直方图,根据原直方图和映射换算新的直方图
Gk=double(Gk);
nk=double(nk);
for i=1:L
k=Tk(i)+1; %映射值:
Gk(k)=Gk(k)+nk(k); %累加是因为可能会有几个原来的灰度值映射为一个值
end
%根据原图和映射(Tk),生成新的增强后的图
I=double(I);
for i=1:row
for j=1:col
k=I(i,j)+1; %原图的灰度值
g(i,j)=Tk(k); %映射灰度值为新的灰度值
end;end;
figure(1),subplot(3,1,1);
subplot(3,1,1),plot(nk),title('原直方图(nk)');
subplot(3,1,2),plot(Gk),title('新直方图(Gk)');
subplot(3,1,3),plot(Tk),title('映射(Tk)');
I=uint8(I);g=uint8(g);
figure(2);
subplot(211),imshow(I),title('原图');
subplot(212),imshow(g),title('均衡化图');
function nk=zimhist(I,L)
nk=zeros(L,1);
[row,col]=size(I);
n=row*col; %总像素个数
for i = 1:row
for j = 1:col
num = double(I(i,j))+1; %获取像素点灰度级
nk(num,1) = nk(num,1)+1; %统计nk
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -