13

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);

乾杯、

4

2 に答える 2

10

この問題にはホモグラフィは必要ありません。代わりに、アフィン変換を計算できます。ただし、他の目的でホモグラフィを使用したい場合は、以下のコードを確認してください。これは、ホモグラフィに関するこの非常に詳細な記事からコピーされました。

C++の例

// pts_src and pts_dst are vectors of points in source 
// and destination images. They are of type vector<Point2f>. 
// We need at least 4 corresponding points. 

Mat h = findHomography(pts_src, pts_dst);

// The calculated homography can be used to warp 
// the source image to destination. im_src and im_dst are
// of type Mat. Size is the size (width,height) of im_dst. 

warpPerspective(im_src, im_dst, h, size);

Pythonの例

'''
pts_src and pts_dst are numpy arrays of points
in source and destination images. We need at least 
4 corresponding points. 
''' 
h, status = cv2.findHomography(pts_src, pts_dst)

''' 
The calculated homography can be used to warp 
the source image to destination. Size is the 
size (width,height) of im_dst
'''

im_dst = cv2.warpPerspective(im_src, h, size)
于 2016-01-13T18:59:48.787 に答える
6

ワープパースペクティブ関数が必要です。このプロセスは、このチュートリアルで示したプロセスに類似しています(アフィン変換とワープの場合)

于 2012-11-26T17:55:49.647 に答える