Пример #1
0
        /// <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;
        }
Пример #2
0
        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);
        }