【MATLAB图像处理2】 直方图的均衡化(附源码)

本文介绍了一种图像直方图均衡化的实现方法,通过MATLAB代码详细展示了从RGB图像转换为灰度图像,再到计算并应用均衡化映射的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直方图的均衡化,难点在于找到一个从原图像灰度值到输出图像灰度值的映射。

 

这里映射公式和推导过程如下:

 

 

 

这个没什么多说的 直接附源码

 

  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  2. %函数功能:图像直方图均衡化%%%%%  
  3. %作者:张小胖新欢是科研%%%%%%%%%  
  4. %时间:2013.9.27%%%%%%%%%%%%%%%  
  5. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  6. clear all;close all;clc;  
  7.   
  8. src=imread('D:\Documents\Desktop\lenna.JPG');         %%%%%%%读入原图像  
  9.   
  10. [m,n,q]=size(src);                    %%%%%%%%%%%%%%%%%计算图像大小  
  11.   
  12. dst1=zeros(m,n);                       %%%%%%%%%%%%%%%%%%%%%%%%%%%创建过渡矩阵           
  13. dst=dst1;                              %%%%%%%%%%%%%%%%%%%%%%%%%%创建均衡化后的空图像  
  14. for i=1:m  
  15.     for j=1:n  
  16.             dst1(i,j)=0.299*src(i,j,1)+0.587*src(i,j,2)+0.114*src(i,j,3);         %%%%%%%%%%%%%%%%%%%%RGB转灰度图,常见有3种算法,用整型数字会更快  
  17.     end  
  18. end  
  19.   
  20. p1=zeros(1,256);                                     %%%%%%%%%%%%%%%%%%创建空矩阵存储各像素值的频数  
  21. p2=zeros(1,256);  
  22. P=zeros(1,256);  
  23. dst1=uint8(dst1);                                       %%%%%%%%%%%%%%%%%%%%将浮点型灰度图转为整型  
  24. figure(1);  
  25. imshow(dst1);  
  26.   
  27. %%%%%%%%%%%统计各像素值的频数,并存储在p1中%%%%%%%%%%%%%%%%%%%%%%%%%  
  28. for i=1:m                                                                   
  29.     for j=1:n  
  30.            a=dst1(i,j);  
  31.            p1(a+1)=p1(a+1)+1;  
  32.     end  
  33. end  
  34. X=0:255;  
  35. figure(2)  
  36. subplot(1,2,1);plot(X,p1);            %%%%%%%%%%%%%%%%显示原图像灰度直方图  
  37.   
  38. p=p1/(m*n);                              %%%%%%%%%%%%%%%计算原图像灰度概率密度  
  39.   
  40.   
  41. %%%%%%%%%%%%%计算原图像灰度值的分布函数%%%%%%%%%%%%%%%%%%%%%%  
  42. P(1)=p(1);                                 
  43. for b=2:256  
  44.     P(b)=P(b-1)+p(b);  
  45. end  
  46.   
  47.   
  48.   
  49. %%%%%%%%%%%%%%%%%均衡化%%%%%%%%%%%%%%%%  
  50.     for i=1:m;  
  51.         for j=1:n  
  52.               c=dst1(i,j);  
  53.               dst(i,j)=230*P(c+1);  
  54.             end   
  55.     end  
  56.   
  57. dst=uint8(dst);  
  58. figure(3);  
  59. imshow(dst);  
  60. %%%%%%%%%%%%%%%%%%%%%计算均衡化后的直方图%%%%%%%%%%%%%%%%  
  61. for i=1:m                                                                   
  62.     for j=1:n  
  63.            a=dst(i,j);  
  64.            p2(a+1)=p2(a+1)+1;  
  65.     end  
  66. end  
  67. Y=0:255;  
  68. figure(2)  
  69. subplot(1,2,2);plot(Y,p2);    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%函数功能:图像直方图均衡化%%%%%
%作者:张小胖新欢是科研%%%%%%%%%
%时间:2013.9.27%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;close all;clc;

src=imread('D:\Documents\Desktop\lenna.JPG');         %%%%%%%读入原图像

[m,n,q]=size(src);                    %%%%%%%%%%%%%%%%%计算图像大小

dst1=zeros(m,n);                       %%%%%%%%%%%%%%%%%%%%%%%%%%%创建过渡矩阵         
dst=dst1;                              %%%%%%%%%%%%%%%%%%%%%%%%%%创建均衡化后的空图像
for i=1:m
    for j=1:n
            dst1(i,j)=0.299*src(i,j,1)+0.587*src(i,j,2)+0.114*src(i,j,3);         %%%%%%%%%%%%%%%%%%%%RGB转灰度图,常见有3种算法,用整型数字会更快
    end
end

p1=zeros(1,256);                                     %%%%%%%%%%%%%%%%%%创建空矩阵存储各像素值的频数
p2=zeros(1,256);
P=zeros(1,256);
dst1=uint8(dst1);                                       %%%%%%%%%%%%%%%%%%%%将浮点型灰度图转为整型
figure(1);
imshow(dst1);

%%%%%%%%%%%统计各像素值的频数,并存储在p1中%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:m                                                                 
    for j=1:n
           a=dst1(i,j);
           p1(a+1)=p1(a+1)+1;
    end
end
X=0:255;
figure(2)
subplot(1,2,1);plot(X,p1);            %%%%%%%%%%%%%%%%显示原图像灰度直方图

p=p1/(m*n);                              %%%%%%%%%%%%%%%计算原图像灰度概率密度


%%%%%%%%%%%%%计算原图像灰度值的分布函数%%%%%%%%%%%%%%%%%%%%%%
P(1)=p(1);                               
for b=2:256
    P(b)=P(b-1)+p(b);
end



%%%%%%%%%%%%%%%%%均衡化%%%%%%%%%%%%%%%%
    for i=1:m;
        for j=1:n
              c=dst1(i,j);
              dst(i,j)=230*P(c+1);
            end 
    end

dst=uint8(dst);
figure(3);
imshow(dst);
%%%%%%%%%%%%%%%%%%%%%计算均衡化后的直方图%%%%%%%%%%%%%%%%
for i=1:m                                                                 
    for j=1:n
           a=dst(i,j);
           p2(a+1)=p2(a+1)+1;
    end
end
Y=0:255;
figure(2)
subplot(1,2,2);plot(Y,p2);  


效果如下

原图

 

 

均衡化后

 

直方图对比

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值