Lens Distort TOPは、Brown-Conradyモデルを使用して、画像からレンズディストーションを適用または除去します。これは、物理的なカメラから撮影された画像を補正したり、拡張現実(AR)で使用するためにレンダリングに歪みを適用したり、視覚効果として使用することができます。
Lens Distort TOPで使用される歪みアルゴリズムは、半径方向の歪み、接線方向の歪み、カメラマトリックスの3つの要素に分解することができます。
ラジアル ディストーションは、画像の中心(Optical Center パラメータで定義)からの距離に応じて、出力内のピクセルを相対的にシフトさせます。ラジアル歪みは k1、k2、k3 定数で制御され、k1 が最も効果が大きく、k3 が最も小さくなります。k 値が正の場合、画像が球体の表面に巻きついているような樽型または魚眼型の効果が得られます。負のk値は画像を内側に曲げ、ピンクッション効果または枕効果を作成します。半径方向の歪みの方程式は次のとおりです。
x_distorted = x * (1 + k1 * r^2 + k2 * r^4 + k3 * r^6)
y_distorted = y * (1 + k1 * r^2 + k2 * r^4 + k3 * r^6)
where,
r = distance from center
接線方向の歪みは、画素がカメラに対して傾いている面のように移動し、p1 と p2 パラメータで制御されます。p1 は符号に応じて画像を上下に傾け、p2 は画像を左右に傾けます。接線方向の歪みの方程式は以下の通りです。
x_distorted = x + (2 * p1 * x * y + p2 * (r^2 + 2 * x^2))
y_distorted = y + (p1 * (r^2 + 2 * y^2) + 2 * p2 * x * y)
where,
r = distance from center
カメラマトリクスは光学中心および焦点距離パラメータで定義され、ディストーションを適用する前に画像位置を変換するために使用されます。光学中心の値はディストーション効果の中心を制御し、焦点距離のパラメータは他の効果に対するスケールとして機能します。カメラマトリクスは、通常 3×3 のマトリクスで表されます。
fx 0 cx
0 fy cy
0 0 1
カメラレンズの歪み値は,OpenCV のキャリブレーションルーチン,あるいは特定のカメラ用の関数( KinectAzure TOP クラスを参照してください)を用いて決定することができます.
Barrel or Fisheye Radial Distortion, k > 0
Pillow or Pincushion Radial Distortion, k < 0
レイアウト] ページには、歪んだ(または歪んでいない)画像を出力画像フレーム内に配置する方法を制御するためのパラメータがあります。これらの機能は、画面外に投影される可能性のある入力画像の一部を保持したり、入力画像の解像度を保持したり、レンズ歪みパラメータが変化する場合に一貫した出力フレームを確立したりするのに役立ちます。
例えば、Post Transform パラメータを Optimal に設定し、Optimal Alpha を 1 に維持すると、入力画像全体が出力フレーム内に収まるように、歪んだ画像がスケーリングおよびシフトされるようになります。レイアウトパラメータをネイティブ解像度に切り替えると、入力画像のディテールが失われないように、出力解像度がスケーリングされます。Info CHOPをアタッチすると、出力画像からオリジナルの歪んだ画像を切り出すために使用できる関心領域(ROI)境界が提供されます。
レンズディストーションを反転させます。これは、同じパラメータで逆解析を無効にした別のレンズディストーションTOPで適用されたディストーションを *ほぼ* 元に戻します。レンズディストーションアルゴリズムは正確な逆解法を持たないため、元の画像と正確に一致しない近似的な方法が使用されます。近似の品質は、歪みの大きさによって異なります。さらに、近似アルゴリズムは k3 定数を使用しないため、画像の境界の外側で失われたコンテンツは再作成されませ ん。
1番目のラディアル ディストーション定数。k定数は、画素を画像の中心に近づけたり遠ざけたりする。0より大きい値では樽型や魚眼型、0より小さい値では枕型やピンクッション型の効果が得られます。k1はk3より大きな効果があります。
2番目のラジアル ディストーション定数。K1参照。
1番目のタンジェンシャル ディストーション定数。画像を上下に傾けます。
2番目のタンジェンシャル ディストーション定数。画像を左または右に傾けます。
3番目のラジアル ディストーション定数。(逆ディストーションでは使用しません)K1参照。
歪みの中心となるべき画像内の位置を指定します。選択した単位モードにより、位置は左下隅から測定した絶対位置として、または画像の中心から測定した相対位置として入力することができます。単位モードは、位置をピクセルで測定するか、正規化された座標で測定するかを制御します。
- Optical Center / center1
- Optical Center / center2
- R / relative
オプティカル センターは画像中心に対して-0.5から-0.5までの正規化座標で測定されます。
- A / absolute
オプティカル センターは画像の左下隅から正規化された座標(0~1)で測定されます。
- RP / pixelrel
オプティカル センターは画像の中心を基準とした画素座標で測定されます。
- AP / pixelabs
オプティカル センターは画像の左下隅から絶対ピクセル座標で測定されます。
カメラマトリクスの焦点距離成分は、正規化された解像度値またはピクセルとして記述されます。焦点距離は,他のディストーションパラメータに対するスカラーとして働きます.正規化単位モードは、ミリメートルやその他の物理単位を使用するシステムで使用できます。しばしば Fx や Fy と省略されます.詳しくは OpenCV を参照してください.
- Focal Lengths / focallength1
- Focal Lengths / focallength2
- F / fraction
焦点距離は分数座標または正規化座標で記述されます。
- P / pixels
焦点距離はピクセル単位で表記されます。
変換された画像を,最終的な出力画像空間内でどのように配置するかを設定します。この値は,入力画像のネイティブなピクセル解像度を保持したり,最終的な出力解像度とアスペクト比を確保したりするのに有効です。
- Scale to Fit / scale
変換された画像は、出力画像の完全な解像度とアスペクト比を満たすようにスケーリングされます。このモードは、特定の出力解像度やアスペクト比が必要な場合に有効です。
- Native Resolution / native
変換された画像は、元の解像度とアスペクト比を維持する方法で出力に配置されます。これは、出力解像度が入力解像度より小さい場合、画像が切り取られることを意味する場合があります。
出力画像が入力画像の境界を超える場合に、どのような値を使用するかを設定します。
- Hold / hold
入力画像の外側のエッジから色を伸ばして、出力画像の隙間を埋めます。
- Zero / zero
出力画像の空いた隙間は、すべてのチャンネルでゼロが埋められます。
- Repeat / repeat
入力画像は出力画像の隙間を埋めるようにタイル状に加工されます。
- Mirror / mirror
入力画像は、出力画像の隙間を埋めるために、ミラーリングとタイル化が行われます。
最適な事後変換を計算するときに、画像のどの部分を保存するかを決定します。0の場合、最適な変換は関心領域のみを含みます。1の場合,入力画像からすべてのピクセルを含むように変換されます.この値は,OpenCV の関数 getOptimalNewCameraMatrix で利用される ‘alpha’ 値と同じです.
レンズディストーションが適用された後、画像に加算変換を事前に実行するかどうかを選択します。これは最終的な画像フレーム内での歪んだ画像の位置決めやスケーリングに有効で、歪みによってフレーム外に移動してしまう入力画像の部分を保持するために使用することができます。
- None / none
追加の変換は行われません。
- Optimal / optimal
画像は,OpenCV の getOptimalNewCamera 行列によって与えられる最適な新しいカメラ行
に従って変換されます.Optimal Alpha パラメータの値によっては,このモードを利用して,入力画像が画像フレームの外側で失われることがないようにすることができます。
- Custom / custom
カスタムのcenterとscaleパラメータを有効にします。このオプションは、Lens Distort ページでカメラマトリックスに対する出力画像を修正するために使用します。
- New Camera Matrix / newmatrix
フレーム内で出力画像を位置決めするための新しいカメラマトリクスを入力します。Lens Distortページからカメラマトリクス値を入力すると、それ以上の変換は行われません。最適な新しいカメラマトリクス値を入力すると、最適変換モードを使用した場合と同じ結果になります。
出力画像フレーム内で変換された画像を移動させる新しいオプティカル センターのポジションを設定します。Optical Center パラメータと同じ値を使用すると、ポストディストーションオフセットが発生しません。Optimal Center 値を使用すると、Optimal transform モードと同じ結果になります。
- New Center / newcenter1
- New Center / newcenter2
新しいセンター値をどの単位するかを設定します。
- R / relative
中心は画像の中心を基準に-0.5から-0.5までの正規化座標で設定されます。
- A / absolute
中心は、画像の左下隅から正規化された座標(0~1)で設定されます。
- RP / pixelrel
中心は、画像の中心を基準としたピクセル座標で設定されます。
- AP / pixelabs
中心は、画像の左下隅から絶対ピクセル座標で設定されます。
出力画像フレームに対して変換された画像をスケーリングすることができる新しい焦点距離です。Focal Lengths パラメータと同じ値を使用すると、ポストディストーションのスケーリングは行われません。最適な焦点距離の値を使用すると、最適な変換モードと同じ結果になります。
- New Focal Lengths / newfocallength1
- New Focal Lengths / newfocallength2
New Focal Length Units / newfocallengthunit
- F / fraction
焦点距離は分数座標または正規化座標で表記されます。
- P / pixels
焦点距離はピクセル単位で表記されます。
出力画像フレーム内で歪んだ画像を移動させます。
- Center Offset / centeroffset1
- Center Offset / centeroffset2
Center Offset Unit / centeroffsetunit
- F / fraction
オフセット量は、出力画像に対する割合として-0.5~0.5で設定されます。
- P / pixels
オフセット量は入力画像の画素数で設定されます。
画像に対して、さらにポストディストーションスケールを実行します。このスケールは、元のカメラ行列に対する相対的なもので、1より大きい値を指定すると画像が引き伸ばされ、1より小さい値を指定すると画像が縮みます。
- Scale / scale1
- Scale / scale2
変換された画像をクロップして、画像の一部分だけが最終出力に表示されるようにします。カスタム解像度が指定されない限り、クロップされた領域が最終的な出力解像度を決定するために使用されます。
- None / none
トリミングは行いません。
- Region of Interest / roi
OpenCV の関数 getNewCameraMatrix によって定義される関心領域(ROI)は,最終的な出力をクロップするために利用されます.ROI は,変換後の関数によって自動的に更新されるので,このモードはカスタム変換を利用した場合でも動作します.しかし,変換後の画像から ROI をクロップしても,一般的には,変換やクロップを利用しない場合と同じ結果になります.
- Custom / custom
カスタムクロッピング領域をピクセル単位またはフレームに対する割合で入力します。付属の Info CHOP から ROI 値を入力すると、Region of Interest croppingモードを使用した場合と同じ結果になります。
左、下、右、上の順でカスタムトリミング領域を設定します。値は、画像に対する割合(0-1)または入力画像サイズのピクセル数で指定できます。付属の情報CHOPからROI値を入力すると、Region of Interest croppingモードを使用した場合と同じ結果になります。
カスタムトリミング領域の値の単位を設定します。画像の端数(0-1)、または入力画像サイズのピクセル単位とすることができます。
- F / fraction
- P / pixels
スケール値の単位を設定しますします。
- F / fraction
スケールは分数座標または正規化座標で表記されます。
- P / pixels
スケールはピクセルで表記されます。
TOP Common ページの章を参照
- Input 0 –
Lens Distort TOPのExtra Informationは、Info CHOPでアクセスできます。
- optimal_center_x
- optimal_center_y
- optimal_focallength_x
- optimal_focallength_y
- roi_left
- roi_bottom
- roi_right
- roi_top
Info Chop チャンネルの章を参照
Info Chop チャンネルの章を参照