采取单映射规则的直方图规定化处理
前面介绍的直方图均衡化处理方法从实验效果看还是很不错的,从实现算法上也可以看出其优点主要在于能自动增强整幅图像的对比度,但具体的增强效果也因此不易控制,只能得到全局均衡化处理的直方图。而在科研和工程应用中往往根据不同的需要而希望得到特定形状的直方图分布以有选择的对某灰度范围进行局部的对比度增强。象这种情况可以采取对直方图的规定化处理,通过选择合适的规定化函数可以取得期望的效果。对于灰度级数分别为M和N(满足M≥N)的原始图和规定图,一般仍先按均衡化对原始图进行处理:
| tk = EHs(si) = ∑ps(si) ,(k=0,1,2,……,M-1) |
| vl = EHu(uj) = ∑pu(ui) ,(l=0,1,2,……,N-1) |

| float a=1.0f/(32.0f*63.0f); //64个灰度级,a为步长 for(int i=0;i<64;i++) { nu[i]=i*4; pu[i]=a*i; } |
| for(i=0;i<256;i++) { …… for(int j=0;j<64;j++) { float now_value=0.0f; //计算R分量的两累计直方图的绝对差值,并找到满足最小的灰度级 if(ps_r[i]-pu[j]>=0.0f) now_value=ps_r[i]-pu[j]; else now_value=pu[j]-ps_r[i]; if(now_value<min_value_r) { m_r=j; min_value_r=now_value; } …… //对G和B分量的代码与R分量类似,在此省略 …… } //建立灰度映射关系 ns_r[i]=nu[m_r]; ns_g[i]=nu[m_g]; ns_b[i]=nu[m_b]; } |
