ビデオストリームを安定させるプログラムを作成しています。現在、私のプログラムは位相相関アルゴリズムに基づいて動作しています。ベースと現在の 2 つのイメージ間のオフセットを計算しています。次に、新しい座標に従って現在の画像を修正します。このプログラムは機能しますが、結果は満足のいくものではありません。処理されたビデオが望ましくないように見え、ビデオ全体を揺さぶる関連リンクが悪化している可能性があります。
元のビデオ
手ブレのないビデオ
私の現在の認識があり
ます: 画像間のオフセットの計算:
Point2d calculate_offset_phase_optimized(Mat one, Mat& two) {
if(two.type() != CV_64F) {
cvtColor(two, two, CV_BGR2GRAY);
two.convertTo(two, CV_64F);
}
cvtColor(one, one, CV_BGR2GRAY);
one.convertTo(one, CV_64F);
return phaseCorrelate(one, two);
}
この座標に従って画像をシフトする:
void move_image_roi_alt(Mat& img, Mat& trans, const Point2d& offset) {
trans = Mat::zeros(img.size(), img.type());
img(
Rect(
_0(static_cast<int>(offset.x)),
_0(static_cast<int>(offset.y)),
img.cols-abs(static_cast<int>(offset.x)),
img.rows-abs(static_cast<int>(offset.y))
)
).copyTo(trans(
Rect(
_0ia(static_cast<int>(offset.x)),
_0ia(static_cast<int>(offset.y)),
img.cols-abs(static_cast<int>(offset.x)),
img.rows-abs(static_cast<int>(offset.y))
)
));
}
int _0(const int x) {
return x < 0 ? 0 : x;
}
int _0ia(const int x) {
return x < 0 ? abs(x) : 0;
}
ドキュメント作成者のスタビライザー YouTube を調べていて、コーナー検出に基づくアルゴリズムは魅力的に見えましたが、それがどのように機能するかは完全にはわかりません。だから私の質問は、この問題を効果的に解決する方法です。条件の 1 つ - プログラムは低速のコンピューターで実行されるため、負荷の高いアルゴリズムは適していない可能性があります。
ありがとう!
PS テキストに誤りがありましたらお詫び申し上げます - これは自動翻訳です。