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

步骤总结:


OpenCV数字图像处理四:直方图均衡化 数组示例_第1张图片OpenCV数字图像处理四:直方图均衡化 数组示例_第2张图片OpenCV数字图像处理四:直方图均衡化 数组示例_第3张图片

直方图均衡示例

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

   OpenCV数字图像处理四:直方图均衡化 数组示例_第4张图片OpenCV数字图像处理四:直方图均衡化 数组示例_第5张图片

 

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

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);
    
 OpenCV数字图像处理四:直方图均衡化 数组示例_第6张图片OpenCV数字图像处理四:直方图均衡化 数组示例_第7张图片 

 


你可能感兴趣的:(HP)