-1

同じシーンの 2 つの写真を受け取るプログラムを開発していますが、そのうちの 1 つに歪みがあります。

Mat img_1 = imread(argv[1], 0);  // nORMAL pICTURE
Mat img_2 = imread(argv[2], 0);  // PICTURE WITH DISTORTION

そして、歪みのパターンを評価し、それを補正できるようにしたいと考えています

私はすでにキーポイントを見つけることができており、これに関数 cv::findHomography を使用できるかどうかを知りたいです... いずれにせよ、どのように行うのですか?

4

2 に答える 2

2

ホモグラフィは、あるイメージ プレーンを別のイメージ プレーンにマッピングします。つまり、歪みを 3x3 行列として表現できる場合、findHomography が必要です。そうでない場合、それはあなたが望むものではありません。入力として対応するポイントの 2 つのベクトルを取り、それらのポイント間の変換を最もよく表す 3x3 マトリックスを返します。

于 2012-11-04T20:54:41.600 に答える
1

よし、では、2 つの画像 (A と B) が互いにわずかに歪んでいて、それらの間に平行移動、回転、縮尺の違いがあるとします (たとえば、これらの画像:)

元のレナ 歪んだレナ


Ssoooooooo 私が必要としているのは、写真 B に一種の変換を適用して、存在する歪み/平行移動/回転を補正して、両方の写真を同じサイズ、向き、および平行移動なしで作成することです。

以下に示すように、私はすでにポイントを抽出し、ホモグラフィを見つけました。しかし、ホモグラフィを使用して変換する方法がわからMat img_Bないので、 のように見えMat img_Aます。何か案が?

//-- Localize the object from img_1 in img_2
std::vector<Point2f> obj;
std::vector<Point2f> scene;

for (unsigned int i = 0; i < good_matches.size(); i++) {
    //-- Get the keypoints from the good matches
    obj.push_back(keypoints_object[good_matches[i].queryIdx].pt);
    scene.push_back(keypoints_scene[good_matches[i].trainIdx].pt);
}

Mat H = findHomography(obj, scene, CV_RANSAC);

乾杯、

于 2012-11-26T17:37:22.160 に答える