基于MATLAB的数字图像处理之直方图处理

最近看了冈萨雷斯的《数字图像处理》第三章直方图处理那块,感觉还是自己编编程写个总结学习效率高一点。

所谓直方图就是以灰度级为横轴,以该灰度出现的频率为纵轴绘制的一张图片。

先把要处理的图片贴上来:

先用imread把图片读进去:I=imread('3.jpg');

再转化为灰度图片:I=rgb2gray(I);

用imshow(I)看看效果:


 r=zeros(1,256); %创建一个下标从0到255的数组

for i=0:255  r(i+1)=length(find(I==i)); end%每个灰度级出现的像素数,注意下标不能为0

%find 函数返回所有满足条件的元素的下标,length求数组的长度。

[m,n]=size(I);

NUM=m*n;%总像素数

p=r/num;%p是每个灰度级出现的频率

%下面进行作图

bar(0:255,p)

%求s(k)

s=zeros(1,256);

for k=1:256

for j=1:k

s(k)=s(k)+p(j);

end

end

为什么这种累加运算会“均衡化”呢?

s(k)是r(k)的一个变化,但是,s(k)与r(k)没有直接关系,是对应灰度级概率的累加:

效果如下:

subplot(2,1,1);bar(0:255,r);subplot(2,2,1);bar(0:255,s);

但是s(k)的取值范围是0~1啊,所以要把它变回灰度值:

s=round(s*256+0.5);%round是就近取整,加上0.5之后就是向上取整了。

现在s是新的“加权”的灰度级:

 Columns 1 through 17

     1     1     1     1     1     1     1     1     2     5    12    17    22    29    36    42    48

  Columns 18 through 34

    52    56    60    64    68    73    76    79    81    84    87    89    91    92    94    95    97

  Columns 35 through 51

    98    98    99    99   100   100   101   101   101   101   102   102   102   102   102   102   103

  Columns 52 through 68

   103   103   103   103   103   103   104   104   104   104   104   104   105   105   105   105   105

  Columns 69 through 85

   105   106   106   106   106   106   106   107   107   107   107   107   107   108   108   108   108

  Columns 86 through 102

   108   109   109   109   109   110   110   110   111   111   111   111   112   112   112   113   113

  Columns 103 through 119

   113   113   114   114   114   115   115   115   116   116   116   117   117   117   118   118   118

  Columns 120 through 136

   119   119   119   120   120   120   121   121   121   122   122   123   123   123   124   124   125

  Columns 137 through 153

   125   126   126   126   127   127   128   128   128   129   129   129   130   130   131   131   131

  Columns 154 through 170

   132   132   132   133   133   133   134   134   134   135   135   136   136   136   137   137   137

  Columns 171 through 187

   138   138   138   139   139   139   140   140   140   141   141   141   142   142   142   143   143

  Columns 188 through 204

   143   143   144   144   144   145   145   145   146   146   146   146   147   147   147   147   148

  Columns 205 through 221

   148   148   148   149   149   149   149   150   150   150   150   151   151   151   151   152   152

  Columns 222 through 238

   152   152   153   153   153   153   154   154   154   154   155   155   155   155   156   156   156

  Columns 239 through 255

   156   157   157   157   158   158   158   159   159   159   160   160   161   162   162   163   164

  Column 256

   257

可以看出有些“不重要的”灰度级没有出现,而“重要的”灰度级则重复出现。

for i=1:256 P2(i)=sum(p(find(s==i)));

%P2(i)是新的概率,是“加权”灰度级等于“自然”灰度级的概率之和。

令i=159,则find(s==i)返回246,247,248.则P2(159)=p(246)+p(247)+p(248)

对每一个“自然”灰度,找到与它相等的“加权”灰度的下标,把原图对应的概率加起来。

即:求每一个“加权”灰度对应的概率。

像极了《概率论与数理统计》里头的求函数的概率密度有木有!!

就是:已知x,p(x),y=f(x),求p(y)一类题。

均衡化以后的直方图:

Q=I;

for i=0:255 Q(find(I==i))=s(i+1);%对每一级灰度,在原图上找到对应的像素点,用“加权”灰度替换原有的灰度。

end

看看效果吧!

imshow(Q);


哇啊啊,好像处理坏了,怎么这个效果啊,本人菜鸟一只,求大神指点!

匿了。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值