我是靠谱客的博主 整齐花生,最近开发中收集的这篇文章主要介绍HDR 拍照模式的原理,实现及应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

HDR 拍照:
        (High Dynamic Range Imaging)高动态范围成像,是用来实现比普通数字图像技术更大曝光动态范围(即更大的明暗差别)的一组技术。
高动态范围成像的目的就是要正确地表示真实世界中从太阳光直射到最暗的阴影这样大的范围亮度。现在一般的数码相机和手机中都实现这种拍照模式。


适合场景:
        比较适合在阴暗变化明显的场景下使用,这样能使明处的景物不致过曝,而使得暗处的景物不致欠曝。譬如逆光环境下拍人物,可以将人物和环境都能拍清晰。
或者说能将处在暗处的景物拍摄出来的细节表现得更加充分!


下面来看几组照片:

                          图1

如上图1中所示,开启 HDR 后,暗处的树和墙壁都获得正确的曝光,都能看得清楚。

 

                                                 图2

  

                            图3

如上图3中开启了 HDR, 左上角及楼道里的场景能拍得更亮一些。图片均来自网络!


具体实现方法:

        其实现方法是通过设三组 ev 值来对当前拍摄的景物曝光,一张照片是使用当前测光从而算出来的正常情况下的ev值曝光,另外两张则分别使用其0.5倍的ev值和2倍的ev值进行曝光。最终对三张照片按某种算法进行合成,暗处的景物使用2倍ev曝光的局部照片,而亮处的物体则使用0.5倍ev曝光的局部照片。这样就能使得整个照片的场景都不致于太亮或太暗。



代码实现:
在 xxxALPS.JB3.TDD.MP.V2_TD_xxxmediatekcustomcommonkernelimgsensorov5645_mipi_yuvov5645mipiyuv_Sensor.c 驱动文件中有这样一个函数
BOOL OV5645MIPI_set_param_exposure_for_HDR(UINT16 para)
{
    kal_uint32 totalGain = 0, exposureTime = 0;
	OV5645MIPISENSORDB("[OV5645MIPI]enter OV5645MIPI_set_param_exposure_for_HDR function:n ");
	OV5645MIPISENSORDB("[OV5645MIPI]enter para=%d,manualAEStart%dn",para,OV5645MIPISensor.manualAEStart);
    if (0 == OV5645MIPISensor.manualAEStart)
    {       
        OV5645MIPI_set_AE_mode(KAL_FALSE);//Manual AE enable
        spin_lock(&ov5645mipi_drv_lock);	
        OV5645MIPISensor.manualAEStart = 1;
		spin_unlock(&ov5645mipi_drv_lock);
    }
	totalGain = OV5645MIPISensor.currentAxDGain;
    exposureTime = OV5645MIPISensor.currentExposureTime;
	switch (para)
	{
	   case AE_EV_COMP_20:	//+2 EV
       case AE_EV_COMP_10:	// +1 EV
		   totalGain = totalGain<<1;
           exposureTime = exposureTime<<1;
           OV5645MIPISENSORDB("[4EC] HDR AE_EV_COMP_20n");
		 break;
	   case AE_EV_COMP_00:	// +0 EV
           OV5645MIPISENSORDB("[4EC] HDR AE_EV_COMP_00n");
		 break;
	   case AE_EV_COMP_n10:  // -1 EV
	   case AE_EV_COMP_n20:  // -2 EV
		   totalGain = totalGain >> 1;
           exposureTime = exposureTime >> 1;
           OV5645MIPISENSORDB("[4EC] HDR AE_EV_COMP_n20n");
		 break;
	   default:
		 break;//return FALSE;
	}
	totalGain = (totalGain > OV5645MIPI_MAX_AXD_GAIN) ? OV5645MIPI_MAX_AXD_GAIN : totalGain;
    //exposureTime = (exposureTime > OV5645MIPI_MAX_EXPOSURE_TIME) ? OV5645MIPI_MAX_EXPOSURE_TIME : exposureTime;
    OV5645MIPIWriteSensorGain(totalGain);	
	OV5645MIPIWriteShutter(exposureTime);	
	OV5645MIPISENSORDB("[OV5645MIPI]exit OV5645MIPI_set_param_exposure_for_HDR function:n ");
	return TRUE;
}


此函数会执行三次,分别跑了 AE_EV_COMP_00, AE_EV_COMP_20, AE_EV_COMP_n20 这三个 case, 这三个 case 中分别以三组 totalGain 和 exposureTime 值来进行曝光的。
可以看到这三组值所呈现的0.5,1,2倍的关系。

参考文档:
http://bbs.fengbao.com/thread-236103-1-1.html
注:此篇文章中将 HDR 拍摄技巧描述得很好,有需要的可以详细看下

最后

以上就是整齐花生为你收集整理的HDR 拍照模式的原理,实现及应用的全部内容,希望文章能够帮你解决HDR 拍照模式的原理,实现及应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部