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);
}
}
}