Ultrakurzeinführung OpenCV Feature Detektoren (und ein bisschen Bildverarbeitung)
Verschiedenste Verfahren Harris Corner SIFT SURF BRIEF MSER ORB Siehe auch: http://docs.opencv.org/3.0-beta/modules/features2d/doc/feature_detection_and_description.html
Anwendung von Featuredetektoren 1. Bild einlesen img1 = cv::imread("D:\\Daten\\JM_1.jpeg",1); 2. Feature Vector anlegen cv::Ptr<cv::Feature2D> f2dSift = cv::Algorithm::create<cv::Feature2D>("Feature2D.SIFT"); 3. Features suchen cv::vector<cv::KeyPoint> keyPoints; cv::Mat descriptors; (*f2dSift)(img1, cv::noArray(), keyPoints, descriptors); 4. Keypoints anzeigen cv::drawKeypoints(img1, keyPoints, img1, cv::Scalar(0, 0, 255, 0)); cv::namedWindow("imageT1"); cv::imshow("imageT1", img1);
Matching 5. Matches einzeichnen 1. Matcher anlegen cv::FlannBasedMatcher matcher; 2. Vector für Matches anlegen std::vector< cv::DMatch > matches; 3. Matching durchführen matcher.match(descriptors_1, descriptors_2, matches); 4. Matches auswerten for (int i = 0; i < descriptors.rows; i++) double dist=matches[i].distance; //z.b. min distance bestimmen 5. Matches einzeichnen cv::drawMatches(img1, keyPoints_t1, img2, keyPoints_t2, good_matches_t12, img_matches_t12, cv::Scalar::all(-1), cv::Scalar::all(-1), cv::vector<char>(),cv::DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS);
Gradienten Sobel Operator
Gradienten Hauptorientierung bestimmen Orientierungshistogramm, Nachbarn berücksichtigen
SIFT – „Scale Invariant Feature Transform“ Vorteil gegenüber anderen Featuredetektoren: Skalierungsinvarianz, Rotationsinvarianz, robust gegenüber Helligkeitsschwankungen, liefert Merkmalsvektor zur Punktbeschreibung
SIFT – Algorithmus: Bildpyramide
SIFT-Algorithmus: Keypoint Wahl
SIFT-Algorithmus: Deskriptor SIFT Merkmalsvektor enthält 128 Elemente Orientierungsinformationen der Umgebung, relativ zum markanten Punkt
SIFT-Algorithmus: Matching