OpenCV数字图像处理四:直方图均衡化 数组示例

clear all;
close all;
clc;
I=[1 5 255 255 100 200 255 200;
    17 254 255 100 10 10 9;
    37 10 100 100 2 9 6;
    36 10 10 9 2 8 2;
    21 8 8 9 3 4 2;
    10 7 8 8 3 2 1;
    11 8 8 7 2 2 1;
    23 9 8 7 2 2 0]
% I=imread('Fig36.bmp');
% %I=rgb2gray(I);
% figure(3)
% imshow(I);
[m,n]=size(I)
I1=max(I);%求每一列的最大值
Imax=max(I1)%求出最大的值
 
I3=min(I);%求每一列的最小值
Imin=min(I3)%求出最小的值
k(Imax-Imin)=4; 
hs(Imax-Imin)=5;
p=0
for p=Imin:Imax-1
   for j=1:n
       for i=1:m
          if I(i,j)==p
               k(p+1)=k(p+1)+1;
          end         
       end
   end
   p=p+1;
    %画出原始图像的直方图
    figure(1)  
    bar(p,k(p));hold on;
    %计算出原始图像的每个像素值的概率
   hs(p)=k(p)/(m*n);
   sum(hs);
end
%计算图像各像素的灰度累计分布hp
hp(Imax-Imin)=0;
hp(1)=hs(1);
for x=2:(Imax-Imin)
   hp(x)=hs(x)+sum(hp(x-1));
   if hs(x)==0
       hp(x)=0;
   end
end
hp(255)=1
%求新图像的灰度值
for y=1:(Imax-Imin)
   g(y)=255*hp(y);
    %画出均衡后的图像的直方图
   figure(2)  
   bar(y,g(y));hold on;
end

步骤总结:


直方图均衡示例


   

 

以上错误:现将代码更正为:

clear all;
close all;
clc;
% I=[1 5 255 255 100 200 255 200;
%     1 7 254 255 100 10 10 9;
%     3 7 10 100 100 2 9 6;
%     3 6 10 10 9 2 8 2;
%     2 1 8 8 9 3 4 2;
%     1 0 7 8 8 3 2 1;
%     1 1 8 8 7 2 2 1;
%     2 3 9 8 7 2 2 0]
I=imread('Fig36.bmp');
%I=rgb2gray(I);
figure(4)
imshow(I);
[m,n]=size(I)
I1=max(I);%求每一列的最大值
Imax=max(I1)%求出最大的值


I3=min(I);%求每一列的最小值
Imin=min(I3)%求出最小的值
k=zeros(1,256);  
hs=zeros(1,256);


for p=1:256
    k(p)=length(find(I==(p-1)));  
    %计算出原始图像的每个像素值的概率
    hs(p)=k(p)/(m*n);
    sum(hs);
    p=p+1;
end
%画出原始图像的直方图
figure(1)   
bar(0:255,hs);hold on;
title('原图像直方图');  
xlabel('灰度值');  
ylabel('出现概率');


%计算图像各像素的灰度累计分布hp
hp=zeros(1,256);
hp(1)=hs(1);
for x=2:256
    hp(x)=hs(x)+sum(hp(x-1));
end
%求新图像的灰度值
for y=1:256
    g(y)=round(256*hp(y)); 
    newGp(y)=sum(hs(find(g==y)));  
end
g
newGp
%画出均衡后的图像的直方图
figure(2)   
bar(0:255,newGp);
title('均衡化后的直方图');  
xlabel('灰度值');  
ylabel('出现概率');  

newI=I; %填充各像素点新的灰度值  
for i=1:256  
    newI(find(I==(i-1)))=g(i);  
end  
figure(3)   
imshow(newI);


    
  

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值