Esempio n. 1
0
        public HXLDCont CreateShapeModel(HImage img, ModelParameter modelParameter, out HShapeModel model)
        {
            model = new HShapeModel(
                img,
                modelParameter.numLevels,
                modelParameter.angleStart,
                modelParameter.angleExtent,
                modelParameter.angleStep,
                modelParameter.scaleMin,
                modelParameter.scaleMax,
                modelParameter.scaleStep,
                modelParameter.optimization,
                modelParameter.metric,
                modelParameter.contrast,
                modelParameter.minContrast);



            var modelContours = Model.GetShapeModelContours(1);

            var homMat2D = new HHomMat2D();


            homMat2D.VectorAngleToRigid(0, 0, 0, ModelRegion.Row, ModelRegion.Column, 0);
            var contoursAffinTrans = modelContours.AffineTransContourXld(homMat2D);

            return(contoursAffinTrans);
        }
Esempio n. 2
0
        /// <summary>
        /// Loads model from the file specified by <c>fileName</c>
        /// </summary>
        public bool loadShapeModel(string fileName)
        {
            onExternalModelID = false;

            try
            {
                ModelID.ReadShapeModel(fileName);
            }
            catch (HOperatorException e)
            {
                exceptionText = e.Message;
                NotifyIconObserver(MatchingAssistant.ERR_READ_SHAPEMODEL);
                return(false);
            }

            onExternalModelID = true;
            tResult.mContour  = ModelID.GetShapeModelContours(1);

            cacheModelParams();

            parameterSet.mNumLevel = ModelID.GetShapeModelParams(out parameterSet.mStartingAngle,
                                                                 out parameterSet.mAngleExtent,
                                                                 out parameterSet.mAngleStep,
                                                                 out parameterSet.mMinScale,
                                                                 out parameterSet.mMaxScale,
                                                                 out parameterSet.mScaleStep,
                                                                 out parameterSet.mMetric,
                                                                 out parameterSet.mMinContrast);
            return(true);
        }
Esempio n. 3
0
 private void AffineTransModelContour(HShapeModel model, HRegion modelRegion)
 {
     if (model != null && modelRegion != null)
     {
         try
         {
             //获取金字塔第一层轮廓
             HXLDCont modelContour = model.GetShapeModelContours(1);
             double   num3, num4;
             modelRegion.AreaCenter(out num3, out num4);
             HHomMat2D matd = new HHomMat2D();
             matd.VectorAngleToRigid(0.0, 0.0, 0.0, num3, num4, 0.0);
             HXLD affterAffineModelXLD = matd.AffineTransContourXld(modelContour);
             if (info.IsShowModelXLD)
             {
                 Window.SetColor("green");
                 affterAffineModelXLD.DispXld(Window.Window);
             }
         }
         catch (Exception e)
         {
             WriteErrorLog("VisionTool", e.ToString());
         }
     }
 }
Esempio n. 4
0
        public override HMessage ActorTask(HMessage imsg)
        {
            HTuple row, column, angle, score;
            HImage img = new HImage(imsg.GetMessageObj("image"));

            if (sbm == null)
            {
                return(GenFinishMessage());
            }
            HMessage msg = new HMessage();

            msg.SetMessageObj(img, "image");
            Monitor.Enter(lockobj);
            try
            {
                sbm.FindShapeModel(img, -Math.PI, 2 * Math.PI, 0.5, 1, 0.5,
                                   "least_squares", 0, 0.9, out row, out column, out angle, out score);
                if (row.Length > 0)
                {
                    HXLDCont  contours = sbm.GetShapeModelContours(1);
                    HHomMat2D homMat2D = new HHomMat2D();
                    homMat2D.VectorAngleToRigid(0.0, 0.0, 0.0, row.D, column.D, angle.D);
                    HXLDCont projcont = homMat2D.AffineTransContourXld(contours);
                    msg.SetMessageObj(projcont, "contour");
                }
            }
            finally
            {
                Monitor.Exit(lockobj);
            }
            imsg.Dispose();
            return(msg);
        }
Esempio n. 5
0
        /// <summary>
        /// Loads model from the file specified by <c>fileName</c>
        /// </summary>
        public bool loadShapeModel(string fileName)
        {
            onExternalModelID = false;
            Stopwatch sw = new Stopwatch();

            sw.Start();
            string str = "loadShapeModel ";

            try
            {
                string shapeName = fileName + "ShapeImage.shm";
                if (FileLib.FileEx.Exist(shapeName, false))
                {
                    ModelID.ReadShapeModel(shapeName);
                    onExternalModelID = true;
                }
                else
                {
                    Logger.PopError(shapeName + "Îļþ²»´æÔÚ");
                }

                str += shapeName + " ºÄʱ:" + sw.ElapsedMilliseconds + "ms£¬"; sw.Restart();
                string grayName = fileName + "GrayImage.shm";
                //if (FileLib.FileEx.Exist(grayName, false))
                //{
                //     GrayTemplate.ReadTemplate(grayName);
                //}
                //else
                //{
                //    Logger.PopError(grayName + "Îļþ²»´æÔÚ");
                //}
                str += shapeName + " ºÄʱ:" + sw.ElapsedMilliseconds + "ms£¬";
                //Console.WriteLine(str);
            }
            catch (HOperatorException e)
            {
                exceptionText = e.Message;
                NotifyIconObserver(MatchingAssistant.ERR_READ_SHAPEMODEL);
                return(false);
            }

            if (onExternalModelID)
            {
                tResult.mContour = ModelID.GetShapeModelContours(1);

                cacheModelParams();

                parameterSet.mNumLevel = ModelID.GetShapeModelParams(out parameterSet.mStartingAngle,
                                                                     out parameterSet.mAngleExtent,
                                                                     out parameterSet.mAngleStep,
                                                                     out parameterSet.mMinScale,
                                                                     out parameterSet.mMaxScale,
                                                                     out parameterSet.mScaleStep,
                                                                     out parameterSet.mMetric,
                                                                     out parameterSet.mMinContrast);
            }

            return(onExternalModelID);
        }
Esempio n. 6
0
        public bool CreateShapeModelAct(HImage modelImage)
        {
            if (modelImage == null || !modelImage.IsInitialized())
            {
                return(false);
            }
            this.modelImage = modelImage;

            if (modelRegion == null || !modelRegion.IsInitialized())
            {
                return(false);
            }
            try
            {
                HImage ROIImage = new HImage();
                ROIImage.GenEmptyObj();
                ROIImage = modelImage.ReduceDomain(modelRegion);
                HImage temp = ROIImage.GaussFilter(7);
                ROIImage.Dispose();
                ROIImage    = temp;
                hShapeModel = ROIImage.CreateScaledShapeModel(
                    new HTuple(numLevels),
                    angleStart, angleExtent, new HTuple(angleStep),
                    scaleMin, scaleMax, new HTuple(scaleStep),
                    new HTuple(optimization).TupleConcat("no_pregeneration"),
                    metric,
                    ((new HTuple(contrastLow)).TupleConcat(contrastHigh)).TupleConcat(minLength),
                    new HTuple(minContrast));



                ROIImage.Dispose();
                double row, col;
                modelRegion.AreaCenter(out row, out col);
                refCoordinates   = new HTuple(row, col, 0);
                createNewModelID = false;
                //初始化modelContours
                if (modelXLDCont == null)
                {
                    modelXLDCont = new HXLDCont();
                }
                if (modelXLDCont != null && modelXLDCont.IsInitialized())
                {
                    modelXLDCont.Dispose();
                }
                modelXLDCont = hShapeModel.GetShapeModelContours(1);
            }
            catch
            {
                hShapeModel      = null;
                createNewModelID = true;
                return(false);
            }

            return(true);
        }
Esempio n. 7
0
        public HXLDCont GetModelCont()
        {
            HXLDCont cont = null;

            if (shapeModel != null && shapeModel.IsInitialized())
            {
                cont = shapeModel.GetShapeModelContours(1);
            }

            return(cont);
        }
Esempio n. 8
0
        public override HMessage ActorTask(HMessage obj)
        {
            HTuple isempty = msg_queue.GetMessageQueueParam("is_empty");

            if (isempty.I == 0)
            {
                msg_queue.SetMessageQueueParam("flush_queue", 1);
            }
            if (obj != null)
            {
                obj.Dispose();
            }
            HTuple row, column, angle, score;
            HImage img;

            img = imggrabber.GrabImageAsync(-1);
            HRegion roi = new HRegion(ActiveObject);

            HMessage msg = new HMessage();

            msg.SetMessageObj(img, "image");
            Monitor.Enter(lockobj);
            try
            {
                if (sbm != null)
                {
                    sbm.Dispose();
                }
                sbm = new HShapeModel(img.ReduceDomain(roi), "auto", -Math.PI,
                                      2 * Math.PI, "auto", "auto", "use_polarity", "auto", "auto");

                sbm.FindShapeModel(img, 0.0, 0.0, 0.5, 1, 0.5, "least_squares", 0, 0.9,
                                   out row, out column, out angle, out score);
                if (row.Length > 0)
                {
                    HXLDCont  contours = sbm.GetShapeModelContours(1);
                    HHomMat2D homMat2D = new HHomMat2D();
                    homMat2D.VectorAngleToRigid(0.0, 0.0, 0.0, row.D, column.D, angle.D);
                    HXLDCont projcont = homMat2D.AffineTransContourXld(contours);
                    msg.SetMessageObj(projcont, "contour");
                }
                else
                {
                    sbm.Dispose();
                    sbm = null;
                }
            }
            finally
            {
                Monitor.Exit(lockobj);
            }
            return(msg);
        }
Esempio n. 9
0
 public ShapeMatchTool(IToolInfo info, DisplayControl window)
 {
     this.Info     = info;
     this.Window   = window;
     this.ToolName = info.ToolName;
     try
     {
         ShapeModel = new HShapeModel();
         ShapeModel = ReadModelFromFile(info.ToolName);
         ModelXLD   = ShapeModel.GetShapeModelContours(1);
     }
     catch (Exception e)
     {
         ShapeModel = null;
         WriteErrorLog("VisionTool", e.ToString());
     }
 }
Esempio n. 10
0
        /// <summary>
        /// Creates the shape-based model. If the region of interest
        /// <c>mROIModel</c> is missing or not well defined using the
        /// interactive ROIs, then an error message is returned.
        /// </summary>
        public bool createShapeModel()
        {
            if (mImage == null)
            {
                if (!onTimer)
                {
                    NotifyIconObserver(MatchingAssistant.ERR_NO_MODEL_DEFINED);
                }
                return(false);
            }

            try
            {
                ModelID = mImage.CreateScaledShapeModel(parameterSet.mNumLevel,
                                                        parameterSet.mStartingAngle,
                                                        parameterSet.mAngleExtent,
                                                        parameterSet.mAngleStep,
                                                        parameterSet.mMinScale,
                                                        parameterSet.mMaxScale,
                                                        parameterSet.mScaleStep,
                                                        parameterSet.mOptimization,
                                                        parameterSet.mMetric,
                                                        parameterSet.mContrast,
                                                        parameterSet.mMinContrast);
            }
            catch (HOperatorException e)
            {
                if (!onTimer)
                {
                    exceptionText = e.Message;
                    NotifyParamObserver(MatchingParam.H_ERR_MESSAGE);
                }
                return(false);
            }

            tResult.mContour = ModelID.GetShapeModelContours(1);

            createNewModelID = false;
            return(true);
        }
Esempio n. 11
0
        public bool CreateMatchTool()
        {
            HImage  modelImage  = null;
            HRegion modelRegion = null;

            if (info.ModelROIParam.GetType() == typeof(CircleParam))
            {
                CircleParam circle = info.ModelROIParam as CircleParam;
                if (circle != null)
                {
                    modelImage = GetModelImageByCircle(Image.CopyImage(), circle.CircleRow, circle.CircleColumn, circle.Radius, out modelRegion);
                }
            }
            else if (info.ModelROIParam.GetType() == typeof(Rectangle1Param))
            {
                Rectangle1Param rectangle1 = info.ModelROIParam as Rectangle1Param;
                if (rectangle1 != null)
                {
                    modelImage = GetModelImageByRectangle1(Image.CopyImage(), rectangle1.RectangleStartRow, rectangle1.RectangleStartColumn, rectangle1.RectangleEndRow, rectangle1.RectangleEndColumn, out modelRegion);
                }
            }
            else if (info.ModelROIParam.GetType() == typeof(Rectangle2Param))
            {
                Rectangle2Param rectangle2 = info.ModelROIParam as Rectangle2Param;
                if (rectangle2 != null)
                {
                    modelImage = GetModelImageByRectangle2(Image.CopyImage(), rectangle2.Rectangle2CenterRow, rectangle2.Retangle2CenterColumn, rectangle2.Retangle2Angle, rectangle2.Rectangle2Length1, rectangle2.Rectangle2Length2, out modelRegion);
                }
            }
            else if (info.ModelROIParam.GetType() == typeof(EllipseParam))
            {
                EllipseParam ellipse = info.ModelROIParam as EllipseParam;
                if (ellipse != null)
                {
                    modelImage = GetModelImageByEllipse(Image.CopyImage(), ellipse.EllipseCenterRow, ellipse.EllipseCenterColumn, ellipse.EllipseAngle, ellipse.EllipseRadius1, ellipse.EllipseRadius2, out modelRegion);
                }
            }
            else
            {
                WriteErrorLog("VisionTool", info.ToolName + "模板创建失败");
                return(false);
            }
            HShapeModel shapeScaleModel = new HShapeModel();
            double      modelRow, modelCol;

            if (modelImage != null)
            {
                try
                {
                    shapeScaleModel.CreateScaledShapeModel(modelImage, new HTuple(info.NumLevels), TransAngle.AngleToHu(info.AngleStart), TransAngle.AngleToHu(info.AngleExtent), new HTuple(info.AngleStep), info.ScaleMin, info.ScaleMax, new HTuple(info.ScaleStep), new HTuple(info._Optimization.ToString()), info._Metric.ToString(), new HTuple(info.Contrast), new HTuple(info.MinContrast));
                    AffineTransModelContour(shapeScaleModel, modelRegion);
                    //record the model coordinate to the setting info.
                    modelRegion.AreaCenter(out modelRow, out modelCol);
                    info.ModelRegionRow   = modelRow;
                    info.ModelRegionCol   = modelCol;
                    info.ModelRegionAngle = 0.0;

                    this.ShapeModel = shapeScaleModel;
                    this.ModelXLD   = shapeScaleModel.GetShapeModelContours(1);
                    SaveModelFile(info.ToolName);
                }
                catch
                {
                    WriteErrorLog("VisionTool", info.ToolName + "模板创建失败");
                    return(false);
                }
            }
            else
            {
                WriteErrorLog("VisionTool", info.ToolName + "模板创建失败");
                return(false);
            }
            return(true);
        }
        /// <summary>
        /// Creates the shape-based model. If the region of interest 
        /// <c>mROIModel</c> is missing or not well defined using the 
        /// interactive ROIs, then an error message is returned.
        /// </summary>
        public bool createShapeModel()
        {
            if(mImage==null)
            {
                if(!onTimer)
                    NotifyIconObserver(MatchingAssistant.ERR_NO_MODEL_DEFINED);
                return false;
            }

            try
            {
                ModelID = mImage.CreateScaledShapeModel(parameterSet.mNumLevel,
                                                        parameterSet.mStartingAngle,
                                                        parameterSet.mAngleExtent,
                                                        parameterSet.mAngleStep,
                                                        parameterSet.mMinScale,
                                                        parameterSet.mMaxScale,
                                                        parameterSet.mScaleStep,
                                                        parameterSet.mOptimization,
                                                        parameterSet.mMetric,
                                                        parameterSet.mContrast,
                                                        parameterSet.mMinContrast);
            }
            catch(HOperatorException e)
            {

                if(!onTimer)
                {
                    exceptionText = e.Message;
                    NotifyParamObserver(MatchingParam.H_ERR_MESSAGE);
                }
                return false;
            }

            tResult.mContour = ModelID.GetShapeModelContours(1);

            createNewModelID = false;
            return true;
        }
Esempio n. 13
0
        /// <summary>
        /// Creates the shape-based model. If the region of interest
        /// <c>mROIModel</c> is missing or not well defined using the
        /// interactive ROIs, then an error message is returned.
        /// </summary>
        public bool createShapeModel(string filePath)
        {
            bool isSuccess = false;

            if (mReducedImage == null)
            {
                if (!onTimer)
                {
                    NotifyIconObserver(MatchingAssistant.ERR_NO_MODEL_DEFINED);
                }
                return(false);
            }

            try
            {
                parameterSet.mMetric = "ignore_local_polarity";
                //parameterSet.mOptimization = "auto";
                //parameterSet.mAngleStep = "auto";
                mReducedImage.WriteImage("bmp", 0, filePath + "template.bmp");
                if (ModelID != null)
                {
                    ModelID.Dispose();
                }
                ModelID = mReducedImage.CreateShapeModel(
                    parameterSet.mNumLevel,
                    parameterSet.mStartingAngle,
                    parameterSet.mAngleExtent,
                    0.0175 / 10,
                    "auto",//parameterSet.mOptimization,
                    parameterSet.mMetric,
                    "auto_contrast",
                    "auto"
                    );

                if (GrayTemplate != null)
                {
                    GrayTemplate.Dispose();
                }
                GrayTemplate = mReducedImage.CreateTemplate(255, parameterSet.mNumLevel, "none", "original");
                isSuccess    = true;
            }
            catch (HOperatorException e)
            {
                isSuccess = false;
                if (!onTimer)
                {
                    exceptionText = e.Message;
                    NotifyParamObserver(MatchingParam.H_ERR_MESSAGE);
                }
                return(false);
            }

            if (tResult.mContour != null)
            {
                tResult.mContour.Dispose();
            }
            tResult.mContour = ModelID.GetShapeModelContours(1);

            createNewModelID = false;
            return(isSuccess);
        }