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