public ArrayList findPointMatches(ImageMap leftMap, ImageMap rightMap) { try { if (leftImage != null && rightImage != null) { ArrayList arrayControl = new ArrayList(); // unlimited Number of Keypoints int iMaxPairKeypoints = 0; iImageDoneCount = 0; ArrayList memoryKeypointsList = new ArrayList(); //keypointsTarget = KeypointsTarget.Memory; if (leftBlurredImage != null && rightBlurredImage != null) { leftMap = GenerateKeypointForImage((Bitmap)leftBlurredImage, memoryKeypointsList); rightMap = GenerateKeypointForImage((Bitmap)rightBlurredImage, memoryKeypointsList); } else { leftMap = GenerateKeypointForImage((Bitmap)leftImage, memoryKeypointsList); rightMap = GenerateKeypointForImage((Bitmap)rightImage, memoryKeypointsList); } MultiMatch mm = new MultiMatch(); mm.LoadKeysetsFromMemory(memoryKeypointsList); //mm.MatchKeypoint += new MultiMatch.MatchKeypointEventHandler(UpdateMatchProgress); ArrayList mtchs = mm.LocateMatchSets(3, iMaxPairKeypoints, true, true); // useRANSAC = true, useAreaFilter = true // Component check. ArrayList components = mm.ComponentCheck(mtchs); if (components.Count > 1) { string componentDesc = ""; int compN = 1; foreach (MultiMatch.Component comp in components) componentDesc += String.Format("component {0}: {1}\n\n", compN++, comp); MessageBox.Show(String.Format ("A connected-component check has identified {0} components among the image matches. This means, there are images that have no connection with other images. The following components have been identified:\n\n{1}", components.Count, componentDesc), "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } MultiMatch.MatchSet ms = (MultiMatch.MatchSet)(mtchs[0]); matches = ms.Matches; return matches; } } catch (Exception ex) { MessageBox.Show(ex.ToString()); return null; } return null; } private ImageMap GenerateKeypointForImage(Bitmap b, ArrayList memoryKeypointsList) { try { DisplayImage disp = new DisplayImage(b); int pW = disp.Width; int pH = disp.Height; double startScale = 1.0; // TODO: tweak here!!!!!!! ImageMap picMap = disp.ConvertToImageMap(null); disp = null; LoweFeatureDetector lf = new LoweFeatureDetector(); lf.DetectFeaturesDownscaled(picMap, 0, 1.0 / startScale); iImageDoneCount++; memoryKeypointsList.Add(new KeypointXMLList(null, pW, pH, lf.GlobalNaturalKeypoints)); return picMap; } catch (Exception ex) { MessageBox.Show(ex.Message); return null; } }