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); }
/// <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); }
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()); } } }
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); }
/// <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); }
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); }
public HXLDCont GetModelCont() { HXLDCont cont = null; if (shapeModel != null && shapeModel.IsInitialized()) { cont = shapeModel.GetShapeModelContours(1); } return(cont); }
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); }
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()); } }
/// <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); }
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; }
/// <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); }