1、問題背景
使用的安卓平臺,客戶的應用是要盡可能快的獲取到1幀圖像效果正常的圖片。
但當打開 camera 啟動出流后,前3-5幀圖像是偏暗、偏色的,如下圖所示,是抓取出流的前25幀圖像,
前3幀顏色是偏藍的,前10幀亮度是從暗到亮在收斂的。此現象是正常的嘛?該如何去解決呢?
2、問題分析
我們這里的應用是,打開 camera app 出圖, 就是 sensor 重新上電啟動的過程,退出 app 就是 sensor stream off 的過程。
ae,awb 要根據當前場景重新計算收斂,實際問題就是對 ae, awb 收斂速度的要求,計算能在幾幀內收斂完成。
具體還是要去看產品的應用,一般人眼去觀察的設備,對收斂速度要求不高,1s內(25fps)能收斂完成,就沒太大問題,感受也不明顯。
但對一些機器識別的應用,他是需要逐幀分析的,對穩(wěn)定出圖的速度是有要求的,如果是25fps內才能收斂完成,那對于識別的性能就要差很多了,也是不可接受的。
目前知道的解決方式有如下幾種:
1)最直接的就是優(yōu)化 ae、awb 的算法性能,即使場景再突變,也可以在2-3幀內就能收斂完成,而不帶來任何的副作用,比如震蕩,閃爍等等。
2)當固定場景下使用時(場景的照度固定、色溫固定),將當前場景下算法統(tǒng)計出的 ae,awb 的值,在驅動中配置成ae、awb的預設值。
啟流做初始化時,直接寫到相應的 sensor、isp 寄存器中,這樣用初始化參數輸出的圖像給到算法時,因為本身就是曝光正常,白平衡準確的,所以 ae, awb 幾乎不存在收斂的時間。
3)出流給到應用時,采用丟幀的方法,將前幾幀沒收斂完成的幀給丟棄掉,避免影響后續(xù)應用識別的準確性。但這就相當于出流慢了,對識別的速度肯定有影響。
4)退出 camera app 時,保存下當前 ae、awb 的值,當再次打開 camera app 時,將上次退出 camera app 保存下來的 ae、awb 的值,
在 sensor 出流以前,將 ae 的參數寫入到 sensor 寄存器,awb 的參數寫入到 isp 寄存器即可。
這樣也只能保證當場景不變時,反復打開關閉 camera app 出圖,前幾幀是一致的;當場景變化時,第一次打開時,出流會不一致。
驅動的同事在加上面(4)的策略,提出要加一個時間限制的判斷,比如當第二次打開相機app 與上一次打開的時間間隔超過1個小時,就用默認的預設值參數。
考慮到間隔時間長了,場景有可能會有變化,但其實默認的預設值,定義的就是一個固定場景下統(tǒng)計的 ae, awb 的參數,
即使回到默認值,效果也不一定就是好的,用上一次保存的歷史參數,有可能效果還更好,因為他是根據場景在變化的。