OpenCV BM には、歪みのないステレオ画像を処理するために主に次の 3 つのステップがあります。
1. 前処理フィルタリング: 画像の明るさを正規化し、画像のテクスチャを強化します。
2. ステレオマッチング: 水平エピラインに沿ったマッチング検索に SAD ウィンドウを使用します。
3. 再フィルタリング: 不適切な一致点を削除します。
マッチング後、左右の視差チェックが有効な場合はdisp12MaxDiff >= 0を使用し、
cv::validateDisparity は、左右の視差チェックを実行します。
最後に、マッチング ウィンドウはオブジェクトの一方の側で前景をキャプチャし、もう一方の側で背景をキャプチャするため、ブロックベースのマッチングではオブジェクトの境界付近でいくつかの問題が発生します。
これにより、大小の視差を持つ局所領域 (スペックル) が生成されますが、このスペックルはfilterSpeccklesでフィルタリングして除去できます。
1 前処理フィルタリング
プレフィルタリング (Pre-filter) では、左右 2 つの補正画像を並行して計算し、画像の明るさを正規化し、画像の質感を高めます。
前処理フィルターでは、入力画像を正規化することで、明るさの差を減らし、画像の質感を向上させます。
X 方向のソーベル操作では、X 方向の画像テクスチャを強化し、同時に画像の明るさを正規化できます
(画像の明るさの勾配の近似値を計算し、[0, 2ftzero]、ftzero: 前処理フィルターのカットオフに正規化します)価値)。
「正常化された応答」TODO
この処理は画像全体上でウィンドウを移動することで実現されており、ウィンドウサイズは[5×5、7×7…21×21]です。
最後に、フィルタリングされた 2 つの画像が取得され、マッチングの次のステップに使用されます。
2ステレオマッチング
即ステレオ対応。
ステレオマッチング: 水平エピポーララインに沿ったマッチング検索にSADウィンドウを使用、マルチパス並列計算
結果: 視差マップが生成されます。
左の画像の各特徴について、右の画像の対応する行が検索され、最も一致するものが見つかります。
補正後は各ラインがエピポーララインとなるため、右画像の一致位置は左画像の同じライン上にある必要があります。
(つまり、同じ y 座標を持ちます)。
フィーチャに十分な検出可能なテクスチャがあり、右側のカメラ ビューに位置している場合は、図に示すように一致する位置を見つけることができます。
左の特徴ピクセルが(x 0 , y 0 )に位置する場合、水平の前方平行カメラ配置では、次のようになります。
その一致点 (存在する場合) はx 0と同じ線上になければなりません。
3 再フィルタリング
または、ポストフィルター ポストフィルターで、悪い一致を除外します。
ポストフィルタリングプロセスはステレオマッチング後に開始され、視差の一意性パーセンテージ ( uniqueness_ratio ) が 0 より大きい場合にのみ実行されます。
不正なマッチング点を削除し、誤ったマッチングを防ぎます。
一致する値には多くの場合、サイドローブに囲まれた強い中央ピークという特徴があるため、
したがって、視差ウィンドウ内の最低コストが(1 + uniquenessRatio / 100)に次に低いコストを掛けたものである場合、
最低コストに対応する視差値がピクセルの視差であり、それ以外の場合、ピクセルの視差は 0 です。つまり、SAD のしきい値は次のとおりです。
int const thresh = minsad + (minsad * uniquenessRatio / 100); 。
したがって、[0, nDisp) のnDisp SAD の合計で idx をチェックします。
idx が [minDispIdx – 1, minDispIdx + 1] の範囲にない場合、
SAD 値が thresh 以下の場合、視差は無効です。
for (d = 0; d < nDisp; ++d) {
if (((d < minDispIdx - 1) || (d > minDispIdx + 1)) && (sad[d] <= thresh)) {
break;
}
}
if (d < nDisp) {
dptr[y * dstep] = FILTERED;
continue;
}
ステレオマッチングは主に画像の各ペア間の対応関係を見つけ出し、三角測量の原理に従って視差マップを取得します;視差情報を取得した後、元の画像の奥行き情報と3次元情報は次のように簡単に取得できます。投影モデル。ステレオ マッチング テクノロジは、主に次の要因の影響により、ステレオ ビジョンにおいて最も困難かつ重大な問題であると一般に考えられています。
(1) 光学的な歪みやノイズ(明るさ、色相、彩度などのアンバランス)
(2) 平滑面での鏡面反射
(3) 短縮化
(4) 遠近感の歪み
(5) 低質感(低質感)
(6) 反復的/曖昧なパターン
(7) 透明オブジェクト
(8) 重なりと不連続
現在、ステレオ マッチング アルゴリズムはコンピューター ビジョンにおける難点でありホットスポットです。アルゴリズムは多数ありますが、一般的な手順は次のとおりです。
A. マッチングコストの計算
マッチング コストの計算はステレオ マッチング アルゴリズム全体の基礎であり、実際にさまざまな視差の下でグレーの類似性を測定します。一般的な方法としては、階調差の二乗 SD (強度差の二乗)、階調差の絶対値 AD (強度差の絶対値) などが挙げられます。また、元のマッチングコストを計算する際に上限を設定することで、重ね合わせ処理におけるミスマッチングの影響を軽減することができます。マッチングコストを求める AD 法を例にとると、T は設定されたしきい値であり、次の式を計算に使用できます。
図18
B. マッチングコストの重ね合わせ
一般に、グローバル アルゴリズムは、元のマッチング コストに基づいて後続のアルゴリズム計算を実行します。領域アルゴリズムはウィンドウ重ね合わせを通じてマッチングコストの信頼性を高める必要があり、元のマッチングコストの差に応じて次のように分類できます。
図19
C. 視差の取得
对于区域算法来说,在完成匹配代价的叠加以后,视差的获取就很容易了,只需在一定范围内选取叠加匹配代价最优的点(SAD和SSD取最小值,NCC取最大值)作为对应匹配点,如胜者为王算法WTA(Winner-take-all)。而全局算法则直接对原始匹配代价进行处理,一般会先给出一个能量评价函数,然后通过不同的优化算法来求得能量的最小值,同时每个点的视差值也就计算出来了。
D、视差细化(亚像素级)
大多数立体匹配算法计算出来的视差都是一些离散的特定整数值,可满足一般应用的精度要求。但在一些精度要求比较高的场合,如精确的三维重构中,就需要在初始视差获取后采用一些措施对视差进行细化,如匹配代价的曲线拟合、图像滤波、图像分割等。
有关立体匹配的介绍和常见匹配算法的比较,推荐大家看看Stefano Mattoccia 的讲义 Stereo Vision: algorithms and applications,190页的ppt,讲解得非常形象详尽。