数字图像处理-空间域图像增强(二)(直方图)

空间域的直方图处理分两个方法:直方图均衡化直方图规定化。直方图规定化中利用了直方图均衡化。


直方图均衡化:(转自http://blog.csdn.net/honpey/article/details/8770919)

直方图均衡化的作用是图像增强。

有两个问题比较难懂,一是为什么要选用累积分布函数,二是为什么使用累积分布函数处理后像素值会均匀分布。

第一个问题。均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界。综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。

第二个问题。累积分布函数具有一些好的性质,那么如何运用累积分布函数使得直方图均衡化?比较概率分布函数和累积分布函数,前者的二维图像是参差不齐的,后者是单调递增的。直方图均衡化过程中,映射方法是

其中,n是图像中像素的总和,是当前灰度级的像素个数,L是图像中可能的灰度级总数。

来看看通过上述公式怎样实现的拉伸。假设有如下图像:


得图像的统计信息如下图所示,并根据统计信息完成灰度值映射:


映射后的图像如下所示:

以上就是直方图映射均衡化的步骤,当然还有一些基于此的更优算法,比如Photoshop中的方法,在此就不一一列举了,大同小异。

参考:

http://blog.csdn.net/zrongh/article/details/7302816               直方图均衡化原理

http://bbs.ednchina.com/BLOG_ARTICLE_219471.HTM     直方图均衡化


直方图规定化:(转自:http://blog.csdn.net/juyingmin/article/details/5675851)

原理:
       在实际应用中,希望能够有目的地增强某个灰度区间的图像, 即能够人为地修正直方图的形状, 使之与期望的形状相匹配,这就是直方图规定化的基本思想。换句话说,希望可以人为地改变直方图形状,使之成为某个特定的形状,直方图规定化就是针对上述要求提出来的一种增强技术,它可以按照预先设定的某个形状来调整图像的直方图。直方图规定化是在运用均衡化原理的基础上,通过建立原始图像和期望图像之间的关系,选择地控制直方图,使原始图像的直方图变成规定的形状,从而弥补了直方图均衡不具备交互作用的特性。

 

例如:Pr (r)为原图像的灰度密度函数, Pz (z)为希望得到的增强图像的灰度密度函数,二者的直方图如下:

 

直方图规定化增强处理的步骤如下:

  1,其增强原理是先对原始的直方图均衡化:S = T(r)

  2,同时对规定的直方图均衡化:v = G(z)

 3,由于都是均衡化,故令 S = v,则:z = G-1(v) = G-1[T(r)] 

 

组映射:

存在一维离散整数函数I(a),(a=0,1,2……N-1),而且满足0≤I(0) ≤I(1) ≤……≤I(a) ≤……≤I(N-1) ≤M-1。寻找能使 |∑ps(si)-∑pu(uj)| 达到最小的I(a),其中ps(si)的求和区间为[0I(a)]pu(uj)的求和区间仍为[0a]a=0时,将介于0I(0)之间的ps(si)都映射到pu(u0)中;1≤a≤N-1时,将介于I(a-1)+1I(a)之间的ps(si)都映射到pu(uj)中去。

代码:

根据希望达到的直方图数据,对当前图像直方图转换,得到转换的直方图数据。

 
 

 

[cpp]  view plain copy
  1. void HistogramSpecification(int* src, int* dst, int* histMap)  
  2. {  
  3.     int x = 0, y = 0, i = 0;  
  4.     int minX = 0;  
  5.     int minValue = 0;  
  6.     int srcMin[256][256];  
  7.     short lastStartY = 0, lastEndY = 0, startY = 0, endY = 0;  
  8.     //计算原始图像到目标图像累积直方图各灰度级的差的绝对值  
  9.     for (y = 0; y < 256; y++)  
  10.     {  
  11.         for (x = 0; x < 256; x++)  
  12.         {  
  13.             srcMin[x][y] = abs(src[y] - dst[x]);  
  14.         }  
  15.     }  
  16.   
  17.     //GML映射  
  18.     for (x = 0; x < 256; x++)  
  19.     {  
  20.         minValue = srcMin[x][0];  
  21.         for (y = 0; y < 256; y++)  
  22.         {  
  23.             if (minValue > srcMin[x][y])  
  24.             {  
  25.                 endY = y;  
  26.                 minValue = srcMin[x][y];  
  27.             }  
  28.         }  
  29.   
  30.         if (startY != lastStartY || endY != lastEndY)  
  31.         {  
  32.             for (i = startY; i <= endY; i++)  
  33.             {  
  34.                 histMap[i] = x;//建立映射关系  
  35.             }  
  36.             lastStartY = startY;  
  37.             lastEndY = endY;  
  38.             startY = lastEndY + 1;  
  39.         }  
  40.     }  
  41. }  


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值