HDR 拍照模式的原理,实现及应用
生活随笔
收集整理的這篇文章主要介紹了
HDR 拍照模式的原理,实现及应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HDR 拍照:
? ? ? ? (High Dynamic Range Imaging)高動態范圍成像,是用來實現比普通數字圖像技術更大曝光動態范圍(即更大的明暗區別)的一組技術。
高動態范圍成像的目的就是要正確地表示真實世界中從太陽光直射到最暗的陰影這樣大的范圍亮度。如今一般的數碼相機和手機中都實現這樣的拍照模式。
適合場景:
? ? ? ? 比較適合在陰暗變化明顯的場景下使用,這樣能使明處的景物不致過曝,而使得暗處的景物不致欠曝。譬如逆光環境下拍人物,能夠將人物和環境都能拍清晰。
或者說能將處在暗處的景物拍攝出來的細節表現得更加充分!
以下來看幾組照片:
代碼實現:
在 xxx\ALPS.JB3.TDD.MP.V2_TD_xxx\mediatek\custom\common\kernel\imgsensor\ov5645_mipi_yuv\ov5645mipiyuv_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%d\n",para,OV5645MIPISensor.manualAEStart);if (0 == OV5645MIPISensor.manualAEStart){ OV5645MIPI_set_AE_mode(KAL_FALSE);//Manual AE enablespin_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 EVcase AE_EV_COMP_10: // +1 EVtotalGain = totalGain<<1;exposureTime = exposureTime<<1;OV5645MIPISENSORDB("[4EC] HDR AE_EV_COMP_20\n");break;case AE_EV_COMP_00: // +0 EVOV5645MIPISENSORDB("[4EC] HDR AE_EV_COMP_00\n");break;case AE_EV_COMP_n10: // -1 EVcase AE_EV_COMP_n20: // -2 EVtotalGain = totalGain >> 1;exposureTime = exposureTime >> 1;OV5645MIPISENSORDB("[4EC] HDR AE_EV_COMP_n20\n");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 拍攝技巧描寫敘述得非常好,有須要的能夠具體看下
? ? ? ? (High Dynamic Range Imaging)高動態范圍成像,是用來實現比普通數字圖像技術更大曝光動態范圍(即更大的明暗區別)的一組技術。
高動態范圍成像的目的就是要正確地表示真實世界中從太陽光直射到最暗的陰影這樣大的范圍亮度。如今一般的數碼相機和手機中都實現這樣的拍照模式。
適合場景:
? ? ? ? 比較適合在陰暗變化明顯的場景下使用,這樣能使明處的景物不致過曝,而使得暗處的景物不致欠曝。譬如逆光環境下拍人物,能夠將人物和環境都能拍清晰。
或者說能將處在暗處的景物拍攝出來的細節表現得更加充分!
以下來看幾組照片:
? ? ? ? ? ? ? ? ? ? ? ? ? 圖1
如上圖1中所看到的,開啟 HDR 后,暗處的樹和墻壁都獲得正確的曝光,都能看得清楚。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖2
??
? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖3
如上圖3中開啟了 HDR, 左上角及樓道里的場景能拍得更亮一些。圖片均來自網絡!
? ? ? ? 事實上現方法是通過設三組 ev 值來對當前拍攝的景物曝光,一張照片是使用當前測光從而算出來的正常情況下的ev值曝光,另外兩張則分別使用其0.5倍的ev值和2倍的ev值進行曝光。終于對三張照片按某種算法進行合成,暗處的景物使用2倍ev曝光的局部照片,而亮處的物體則使用0.5倍ev曝光的局部照片。這樣就能使得整個照片的場景都不致于太亮或太暗。
代碼實現:
在 xxx\ALPS.JB3.TDD.MP.V2_TD_xxx\mediatek\custom\common\kernel\imgsensor\ov5645_mipi_yuv\ov5645mipiyuv_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%d\n",para,OV5645MIPISensor.manualAEStart);if (0 == OV5645MIPISensor.manualAEStart){ OV5645MIPI_set_AE_mode(KAL_FALSE);//Manual AE enablespin_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 EVcase AE_EV_COMP_10: // +1 EVtotalGain = totalGain<<1;exposureTime = exposureTime<<1;OV5645MIPISENSORDB("[4EC] HDR AE_EV_COMP_20\n");break;case AE_EV_COMP_00: // +0 EVOV5645MIPISENSORDB("[4EC] HDR AE_EV_COMP_00\n");break;case AE_EV_COMP_n10: // -1 EVcase AE_EV_COMP_n20: // -2 EVtotalGain = totalGain >> 1;exposureTime = exposureTime >> 1;OV5645MIPISENSORDB("[4EC] HDR AE_EV_COMP_n20\n");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 拍照模式的原理,实现及应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell脚本中的并发(2)
- 下一篇: 从range和xrange的性能对比到y