using OpenCvSharp; using PaintDotNet.Base.DedicatedAnalysis.Porosity.Model; using PaintDotNet.Base.Functionodel; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using static PaintDotNet.Base.DedicatedAnalysis.Porosity.PorositysGlobalSettings; namespace PaintDotNet.Base.DedicatedAnalysis.Porosity { /// /// 评定方法 /// public abstract class MethodOfAssessment { public static MethodOfAssessment activeMethod; /// /// 所属的标准 /// public PorositysStandard porositysStandard; /// /// 测量区域 /// public Mat field; /// /// 相集合 /// public List phaseModelList; public string resourcesName; public string fileName; // 标准的结果模型 // 试样总检验面积 // 视场面积 // 放大倍数 /// /// 产生报告 /// public AnalysisResult generateReport(Mat originalImage, Mat binary, Mat oldMat,List rectangles, List rectangleTypeList, List phaseModelList, PorosityConfig porosityConfig,bool isOne) { Mat binaryBGR2GRAY = binary.CvtColor(ColorConversionCodes.BGR2GRAY); Cv2.Threshold(binaryBGR2GRAY, binaryBGR2GRAY, 249, 255, ThresholdTypes.Binary); List particles = this.porositysStandard.identifyParticles(binaryBGR2GRAY); particles = this.porositysStandard.filterParticles(particles); List porositys = this.porositysStandard.divideInclusion(particles); AnalysisResult analysisResult = GetAnalysisResult(); analysisResult.porositysStandard = this.porositysStandard; analysisResult.mat = originalImage; analysisResult.binaryMat = binary; analysisResult.porositys = porositys; analysisResult.rectangles = rectangles; analysisResult.rectangleTypeList = rectangleTypeList; analysisResult.oldMat = oldMat; analysisResult.porosityConfig = porosityConfig; analysisResult.phaseModels = phaseModelList; analysisResult.isOne = isOne; analysisResult.buildResultBody(); //binary.Dispose(); return analysisResult; } public abstract AnalysisResult GetAnalysisResult(); public abstract List getResultConclusionHead(); public abstract List buildResultConclusion(List analysisResults, PorosityConfig porosityConfig); /// /// 分析结果 /// public abstract class AnalysisResult { /// /// 所属标准 /// public PorositysStandard porositysStandard; /// /// 所属图片 /// public Mat mat; /// /// 所属图片 /// public Mat binaryMat; /// /// 扣的图片(视场) /// public Mat oldMat; /// /// 是否一个视场 /// public bool isOne; /// /// /// public List rectangleTypeList; /// /// 参数 /// public PorosityConfig porosityConfig; /// /// 孔隙列表 /// public List porositys; public List rectangles; public List phaseModels; public List publicResultHead = new List {"图片","视场"}; public Dictionary> resultBody = new Dictionary>(); /// /// 视场模型 /// public class FieldOfView { public string name; public RectangleF rectangle; public List porositys; /// /// 过滤有效的孔隙 /// /// public List effectiveFilteringporosity(List porositys) { List porositys1 = new List(); foreach (var item in porositys) { if (this.rectangle.Contains(item.rectProfile) || this.rectangle.IntersectsWith(item.rectProfile)) { porositys1.Add(item); } } return porositys1; } } public List getResultHead() { List resultHead = new List(); resultHead.AddRange(publicResultHead); resultHead.AddRange(getDedicatedResultHead()); return resultHead; } public abstract List getDedicatedResultHead(); public abstract void buildResultBody(); /// /// 孔隙评级 /// /// 评级图暂已硬编码形式实现 public abstract double ratingporosity(string type, double value); } } }