簡體   English   中英

如何在相機預覽中消除滾動快門效果?

[英]How to remove rolling shutter effect in camera preview?

我正在嘗試通過拍攝閃爍的 LED 來將數據發送到我的手機。 這在大多數情況下都可以正常工作,但是對於某些幀,我的相機預覽中會出現滾動快門效果,這會擾亂我的數據傳輸。 有沒有辦法消除這種卷簾效應?

我正在使用 Google 的 cameraAPI2 和 Nexus 6(但我在三星 S7 上看到了同樣的效果)。 我以 20 fps 的速度錄制,LED 以 20 Hz 的頻率閃爍。 我的圖像格式為 320x240,帶有 YUV_420_888。 這是我當前對 CaptureRequest 的設置:

CONTROL_AE_MODE CONTROL_AE_MODE_OFF

CONTROL_AWB_MODE CONTROL_AWB_MODE_OFF

EDGE_MODE EDGE_MODE_OFF

CONTROL_MODE CONTROL_MODE_OFF

SENSOR_EXPOSURE_TIME 500000

SENSOR_FRAME_DURATION 50000000

我已經嘗試過使用曝光時間和幀持續時間,但沒有效果。 只需打開股票相機應用程序並拍攝 LED 近景,即可觀察到相同的效果。 例子

圖片右半部分為舊框架,左半部分為新框架。

有沒有辦法來解決這個問題? Android 有攝像頭垂直同步嗎?

編輯:我將頻率更改為 20Hz。

編輯 2 :我通過使用 opencv 對圖像執行 Canny 邊緣檢測和標准霍夫線變換來使其工作。 從霍夫線變換中得到線坐標后,我檢查了線是否水平。 然后我沿着這條線分割圖像,只使用較大的區域進行計算。

卷簾快門效應源於具有 CMOS 圖像傳感器的相機通常逐行(或逐列)順序讀取像素數據,因此構成一個圖像幀的單獨行/列不會在同一點捕獲及時。

沒有“相機垂直同步”,因為卷簾快門是圖像傳感器構建方式的物理屬性。

除了切換到全局快門圖像傳感器(如 CCD 或一些較新的 CMOS 傳感器)之外,您還可以嘗試提高相機的快門速度/減少曝光時間以盡量減少問題。

您可以參考這個問題作為如何找出相機可用快門速度的具體方向。

更新:您可以嘗試將相機的快門速度設置為最快設置,然后將 LED 閃爍頻率與相機幀速率(1/30 秒)相匹配。 這樣,LED 的閃爍應該始終在圖像采集的同一時間點,並且您不應該再遇到卷簾快門效果的任何問題。

Update2:正如評論中所討論的,您的設置現在似乎是這樣工作的。 您有一個 LED 可以每 50 毫秒更改一次 state(開或關)。 您有一台相機,它可以在 50 毫秒的時間內捕獲一個場景以生成一張圖像。 最左邊的列是這 50 毫秒的開始,最右邊的列是這 50 毫秒的結束(反之亦然,你需要弄清楚)。 由於 LED 的 50 ms 周期與相機的 50 ms 捕獲時間不同步,因此 LED 的 state 變化可能會發生在所產生的相機圖像的中間,這會將圖像在黑暗中分開,明亮的一半。

以下是隨機 LED 序列在圖像上的樣子:

LED sequence:   ... 0  |  1  |  1  |  0  |  1  |  0  |  0  |  0 ...

Image sequence: ... | 0 1 | 1 1 | 1 0 | 0 1 | 1 0 | 0 0 | 0 0 | ...

管道表示 LED 何時可能更改 state 以及圖像何時完成一幀捕獲。

正如您在圖中看到的,假設頻率相同,新舊 state 之間的圖像分界將始終保持在同一圖像列。 您所要做的就是檢測線在哪里分割圖像(應該可以通過一些計算機視覺實現),然后只查看圖像的一半以查看那一半是否發生變化。 理想情況下,您應該查看稍后記錄的那一半,因為那會為您提供來自 LED 的最新信息。

我希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM