Image Mosaic Technology, now has a very wide range of applications, such as small robot monocular vision of the small, so that the robot in the application of a certain limitation, binocular vision can provide a broader vision, binocular vision is more commonly used in the left and right two cameras to obtain a wider view of the image through stitching to obtain a broader vision, Again like the more popular Vr,youtube also greatly uses the image splicing technology.
Image stitching is mainly divided into several main steps:
(1) Image correction: Because of the image geometric distortion caused by the attitude and scanning nonlinearity of the imaging device, the distortion of images can be produced due to the image system itself, the geometric correction of images, the distortion correction of images, Make the acquired image much closer to the real image;
(2) Image filtering: mean filter, median filter;
(3) Image registration: That is, image alignment, look for image edge coincident parts, commonly used image matching method has Harris algorithm, SIFT algorithm, etc.
(4) Set up the transformation model: according to the corresponding relationship between the template or image features, the parameters of the mathematical model are calculated, and then the mathematical transformation model of two images is established.
(5) Coordinate transformation: According to the mathematical transformation model, the stitching image is transformed into the coordinate system of the reference image, and the unified coordinate transformation is completed.
(6) Image fusion: The coincident region of the image to be spliced is fused to obtain the smooth and seamless panorama image of stitching reconstruction.
First introduce the image stitching example in OPENCV stitching:
#include <iostream> #include <fstream> #include "opencv2/highgui/highgui.hpp" #include <opencv2\
Stitching\stitcher.hpp> using namespace std;
using namespace CV;
int main (void) {string Srcfile[3] = {"1.jpg", "2.jpg", "3.jpg"};
String dstfile = "Result.jpg";
Vector<mat> IMGs;
for (int i = 0; i<3; ++i) {Mat img = imread (srcfile[i]);
if (Img.empty ()) {cout << "Can ' t read image '" << srcfile[i] << "\ n";
System ("pause");
return-1;
} imgs.push_back (IMG);
} cout << "Please wait ..." << Endl;
Mat Pano;
Stitcher Stitcher = Stitcher::createdefault (false);
Stitcher::status Status = Stitcher.stitch (IMGs, Pano); if (Status! = Stitcher::ok) {cout << "Can ' t stitch images, error code=" << int (status) << E
Ndl
System ("pause");
return-1;
} imwrite (Dstfile, Pano); NAmedwindow ("Result");
Imshow ("Result", Pano);
Waitkey (0);
DestroyWindow ("Result");
System ("pause");
return 0; }
First the For loop is read into the picture, and a data is added to the vector;
Stitcher Stitcher::createdefault (bool try_use_gpu=false)
Then use Createdefault to create the default parameters of image stitching;
Status Stitcher::stitch (Inputarray images, Outputarray pano)
Stitcher::stitch gives a picture of the synthesis;
Here is the result of the author's synthesis of the picture:
Image is a bit distorted (may be the problem when shooting), but stitching stitching effect is very good
There are fewer stitcher introduced in the API manuals provided by OPENCV,
Next try to implement it yourself in code