/// <summary> /// Initializes flags, lists, and delegates to have a valid /// starting point to start the assistant. /// </summary> public MatchingAssistant(MatchingParam parSet) { parameterSet = parSet; NotifyIconObserver = new MatchingDelegate(dummy); NotifyParamObserver = new AutoParamDelegate(dummyS); ModelID = new HShapeModel(); homSc2D = new HHomMat2D(); TestImages = new Hashtable(10); tResult = new MatchingResult(); contrastLowB = 0; contrastUpB = 255; scaleStepLowB = 0.0; scaleStepUpB = (double)19.0 / 1000.0; angleStepLowB = 0.0; angleStepUpB = (double)(112.0 / 10.0) * Math.PI / 180.0; pyramLevLowB = 1; pyramLevUpB = 6; minContrastLowB = 0; minContrastUpB = 30; findAlways = false; createNewModelID = true; ModelID = new HShapeModel(); GrayTemplate = new HTemplate(); onExternalModelID = false; }
public bool FindShapeModel(HObject srcImg, RectangleF searchArea, out MatchingResult result) { bool isSuccess = true; result = new MatchingResult(); result.mScore = new HTuple(); HObject reducedImage = new HObject(); HObject roi = new HObject(); HOperatorSet.GenEmptyObj(out roi); HOperatorSet.GenEmptyObj(out reducedImage); try { if (srcImg == null) { m_MatchAssistant.setImage(); } else { double NowScale = m_MatchingParam.mImageSizeScale; HOperatorSet.GenRectangle1(out roi, searchArea.Y * NowScale, searchArea.X * NowScale, (searchArea.Y + searchArea.Height) * NowScale, (searchArea.X + searchArea.Width) * NowScale); HObject ScaleImg = new HObject(); HOperatorSet.ZoomImageFactor(srcImg, out ScaleImg, NowScale, NowScale, "constant"); HOperatorSet.ReduceDomain(ScaleImg, roi, out reducedImage); m_MatchAssistant.setTestImage(reducedImage); } // m_MatchAssistant.setImage(new HImage(srcImg)); isSuccess = m_MatchAssistant.applyFindModel(); if (isSuccess) { result = m_MatchAssistant.getMatchingResults(); if (result.count < 1) { Logger.PopError("找模板失败"); isSuccess = false; } } } catch (Exception ex) { if (reducedImage != null) { reducedImage.Dispose(); } if (roi != null) { roi.Dispose(); } isSuccess = false; Logger.PopError("找模板失败:" + ex.Message.ToString()); } if (isSuccess) { //string ccdName = CameraTest.Instance.GetCCDName(true, true, 1); //ViewControl view = DisplaySystem.GetViewControl(ccdName); //HImage img = m_MatchAssistant.getCurrTestImage(); //view.AddViewImage(img); //HXLD contour; //GetDetectionContour(out contour); //view.AddViewObject(contour); //view.AddViewCross(2048/2, 2448 / 2, 2048, 0); //view.AddViewLine(0, 2448 / 2, 2048,2448/2); //view.AddViewLine(2048 / 2, 0, 2048/2, 2448); //view.ShowAiming(); //view.Repaint(); //string str = string.Format("匹配度:{0}%", (100 * result.mScore.D).ToString("f2")); //view.SetString(20, 50, "red", str); } else { if (srcImg == null) { return(false); } //HOperatorSet.WriteImage(srcImg, "bmp", 0, "D:\\ReducedImage\\Model_SrcImage_" + SharpImageNumber.ToString() + ".bmp"); //HOperatorSet.WriteImage(reducedImage, "bmp", 0, "D:\\ReducedImage\\Model_ReducedImage_" + SharpImageNumber.ToString() + ".bmp"); if (reducedImage != null) { reducedImage.Dispose(); } if (roi != null) { roi.Dispose(); } SharpImageNumber++; } return(isSuccess); }