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);
        }
Beispiel #2
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);
        }
Beispiel #3
0
        public override HMessage ActorTask(HMessage obj)
        {
            if (obj != null)
            {
                obj.Dispose();
            }
            HMessage msg = new HMessage();
            HImage   img = grabber.GrabImageAsync(-1);

            msg.SetMessageObj(img, "image");
            if (SlowMotion == true)
            {
                HOperatorSet.WaitSeconds(0.2);
            }
            return(msg);
        }