mirror of
https://github.com/debnarpavol/spajanie_snimkov_uprava_jasu.git
synced 2025-07-02 03:47:20 +02:00
added extraction of ROI and calc of homography/affine transf. Both transf. not good enough
This commit is contained in:
@ -5,6 +5,7 @@
|
|||||||
#include "opencv2/stitching.hpp"
|
#include "opencv2/stitching.hpp"
|
||||||
#include <opencv2/xfeatures2d.hpp>
|
#include <opencv2/xfeatures2d.hpp>
|
||||||
#include <opencv2/features2d.hpp>
|
#include <opencv2/features2d.hpp>
|
||||||
|
#include "opencv2/calib3d/calib3d.hpp"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <json/json.h>
|
#include <json/json.h>
|
||||||
@ -526,7 +527,7 @@ class PointBase {
|
|||||||
|
|
||||||
|
|
||||||
cv::Ptr<SIFT> siftPtr = SIFT::create();
|
cv::Ptr<SIFT> siftPtr = SIFT::create();
|
||||||
std::vector<cv::KeyPoint> keypointsROI, keypointsImg;
|
std::vector<KeyPoint> keypointsROI, keypointsImg;
|
||||||
cv::Ptr<SiftDescriptorExtractor> siftExtrPtr;
|
cv::Ptr<SiftDescriptorExtractor> siftExtrPtr;
|
||||||
cv::Mat descriptorsROI, descriptorsImg;
|
cv::Mat descriptorsROI, descriptorsImg;
|
||||||
siftPtr->detect(roi, keypointsROI);
|
siftPtr->detect(roi, keypointsROI);
|
||||||
@ -541,16 +542,15 @@ class PointBase {
|
|||||||
imshow("sift_result.jpg", output);
|
imshow("sift_result.jpg", output);
|
||||||
waitKey(0);*/
|
waitKey(0);*/
|
||||||
|
|
||||||
cout<<" SIZE \n"<<roi.size() <<" \n";
|
cout<<" SIZE \n"<<cv::typeToString(roi.type()) <<" \n";
|
||||||
siftPtr->compute(roi,
|
siftPtr->compute(roi,
|
||||||
keypointsROI,
|
keypointsROI,
|
||||||
descriptorsROI);
|
descriptorsROI);
|
||||||
/*siftExtrPtr->compute(imgSmall,
|
siftPtr->compute(imgSmall,
|
||||||
keypointsImg,
|
keypointsImg,
|
||||||
descriptorsImg);*/
|
descriptorsImg);
|
||||||
|
|
||||||
|
cv::FlannBasedMatcher matcher;
|
||||||
cv::BFMatcher matcher(cv::NORM_L2,true);
|
|
||||||
std::vector<cv::DMatch> matches;
|
std::vector<cv::DMatch> matches;
|
||||||
|
|
||||||
matcher.match(descriptorsROI,descriptorsImg,matches);
|
matcher.match(descriptorsROI,descriptorsImg,matches);
|
||||||
@ -562,6 +562,60 @@ class PointBase {
|
|||||||
cv::waitKey(0);
|
cv::waitKey(0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
double max_dist = 0; double min_dist = 100;
|
||||||
|
cout<<"ROWS DESC:"<<descriptorsImg.rows<<"\n";
|
||||||
|
cout<<"SIZE DESC:"<<descriptorsImg.size()<<"\n";
|
||||||
|
//-- Quick calculation of max and min distances between keypoints
|
||||||
|
for( int i = 0; i < descriptorsImg.rows; i++ )
|
||||||
|
{ double dist = matches[i].distance;
|
||||||
|
cout<<"DIST:"<<dist<<"\n";
|
||||||
|
if( dist < min_dist ) min_dist = dist;
|
||||||
|
if( dist > max_dist ) max_dist = dist;
|
||||||
|
}
|
||||||
|
printf("-- Max dist : %f \n", max_dist );
|
||||||
|
printf("-- Min dist : %f \n", min_dist );
|
||||||
|
|
||||||
|
std::vector< DMatch > good_matches;
|
||||||
|
|
||||||
|
for( int i = 0; i < descriptorsImg.rows; i++ )
|
||||||
|
{ if( matches[i].distance < 3*min_dist )
|
||||||
|
{ good_matches.push_back( matches[i]); }
|
||||||
|
|
||||||
|
}
|
||||||
|
std::vector< Point2d > obj;
|
||||||
|
std::vector< Point2d > scene;
|
||||||
|
|
||||||
|
for( int i = 0; i < good_matches.size(); i++ )
|
||||||
|
{
|
||||||
|
//-- Get the keypoints from the good matches
|
||||||
|
obj.push_back( static_cast<cv::Point2i>( keypointsImg[ good_matches[i].queryIdx ].pt ));
|
||||||
|
scene.push_back( static_cast<cv::Point2i>(keypointsROI[ good_matches[i].trainIdx ].pt ));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*cv::Mat imageMatches2;
|
||||||
|
drawMatches(roi,keypointsROI,imgSmall,keypointsImg,good_matches,imageMatches2);
|
||||||
|
cv::namedWindow("good_matches");
|
||||||
|
cv::imshow("good_matches",imageMatches2);
|
||||||
|
cv::waitKey(0);*/
|
||||||
|
|
||||||
|
|
||||||
|
//Mat H = findHomography( Mat(obj), Mat(scene), RANSAC );
|
||||||
|
Mat H = estimateAffinePartial2D( Mat(obj), Mat(scene), noArray(),RANSAC );
|
||||||
|
|
||||||
|
cv::Mat result;
|
||||||
|
//warpPerspective(imgSmall,roi,H,cv::Size(roi.cols,roi.rows));
|
||||||
|
warpAffine(imgSmall,result,H,cv::Size(roi.cols,roi.rows));
|
||||||
|
/*cv::Mat half(result,cv::Rect(0,0,imgSmall.cols,imgSmall.rows));
|
||||||
|
result.copyTo(roi);*/
|
||||||
|
imshow("imgSmall", imgSmall);
|
||||||
|
imshow( "Result", result );
|
||||||
|
imshow("roi", roi);
|
||||||
|
cv::waitKey(0);
|
||||||
|
|
||||||
//cout<<CV_VERSION;
|
//cout<<CV_VERSION;
|
||||||
}
|
}
|
||||||
//if(qIdx==2) break;
|
//if(qIdx==2) break;
|
||||||
|
Reference in New Issue
Block a user