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

来源:互联网 发布:macd优化 编辑:程序博客网 时间:2024/05/21 08:49
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=0for 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%计算图像各像素的灰度累计分布hphp(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;   endendhp(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('出现概率');%计算图像各像素的灰度累计分布hphp=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)));  endgnewGp%画出均衡后的图像的直方图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);


    
  

 


原创粉丝点击