14

アプリで 30 秒の露出時間で画像をキャプチャしようとしています (ストック カメラで許可されているため、可能であることはわかっています)。

しかし、 SENSOR_INFO_EXPOSURE_TIME_RANGE (ナノ秒単位であるはずです)は範囲を教えてくれます:

13272 - 869661901

数秒でそれはちょうどでしょう

0.000013272 - 0.869661901

これは明らかに1秒未満です。

より長い露出時間を使用するにはどうすればよいですか?

前もって感謝します!。

4

2 に答える 2

28

あなたの質問への答え

できません。正しい情報を正確にチェックし、正しく解釈しました。それよりも長い露出時間に設定した値は、その最大量にクリップされます。

あなたが望む答え

ただし、偽造することで、必要なものを取得できます。30 秒間連続してセンサーに当たるフォトンが必要ですが、これは取得できません。しかし、わずかな欠落間隔が点在する 30 秒分のフォトンを蓄積することで、(事実上) それと区別がつかないものを得ることができます。

List大まかに言えば、必要なことはof を作成してCaptureRequestに渡すことCameraCaptureSession.captureBurst(...)です。これにより、可能な限り最小限のインタースティシャル タイムでショットが撮影されます。画像データの各フレームが利用可能になったら、それをどこかの新しいバッファーに渡し、情報を蓄積します (単純な点ごとの加算)。これはおそらくAllocation、出力として を使用しSurface、いくつかの RenderScript を使用して行うのが最も適切です。

データ形式に関する注意事項

  • これを行う正しい方法は、RAW_SENSOR可能であれば出力形式を使用することです。そうすれば、蓄積された出力は、30 秒間にわたってセンサーに入射した光に正比例します。

  • 何らかの理由でそれを使用できない場合は、YUV_420_888出力を使用することをお勧めします。トーン マップ カーブを線形に設定することをお勧めします (残念ながら、2 つのポイントでカーブを作成して手動で行う必要があります)。そうしないと、導入された非線形性によってスキームが台無しになります。RAW_SENSOR(単純な加算が線形 YUV 空間で正確に正しいかどうかはわかりませんが、少なくとも最初のアプローチです。) このアプローチを使用するか . 「正しく見える」ようにします。

  • ピートの愛のために、JPEG出力を使用しないでください。多くの理由がありますが、その理由の 1 つは、これにより露出間に多くのインタースティシャル時間が追加される可能性が高く、それによって連続露出での 30 秒の概算が台無しになることです。

曝露当量に関する注意

これにより、必要な露出がほぼ正確に生成されますが、完全ではありません。それは2つの点で異なります。

  1. この露出時間のチャンクの途中で、フォトン情報が欠落している小さな期間があります。しかし、あなたが話している時間スケール (30 秒) では、あちこちで数ミリ秒の光が失われるのは些細なことです。

  2. 画像は、30 秒の真の単一露出を撮影した場合よりもわずかにノイズが多くなります。これは、実際のセンサーからピクセル値を読み取るたびに、情報にわずかな電子ノイズが追加されるためです。したがって、最終的には、この追加ノイズ (特定の問題に対する 35 回の露出から) は、1 回の露出の 35 倍になります。申し訳ありませんが、これを回避する方法はありませんが、目立たない場合もあります。これは通常、意味のある写真信号に比べてかなり小さいものです。それはカメラセンサーの品質に依存します(およびISOですが、このアプリケーションではそれが高くなる必要があると思います.)

  3. (ボーナス!) この露出は、実際には 1 つの方法で優れています。30 秒の露出で飽和した可能性のある領域 (真っ白) は、これらのはるかに短い露出でも定義を保持するため、基本的にハイエンドを失うことはありません。詳細。:-)

于 2015-10-01T21:10:55.853 に答える