Ejemplo n.º 1
0
        /// <summary>Find the best matches of multiple NCC models.</summary>
        /// <param name="image">Input image in which the model should be found.</param>
        /// <param name="modelIDs">Handle of the models.</param>
        /// <param name="angleStart">Smallest rotation of the models. Default: -0.39</param>
        /// <param name="angleExtent">Extent of the rotation angles. Default: 0.79</param>
        /// <param name="minScore">Minimum score of the instances of the models to be found. Default: 0.8</param>
        /// <param name="numMatches">Number of instances of the models to be found (or 0 for all matches). Default: 1</param>
        /// <param name="maxOverlap">Maximum overlap of the instances of the models to be found. Default: 0.5</param>
        /// <param name="subPixel">Subpixel accuracy if not equal to 'none'. Default: "true"</param>
        /// <param name="numLevels">Number of pyramid levels used in the matching (and lowest pyramid level to use if $|NumLevels| = 2$). Default: 0</param>
        /// <param name="row">Row coordinate of the found instances of the models.</param>
        /// <param name="column">Column coordinate of the found instances of the models.</param>
        /// <param name="angle">Rotation angle of the found instances of the models.</param>
        /// <param name="score">Score of the found instances of the models.</param>
        /// <param name="model">Index of the found instances of the models.</param>
        public static void FindNccModels(
            HImage image,
            HNCCModel[] modelIDs,
            HTuple angleStart,
            HTuple angleExtent,
            HTuple minScore,
            HTuple numMatches,
            HTuple maxOverlap,
            HTuple subPixel,
            HTuple numLevels,
            out HTuple row,
            out HTuple column,
            out HTuple angle,
            out HTuple score,
            out HTuple model)
        {
            HTuple htuple = HTool.ConcatArray((HTool[])modelIDs);
            IntPtr proc   = HalconAPI.PreCall(2068);

            HalconAPI.Store(proc, 1, (HObjectBase)image);
            HalconAPI.Store(proc, 0, htuple);
            HalconAPI.Store(proc, 1, angleStart);
            HalconAPI.Store(proc, 2, angleExtent);
            HalconAPI.Store(proc, 3, minScore);
            HalconAPI.Store(proc, 4, numMatches);
            HalconAPI.Store(proc, 5, maxOverlap);
            HalconAPI.Store(proc, 6, subPixel);
            HalconAPI.Store(proc, 7, numLevels);
            HalconAPI.InitOCT(proc, 0);
            HalconAPI.InitOCT(proc, 1);
            HalconAPI.InitOCT(proc, 2);
            HalconAPI.InitOCT(proc, 3);
            HalconAPI.InitOCT(proc, 4);
            int err1 = HalconAPI.CallProcedure(proc);

            HalconAPI.UnpinTuple(htuple);
            HalconAPI.UnpinTuple(angleStart);
            HalconAPI.UnpinTuple(angleExtent);
            HalconAPI.UnpinTuple(minScore);
            HalconAPI.UnpinTuple(numMatches);
            HalconAPI.UnpinTuple(maxOverlap);
            HalconAPI.UnpinTuple(subPixel);
            HalconAPI.UnpinTuple(numLevels);
            int err2       = HTuple.LoadNew(proc, 0, HTupleType.DOUBLE, err1, out row);
            int err3       = HTuple.LoadNew(proc, 1, HTupleType.DOUBLE, err2, out column);
            int err4       = HTuple.LoadNew(proc, 2, HTupleType.DOUBLE, err3, out angle);
            int err5       = HTuple.LoadNew(proc, 3, HTupleType.DOUBLE, err4, out score);
            int procResult = HTuple.LoadNew(proc, 4, HTupleType.INTEGER, err5, out model);

            HalconAPI.PostCall(proc, procResult);
            GC.KeepAlive((object)image);
            GC.KeepAlive((object)modelIDs);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///   Enqueue one or more messages to the message queue.
        ///   Instance represents: Message queue handle.
        /// </summary>
        /// <param name="messageHandle">Handle(s) of message(s) to be enqueued.</param>
        /// <param name="genParamName">Names of optional generic parameters.</param>
        /// <param name="genParamValue">Values of optional generic parameters.</param>
        public void EnqueueMessage(HMessage[] messageHandle, HTuple genParamName, HTuple genParamValue)
        {
            HTuple htuple = HTool.ConcatArray((HTool[])messageHandle);
            IntPtr proc   = HalconAPI.PreCall(531);

            this.Store(proc, 0);
            HalconAPI.Store(proc, 1, htuple);
            HalconAPI.Store(proc, 2, genParamName);
            HalconAPI.Store(proc, 3, genParamValue);
            int procResult = HalconAPI.CallProcedure(proc);

            HalconAPI.UnpinTuple(htuple);
            HalconAPI.UnpinTuple(genParamName);
            HalconAPI.UnpinTuple(genParamValue);
            HalconAPI.PostCall(proc, procResult);
            GC.KeepAlive((object)this);
            GC.KeepAlive((object)messageHandle);
        }
Ejemplo n.º 3
0
        /// <summary>
        ///   Add an instance of a 3D object model to a 3D scene.
        ///   Instance represents: Handle of the 3D scene.
        /// </summary>
        /// <param name="objectModel3D">Handle of the 3D object model.</param>
        /// <param name="pose">Pose of the 3D object model.</param>
        /// <returns>Index of the new instance in the 3D scene.</returns>
        public int AddScene3dInstance(HObjectModel3D[] objectModel3D, HPose[] pose)
        {
            HTuple htuple1 = HTool.ConcatArray((HTool[])objectModel3D);
            HTuple htuple2 = HData.ConcatArray((HData[])pose);
            IntPtr proc    = HalconAPI.PreCall(1217);

            this.Store(proc, 0);
            HalconAPI.Store(proc, 1, htuple1);
            HalconAPI.Store(proc, 2, htuple2);
            HalconAPI.InitOCT(proc, 0);
            int err = HalconAPI.CallProcedure(proc);

            HalconAPI.UnpinTuple(htuple1);
            HalconAPI.UnpinTuple(htuple2);
            int intValue;
            int procResult = HalconAPI.LoadI(proc, 0, err, out intValue);

            HalconAPI.PostCall(proc, procResult);
            GC.KeepAlive((object)this);
            GC.KeepAlive((object)objectModel3D);
            return(intValue);
        }