主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

特徴点のマッチングを使用した映像安定化

この例では,不安定なプラットフォ,ムから撮影されたビデオを安定化する方法を説明します。映像安定化の1つの方法は,イメージ内の際立った特徴を追跡し,これをアンカーポイントとして,それに対するすべての摂動を取り除くことです。ただし,この手続きは,最初のビデオフレームのどこに際立った特徴があるかについての知識を用いてブートストラップしなければなりません。この例では,そのような“事前”知識がなくても有効な,映像安定化の方法にいて説明します。この方法は,代わりにビデオシーケンス内の“背景面”を自動的に探索し,その観測された歪みを使ってカメラの動きを補正します。

この安定化アルゴリズムには2の手順があります。まず,2のestimateGeometricTransform2Dを適用して,ビデオシケンスにあるすべての隣接フレム間のアフィンメジ変換を決定します。次に,ビデオフレ,ムをワ,プさせてビデオを安定化します。アルゴリズムと表示の両方に计算机视觉工具箱™を使用します。

手順1:ムビファルからのフレムの読み取り

ここでは,ビデオシ,ケンスの最初の2フレ,ムを読み取ります。安定化アルゴリズムに色は必要なく,グレースケールイメージを使用すると速度が改善されるため,強度イメージとして読み取ります。以下に両方のフレームを並べて表示し,赤とシアンのカラー合成を作成して両者間のピクセル単位の差異を示します。2 .。

文件名=“shaky_car.avi”;hVideoSrc = videereader(文件名);imgA = rgb2gray(im2single(readFrame(hVideoSrc)));将第一帧读入imgAimgB = rgb2gray(im2single(readFrame(hVideoSrc)));将第二帧读入imgB图;imshowpair (imgA imgB,“蒙太奇”);标题([“帧”repmat (' '[70]),B帧的]);

图;imshowpair (imgA imgB,“ColorChannels”“red-cyan”);标题(颜色合成(框A =红色,框B =青色));

手順2:各フレ,ムからの際立った点の収集

ここでの目標は,2のフレ。これには,アフィン変換を返す関数estimateGeometricTransform2Dを使用できます。この関数への入力として,2のフレ。これらの対応関係を求めるには,まず両方のフレームから対象となる点を収集し,それらの間に想定できそうな対応関係を選択します。

この手順では,フレ,ムごとにこうした候補点を作成します。もう片方のフレームにこれらの点に対応する点が存在する可能性をできるだけ高めるには,コーナーなどの際立ったイメージ特徴の周りの点が必要です。これには、最速のコ、ナ、検出アルゴリズムの1を実行する関数detectFASTFeaturesを使用します。

下の図には,両方のフレ,ムから検出された点が表示されています。その中の多くが,木立ちの輪郭に沿った点,大きな交通標識のコーナー,自動車のコーナーなどの同じイメージ特徴をカバーしていることを確認してください。

ptThresh = 0.1;pointsA = detectFASTFeatures(imgA,“MinContrast”, ptThresh);pointsB = detectFASTFeatures(imgB,“MinContrast”, ptThresh);显示在图像A和B中找到的角。图;imshow (imgA);持有;情节(pointsA);标题(“A字角”);

图;imshow (imgB);持有;情节(pointsB);标题(“B角”);

手順3:点の対応関係の選択

次に,上記で得た点の間の対応関係を選択します。各点について,それを中心とする狂(快速视网膜关键点)記述子を抽出します。怪胎記述子はバaapl . aapl .ナリであるため,点の間のマッチングコストにはハミング距離を使用します。フレ,ムa,とフレ,ムb,にある点が推定的にマッチされます。一意性の制約はないため,フレ,ムbからの点がフレ,ムaの複数の点に対応する場合もあります。

为角落提取FREAK描述符[featresa, pointsA] = extractFeatures(imgA, pointsA);[featuresB, pointsB] = extractFeatures(imgB, pointsB);

現在のフレ,ムと前のフレ,ムで検出された特徴をマッチングします。怪胎記述子はバaapl . aapl .ナリであるため,関数matchFeaturesはハミング距離を使って対応する点を探します。

indexPairs = matchFeatures(featresa, featresb);pointsA = pointsA(indexPairs(:, 1),:);pointsB = pointsB(indexPairs(:, 2),:);

下のイメージは,先に提示したものと同じカラー合成を示していますが,フレーム一からの点が赤で,フレームBからの点が緑で追加されています。点の間に描かれた黄色いラesc escンは,上記の手続きで選択された対応関係を示しています。これらの対応関係の多くは正しいものですが,かなりの数の外れ値もあります。

图;showMatchedFeatures(imgA, imgB, pointsA, pointtsb);传奇(“一个”“B”);

手順4:表示ノ

前の手順で得られた点の対応関係の多くは正しくありません。しかし,RANSACアルゴリズムのバリエーションであるM-estimator样品一致(MSAC)アルゴリズムを使用して,2つのイメージ間における幾何学的変換のロバスト推定を導出することは可能です。Msacアルゴリズムは,関数estimateGeometricTransform2Dに実装されています。この関数は,一連の点の対応関係が与えられると,有効な。それを基に,最初の点のセットからのインライアを2番目のセットからのインライアと最も緊密にマッチさせるようなアフィン変換を導出します。このアフィン変換は,次のような形式の3行3列の行列となります。

[a_1 a_3 0;A_2 a_4 0;T_x t_y 1]

パラメタ 一个 は変換のスケ,ル,回転およびせん断効果を定義します。パラメタ t は平行移動のパラメ,タ,です。この変換を使用して,対応する特徴が同じ。

アフィン変換には,結像面だけしか変更できないという制限があります。したがって,走行中の自動車から撮影したこのビデオのような,3次元のシーンから取った2つのフレーム間にある一般的な歪みを検出するタスクには適していません。ただし,この後で説明する特定条件の下であれば正しく機能します。

[tform, inlierIdx] = estimateGeometricTransform2D(...pointsB pointsA,仿射的);pointsBm = pointsB(inlierIdx,:);pointsAm = pointsA(inlierIdx,:);imgBp = imgB, tform,“OutputView”imref2d(大小(imgB)));pointsBmp = transformPointsForward(tform, pointsBmp . location);

以下は,再投影されたフレームBに重ね合わせたフレームを,再投影された点の対応関係と共に示すカラー合成です。結果は非常に良好で,aapl . exeンラaapl . exeアの対応関係がほぼ厳密に一致しています。イメージの中心部はともによく揃っており,赤とシアンのカラー合成がその領域ではほぼ純粋な白黒になっています。

@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @前景自体は揃っていません。これは,背景の特徴が遠くにあり,無限遠の平面にあるかのように動作するためです。したがって,アフィン変換が結像面のみの変更に制限されていても,両方のイメージの背景面を揃えるにはそれで十分です。さらに,背景面がフレーム間で動かないか,大きく変化しないと仮定すれば,この変換は実際にはカメラの動きを捉えていることになります。したがって,この補正を行うとビデオが安定化することになります。この条件は,フレーム間のカメラの移動が十分に小さいか,あるいは逆に,ビデオのフレームレートが十分に速いならば有効です。

图;showMatchedFeatures(imgA, imgBp, pointsAm, pointsBmp);传奇(“一个”“B”);

手順5:変換の近似と平滑化

一連のビデオフレ,ム T 0 1 2 ... が与えられると,上記の手続きを使ってすべてのフレ,ム T T + 1 の間の歪みをアフィン変換 H として推定することができます。したがって,最初のフレ,ムに対するフレ,ム の累積歪みは,その前のすべてのフレ,ム間変換の積となります。すなわ,次のようになります。

H c u u l 一个 t v e H j 0 - 1

上記アフィン変換の6つのパラメーターをすべて使用することもできますが,数値を簡素化し安定させるため,より簡潔な”スケール——回転——平行移動”の変換として行列を再近似することにします。完全なアフィン変換には自由パラメーターが6つありますが,この変換の自由パラメーターは,倍率,角度および2つの平行移動の4つだけです。この新しい変換行列の形式は次のとおりです。

[s*cos(ang) s*-sin(ang) 0;S *sin(ang) S *cos(ang) 0;T_x t_y 1]

この変換手続きを以下に示します。上で取得した変換 H を,等価な“スケル-回転-平行移動” H 年代 R t で当てはめます。変換の置き換えによる誤差が最小限であることを示すため,両方の変換を用いてフレームBを再投影し,この2つのイメージを赤とシアンのカラー合成として下に表示します。このイメージはモノクロで表示され,2つの再投影間に見られるピクセル単位の相違はごくわずかであることが明らかです。

提取比例和旋转部分子矩阵。H = t形式;R = h (1:2,1:2);从两个可能的反切线的平均值计算θ=意味着([量化(R(2),(1)量化(R - R (3), (4))));从两个稳定平均值计算的平均值计算刻度scale = mean(R([1 4])/cos(theta));%翻译不变:翻译= H(3,1:2);重构新的s-R-t变换:HsRt = [[scale*[cos(theta) -sin(theta);罪(θ)因为(θ)];...翻译],[0 0 1]'];tformsRT = affine2d(HsRt);imgBold = imwarp(imgB, tform,“OutputView”imref2d(大小(imgB)));imgBsRt = imwarp(imgB, tformsRT,“OutputView”imref2d(大小(imgB)));图(2)中,clf;imshowpair (imgBold imgBsRt,“ColorChannels”“red-cyan”),轴图像;标题(仿射和s-R-t变换输出的颜色合成);

手順6:ビデオ全体への適用

次に,上記の手順を適用してビデオシ,ケンスを平滑化します。可読性を高めるため,2のmatlab®の関数cvexEstStabilizationTformに含められています。関数cvexTformToSRTも同様に,一般的なアフィン変換から“スケル—回転—平行移動”変換への転換を行うものです。

各ステップで現在のフレ,ム間の変換 H を計算します。これをs-R-t変換 H 年代 R t として当てはめます。その後,これを最初のフレ,ム以降のカメラの動きをすべて記述する累積変換 H c u u l 一个 t v e と組み合わせます。ビデオプレーヤーには、平滑化されたビデオの最後の 2 フレームが赤とシアンの合成として表示されます。

このコ,ドでは,早期終了条件を削除して,ル,プでビデオ全体を処理させることもできます。

将视频源重置到文件的开头。读(hVideoSrc, 1);hVPlayer = vision.VideoPlayer;%创建视频查看器处理视频中的所有帧movMean = rgb2gray(im2single(readFrame(hVideoSrc)));imgB = movMean;imgBp = imgB;correctedMean = imgBp;Ii = 2;Hcumulative =眼(3);hasFrame(hVideoSrc) && ii < 10在新帧中读取imgA = imgB;% z ^ 1imgAp = imgBp;% z ^ 1imgB = rgb2gray(im2single(readFrame(hVideoSrc)));movMean = movMean + imgB;估计从框架A到框架B的变换,并拟合为s-R-tH = cvexEstStabilizationTform(imgA,imgB);HsRt = cvexTformToSRT(H);Hcumulative = HsRt * Hcumulative;imgBp = imwarp(imgB,affine2d(Hcumulative),“OutputView”imref2d(大小(imgB)));显示为彩色合成与最后校正帧步骤(hVPlayer imfuse (imgAp imgBp,“ColorChannels”“red-cyan”));correctedMean = correctedMean + imgBp;Ii = Ii +1;结束correctedMean = correctedMean/(ii-2);movMean = movMean/(ii-2);这里调用对象上的release方法来关闭任何打开的文件%,释放内存。释放(hVPlayer);

計算中に,生のビデオフレ,ムおよび修正されたフレ,ムの平均が算出されました。これらの平均値を並べて以下に表示します。左のイメージは生の入力フレームの平均を示しており,元のビデオに多量の歪みが含まれていたことが確認できます。一方,修正後のフレ,ムの平均を示す右側では,メ,ジ中央部分の歪みがほとんどありません。前景の細部はぼやけていますが(自動車が前進しているため必然的な結果です),安定化アルゴリズムの有効性はよく示されています。

图;imshowpair (movMean correctedMean,“蒙太奇”);标题([“原始输入平均值”repmat (' '50 [1]),“校正序列均值”]);

参考文献

[1]托多夫,B;穆雷,DW。运动估计的引导抽样和共识欧洲计算机视觉会议,2002。

[2]李,肯塔基州;壮族,YY;陈,;Ouhyoung, M。“使用鲁棒特征轨迹的视频稳定。”国立台湾大学,2009。

[3]利特文,A;康拉德,J;卡尔,WC。“使用卡尔曼滤波和马赛克的概率视频稳定。”IS&T/SPIE电子成像、图像和视频通信与进程研讨会,2003。

[4]松下,Y;Ofek E;唐,X;Shum HY。“全帧视频稳定。”微软亚洲研究院。CVPR 2005。