ダウンサンプリング理論
導入
この記事では、 Zivid の点群をダウンサンプリングする方法に関する理論を解説します。 SDK の実装にご興味がある場合は、 ダウンサンプル 記事をご覧ください。
N番目のピクセルをすべて保持しない理由は?
画像をダウンサンプリングする際の目的は、画質をできる限り維持しながら画像のサイズを縮小することです。
ダウンサンプリングの一般的な方法は、2番目、3番目、4番目などのピクセルを保持し、残りを破棄することです。しかし、センサー上のカラーフィルターのため、これは必ずしも理想的ではありません。例として、 ベイヤーフィルターモザイク を見てみましょう。4x4 画像のベイヤーフィルターモザイクグリッドを以下に示します。
注釈
Zivid の点群座標系は(0,0)から始まります。
このフィルターでは、カメラの各ピクセルがモザイク上の1つのカラーフィルターに対応します。
ピクセルを一つおきに保持するダウンサンプリングアルゴリズムを考えてみましょう。保持されるすべてのピクセルは、同じカラーフィルターに対応します。
(1,1) (1,3) (3,1) (3,3) → 青
(2,1) (2,3) (4,1) (4,3) → 緑
(1,2) (1,4) (3,2) (3,4) → 緑
(2,2) (2,4) (4,2) (4,4) → 赤
推奨されるダウンサンプリング手順
データ品質を維持するためには、すべてのピクセルを考慮し、均等なピクセルグリッド(2x2、4x4、6x6など)でダウンサンプリングを実行する必要があります。以下に、画像サイズを半分に縮小する(例:4x4から2x2へ)ための推奨手順を示します。
RGB値のダウンサンプリング(カラー画像)
新しい画像の各ピクセル値は、元の画像の 2x2 ピクセルグリッドごとに、各チャンネル R、G、および B の値を平均することによって計算します。たとえば、新しい R 値を計算するには、次のようにします。
G と B の値についても同様の手順を繰り返してください。
XYZ 値のダウンサンプリング (点群)
点群データの場合、NaN 値も処理する必要があります。R、G、B 色値と同様に、新しい画像の X、Y、Z ピクセル値は、元の画像の 2x2 ピクセルグリッドごとに計算する必要があります。通常の平均ではなく、各座標に対して SNR 加重平均値を使用します。 Zivid が SNR をどのように使用するかを確認するには SNR ページ を参照してください。
ピクセルの X、Y、Z 座標が NaN 値を持つ場合がありますが、そのピクセルの SNR は NaN になりません。これは、ピクセルの座標の 1 つが NaN 値を持つかどうかを確認する基本的なチェックを行うことで処理できます。 X、Y、Z 座標のいずれかに NaN 値を持つピクセルがあるかどうかを確認します。存在する場合は、そのピクセルの SNR 値をゼロに置き換えます。これは、たとえば Z 座標が NaN であるピクセルを選択し、SNR 値をゼロに設定することで実行できます。
ここで \(isNAN()\) は、入力座標が NaN であるピクセルのみを選択する論理マスク関数です。
次のステップでは、2x2 ピクセルグリッドごとに SNR 値の合計を計算します。
この後、初期画像の各ピクセルの重みを計算します。
\(NaN \cdot 0 = NaN\) の代わりに \(NaN \cdot 0 = 0\) となるよう処理する必要がないようにするには、次のようにすることをお勧めします。
最後に、X、Y、Z 座標値を計算できます。新しい X を計算する例を次に示します。
Y と Z の値についても同じことを行う必要があります。