⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch411_zb.m

📁 灰度图象的直方图均衡化;梯度;直方图规定化;灰度图象的直方图数据;灰度直接变换:增强对比度
💻 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 + -