/// <summary> /// 找到匹配模型 /// </summary> /// <param name="hImage">影像</param> /// <param name="hv_A1LModelId">匹配模型 ID</param> /// <returns></returns> public ShapeModel Find(HObject hImage, HTuple hv_A1LModelId) { ShapeModel shapeModel = null; try { shapeModel = findShapeModel(hImage, hv_A1LModelId); } catch (Exception ex) { Hanbo.Log.LogManager.Error("ShapeFinder exception:" + ex.Message); } return(shapeModel); }
/// <summary> /// 找到匹配模型 /// </summary> /// <param name="hImage">影像</param> /// <param name="trainingModelfilepath">匹配模型數據檔案路徑</param> /// <returns></returns> public ShapeModel Find(HObject hImage, string trainingModelfilepath) { ShapeModel shapeModel = null; if (File.Exists(trainingModelfilepath)) { try { Hanbo.Log.LogManager.Trace("ShapeFinder @Find() => readShapeModel()"); HTuple hv_A1LModelId = ReadShapeModel(trainingModelfilepath); shapeModel = findShapeModel(hImage, hv_A1LModelId); } catch (Exception ex) { Hanbo.Log.LogManager.Error("ShapeFinder exception:" + ex.Message); } } return(shapeModel); }
private ShapeModel findShapeModel(HObject hImage, HTuple hv_A1LModelId) { ShapeModel shapeModel = null; //local variables HTuple hv_ModelRow, hv_ModelColumn, hv_ModelAngle, hv_ModelScore; //find Hanbo.Log.LogManager.Trace("ShapeFinder @Find() => FindShapeModel(), MinScore = " + _minScore); HOperatorSet.FindShapeModel(hImage, hv_A1LModelId, (new HTuple(0)).TupleRad() , (new HTuple(360)).TupleRad(), _minScore, _numMatches, _maxOverlap, _subpixAlgo, _numberOfLevel, _greediness, out hv_ModelRow, out hv_ModelColumn, out hv_ModelAngle, out hv_ModelScore); //result model if (hv_ModelScore.DArr.Length > 0) { shapeModel = new ShapeModel() { ModelId = hv_A1LModelId, Row = hv_ModelRow, Col = hv_ModelColumn, Angle = hv_ModelAngle, Score = hv_ModelScore }; } return GetOrderdShapeModel(shapeModel); }
/// <summary> /// 取得排序後的 Model, Order by Col theny By Row /// </summary> /// <param name="raw"></param> /// <returns></returns> public ShapeModel GetOrderdShapeModel(ShapeModel raw) { ShapeModel orderedModel = null; if (raw != null) { List<ShapeModelDataTransferObject> aList = new List<ShapeModelDataTransferObject>(); for (int i = 0; i < raw.Score.TupleLength(); i++) { aList.Add(new ShapeModelDataTransferObject() { Row = raw.Row[i].D, Col = raw.Col[i].D, Angle = raw.Angle[i].D, Score = raw.Score[i].D, }); } var orderedList = aList.OrderBy(p => p.Col).ThenBy(p => p.Row).ToList(); orderedModel = new ShapeModel() { ModelId = raw.ModelId, Row = orderedList.Select(p => p.Row).ToArray(), Col = orderedList.Select(p => p.Col).ToArray(), Angle = orderedList.Select(p => p.Angle).ToArray(), Score = orderedList.Select(p => p.Score).ToArray(), }; } return orderedModel; }