WEB开发网
开发学院软件开发VC VC++编程实现对曝光不足照片的修复 阅读

VC++编程实现对曝光不足照片的修复

 2010-06-15 20:39:54 来源:WEB开发网   
核心提示:引言一般来说,照相产生缺陷的原因主要有对焦不准、光圈选择不合适以及暴光不足等几种情况,VC++编程实现对曝光不足照片的修复,前两种情况的偶然性较强,而曝光不足虽也具有一定的偶然性但对于某些特殊情况比如暗中侦察等不方便使用闪光灯的场合则较为普遍,然后根据计算出的累计直方图分布tk按式tk=[(N-1)* tk+0.5]对

引言

一般来说,照相产生缺陷的原因主要有对焦不准、光圈选择不合适以及暴光不足等几种情况,前两种情况的偶然性较强,而曝光不足虽也具有一定的偶然性但对于某些特殊情况比如暗中侦察等不方便使用闪光灯的场合则较为普遍。因此,有必要对曝光不足的照片提出一种比较通用的照片修复处理方法。

修复方法的设计

根据照相的一般原理:物体反射的光线经过透镜投影到胶片上,胶片上的感光颗粒根据光线的强弱做出不同程度的分解从而显现出不同的颜色。当没有使用闪光灯或暴光时间过短而造成照片曝光不足时,照射在胶片上的光线强度不够或照射时间过短均会使感光颗粒分解不完全,冲洗出来的照片就会发暗,下图便是一幅实际的曝光不足照片,可以看出整幅照片很昏暗,除了位于左下的三、四个大字隐约可见外,几乎看不出该照片到底拍了些什么。

虽然感光颗粒由于曝光不足而使照片显地昏暗,但由于同一胶片上的感光颗粒的感光程度仍是同真实物体所反射光线成比例的,因此在胶片上实际仍保存了真实物体的大部分信息,只是由于曝光不足造成的分解不完全使冲洗出的照片灰度分布过于集中,并超出了人眼对灰度级的分辨程度,才造成了视觉上的不可见。通过程序对照片做灰度分布统计(如下图所示)也可以看出照片的灰度分布主要集中在0 ~ 100之内,这显然是很暗的了。

基于以上几点认识,在进行照片修复时只要将过于集中的灰度分布按照一定的规则将其均匀分布于整个灰度区间即可在视觉上得到相当程度的改善。在这方面的处理方法中,灰度均衡化和灰度规定化(含单映射和组映射两种规则)应用较为广泛,但后者需要根据图象的不同人为规定好适当的预期灰度分布规则才能得到满意的效果,如果预期灰度分布规定不当则处理效果会很差,因此后者的通用性不好。而前者在处理时则只需要将当前的灰度分布均衡的分布于整个灰度区间即可,虽然对于某一幅特定的图象处理效果可能不及灰度规定化,但通用性却要好的多,对任意的图象均可获得相当不错的处理效果。

灰度均衡化处理算法

灰度均衡化处理对图像的增强过程可用增强函数t = EH(s)来表示,其中t和s分别表示目标图象和原始图象上的像素点(x,y),在进行均衡化处理时对增强函数EH需要满足两个条件:增强函数EH(s)在0≤s≤255的范围内是一个单调递增函数,这个条件保证了在增强处理时没有打乱原始图像的灰度排列次序。另一个需要满足的条件是对于0≤s≤255应当有0≤EH(s)≤255,它保证了变换过程灰度值的动态范围的一致。同样的,对于反变换过程s=EH-1(t),在0≤t≤1时也必须满足上述两个条件。累计分布函数(cumulative distribution function,CDF)即是满足上述条件的一种,通过该函数可以完成s到t 的均匀分布转换。此时的增强转换方程为:

tk = EH(sk) = (ni/n) = ps(si) ,(k=0,1,2,……,255)

上述求和区间为0到k,根据该方程可以由源图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布tk按式tk=[(N-1)* tk+0.5]对其取整并得出源灰度sk到tk的灰度映射关系,其中N为灰度的级数。在重复上述步骤得到所有的源图像各灰度级到目标图像各灰度级的映射关系后按照新的映射关系对源图像各点像素进行灰度转换即可完成对源图的直方图均衡化。

1 2 3  下一页

Tags:VC 编程 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接