123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882 |
- using OpenCvSharp;
- using PaintDotNet.Annotation;
- using PaintDotNet.Base;
- using PaintDotNet.Base.CommTool;
- using PaintDotNet.Base.Functionodel;
- using PaintDotNet.Base.SettingModel;
- using PaintDotNet.Data.Param;
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace PaintDotNet.DedicatedAnalysis.GrainSizeStandard.IntegrationClass
- {
- class BinaryClass
- {
- /// <summary>
- /// 是否针对全图进行二值化操作
- /// </summary>
- public bool processWholeMat = false;
- /// <summary>
- /// 调色板
- /// </summary>
- PaintDotNet.ColorsForm colorsForm1;
- /// <summary>
- /// 构造工作结构
- /// </summary>
- private Dictionary<int, DocumentItem> documentItems;
- /// <summary>
- /// 需要的数据在这里引用
- /// </summary>
- CustomControl.BinaryControlSmaller bmc;
- /// <summary>
- /// 需要的数据在这里引用
- /// </summary>
- CustomControl.BinaryControl bc;
- AppWorkspace appWorkspace;
- DocumentWorkspaceWindow documentWorkspace;
- ListView listView1;
- /// <summary>
- /// 是否要调用二值化的算法
- /// </summary>
- private bool toApplyBinary = true;
- /// <summary>
- /// 处理程序
- /// </summary>
- private ParamObject action = new Data.Action.Action901();
- /// <summary>
- /// 初始系统参数配置值
- /// </summary>
- private BinaryExtractionModel binaryExtractionModel;
- /// <summary>
- /// 相0的图片,处理多视场使用
- /// </summary>
- public Mat PhaseModels0Mat;
- /// <summary>
- /// 辅助线集成
- /// </summary>
- public GrainSizeGuideClass guideClass;
- public ComboBox comboBox1;
- //public object SelectedItem;
- //public GrainSizeGuideClass GuideClass
- //{
- // set
- // {
- // this.guideClass = value;
- // }
- //}
- /// <summary>
- /// 公开的事件,每次二值化之后需要的计算事件写在这里
- /// </summary>
- public event EventHandler BinaryImplFinishAction;
- private void OnBinaryImplFinishAction()
- {
- if (BinaryImplFinishAction != null)
- {
- BinaryImplFinishAction(this, new EventArgs());
- }
- }
- public void InitBinaryControlEvent()
- {
- if (bmc != null)
- {
- bmc.InitBinaryControlEvent();
- bmc.BinaryGetParamAction += new EventHandler(this.bcBinaryGetParamAction);
- bmc.AutoThresClickAction += new EventHandler(this.bcAutoThresClickAction);
- bmc.InverseClickAction += new EventHandler(this.bcBinaryGetParamAction);
- bmc.InverseClickAction += new EventHandler(this.bcApplyButtonImplAction);
- bmc.RadioButton1ChangedAction += new EventHandler(this.bcBinaryGetParamAction);
- bmc.RadioButton2ChangedAction += new EventHandler(this.bcBinaryGetParamAction);
- bmc.ApplyButtonImplAction += new EventHandler(this.bcApplyButtonImplAction);
- bmc.BinaryCheckedChangedAction += new EventHandler(this.bcBinaryCheckedChanged);
- bmc.BinaryEditClickAction += new EventHandler(this.bcBinaryEditClickAction);
- bmc.PanelColorClickAction += new EventHandler(this.bcPanelColorClickAction);//初始化颜色点击事件
- return;
- }
- if (bc == null)
- return;
- bc.InitBinaryControlEvent();
- bc.BinaryGetParamAction += new EventHandler(this.bcBinaryGetParamAction);
- bc.AutoThresClickAction += new EventHandler(this.bcAutoThresClickAction);
- bc.InverseClickAction += new EventHandler(this.bcBinaryGetParamAction);
- bc.InverseClickAction += new EventHandler(this.bcApplyButtonImplAction);
- bc.RadioButton1ChangedAction += new EventHandler(this.bcBinaryGetParamAction);
- bc.RadioButton2ChangedAction += new EventHandler(this.bcBinaryGetParamAction);
- bc.ApplyButtonImplAction += new EventHandler(this.bcApplyButtonImplAction);
- bc.BinaryCheckedChangedAction += new EventHandler(this.bcBinaryCheckedChanged);
- bc.BinaryEditClickAction += new EventHandler(this.bcBinaryEditClickAction);
- bc.PanelColorClickAction += new EventHandler(this.bcPanelColorClickAction);//初始化颜色点击事件
- }
- /// <summary>
- /// 相颜色点击事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void bcPanelColorClickAction(object sender, EventArgs e)
- {
- this.colorsForm1.UserPrimaryColor = ColorBgra.FromColor(bmc != null ? bmc.BinaryBackColor : bc.BinaryBackColor);
- this.colorsForm1.ShowDialog();
- }
- /// <summary>
- /// 二值筛选
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void bcBinaryEditClickAction(object sender, EventArgs e)
- {
- if (this.documentWorkspace.PhaseModels[0].mat == null)
- {
- MessageBox.Show(PdnResources.GetString("Menu.Pleaseperonfirst.text"));
- return;
- }
- GrainBinaryBoundaryEditingDialog boundaryEditingDialog = new GrainBinaryBoundaryEditingDialog(this.appWorkspace, this.listView1.FocusedItem.Index, bmc != null ? bmc.BinaryBackColor : bc.BinaryBackColor
- , this.documentWorkspace.PhaseModels[0].mat.Clone());
- ////1013###19326 晶粒度的晶界编辑页面,需要把辅助线带过去(客户编辑只处理辅助线位置的晶界)
- if (this.guideClass != null && this.comboBox1 != null && this.comboBox1.SelectedItem != null)
- {
- boundaryEditingDialog.GuideClass = this.guideClass;
- boundaryEditingDialog.SelectedItem = this.comboBox1.SelectedItem;
- }
- if (boundaryEditingDialog.ShowDialog() == DialogResult.OK)
- {
- this.documentWorkspace.PhaseModels[0].mat = boundaryEditingDialog.PhaseMat.Clone();
- OnBinaryImplFinishAction();
- }
- }
- /// <summary>
- /// 二值化勾选改变事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void bcBinaryCheckedChanged(object sender, EventArgs e)
- {
- if (bc == null && bmc == null)
- return;
- if ((bmc != null ? bmc.BinaryChecked : bc.BinaryChecked) && !(bmc != null ? bmc.OriginChecked : bc.OriginChecked))
- {
- this.documentWorkspace.PhaseModels[0].choise = true;
- }
- else
- {
- this.documentWorkspace.PhaseModels[0].choise = false;
- }
- if (toApplyBinary)
- this.applyButtonImpl();
- else
- OnBinaryImplFinishAction();
- toApplyBinary = true;
- if (this.listView1.FocusedItem == null || !(bmc != null ? bmc.BinaryChecked : bc.BinaryChecked))
- this.documentWorkspace.Refresh();
- }
- /// <summary>
- /// 自动阈值
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void bcAutoThresClickAction(object sender, EventArgs e)
- {
- if (bc == null && bmc == null)
- return;
- Bitmap bitmap = null;
- if (listView1.FocusedItem != null)
- bitmap = this.appWorkspace.DocumentWorkspaces[this.listView1.FocusedItem.Index].CompositionSurface.CreateAliasedBitmap();
- if (bitmap != null)
- {
- //先计算阈值
- Mat mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);
- Mat gray = mat.CvtColor(ColorConversionCodes.BGR2GRAY);
- double otsu = Cv2.Threshold(gray, gray, 0, 255, ThresholdTypes.Triangle/*.Otsu*/);
- //如果当前是两个区间,则需要重新计算一次
- if (this.ColorInterval == 2)
- {
- if (bmc != null)
- bmc.OnInverseClickAction();
- else
- bc.OnInverseClickAction();
- this.ColorInterval = (bmc != null ? bmc.getInverseStyle() : bc.getInverseStyle());
- }
- else
- {
- if (bmc != null)
- bmc.setInverseStyle(1);
- else
- bc.setInverseStyle(1);
- }
- //给控件赋值
- if (bmc != null)
- bmc.scope1Start = 0;
- else
- bc.scope1Start = 0;
- if (bmc != null)
- bmc.scope1End = otsu;
- else
- bc.scope1End = otsu;
- //处理直方图
- if (bmc != null)
- bmc.UpdateVerticalBarWithOneScope(0, Convert.ToInt32(bmc.scope1End));
- else
- bc.UpdateVerticalBarWithOneScope(0, Convert.ToInt32(bc.scope1End));
- mat.Dispose();
- GC.Collect();
- this.bcApplyButtonImplAction(sender, e);
- }
- else
- {
- MessageBox.Show(PdnResources.GetString("Menu.Pleaseselectapicturefirst.text"));
- }
- }
- /// <summary>
- /// 执行读取参数的事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void bcBinaryGetParamAction(object sender, EventArgs e)
- {
- if (bc == null && bmc == null)
- return;
- this.binaryExtractionModel.ColorInterval = (bmc != null ? bmc.getInverseStyle() : bc.getInverseStyle());//###
- this.binaryExtractionModel.BinaryStyle = (bmc != null ? bmc.BinaryStyle : bc.BinaryStyle);
- this.binaryExtractionModel.ColorOneStart = (int)(bmc != null ? bmc.scope1Start : bc.scope1Start);
- this.binaryExtractionModel.ColorOneEnd = (int)(bmc != null ? bmc.scope1End : bc.scope1End);
- this.binaryExtractionModel.ColorTwoStart = (int)(bmc != null ? bmc.scope2Start : bc.scope2Start);
- this.binaryExtractionModel.ColorTwoEnd = (int)(bmc != null ? bmc.scope2End : bc.scope2End);
- this.binaryExtractionModel.ColorThreeStart = (int)(bmc != null ? bmc.scope3Start : bc.scope3Start);
- this.binaryExtractionModel.ColorThreeEnd = (int)(bmc != null ? bmc.scope3End : bc.scope3End);
- foreach (Args args in action.Lists)
- {
- if (args.Key == "colorInterval")
- args.Value = this.binaryExtractionModel.ColorInterval;
- else if (args.Key == "binaryStyle")
- args.Value = (bmc != null ? bmc.BinaryStyle : bc.BinaryStyle);
- else if (args.Key == "scope1")
- {
- ((List<double>)args.Value)[0] = (int)(bmc != null ? bmc.scope1Start : bc.scope1Start);
- ((List<double>)args.Value)[1] = (int)(bmc != null ? bmc.scope1End : bc.scope1End);
- }
- else if (args.Key == "scope2")
- {
- ((List<double>)args.Value)[0] = (int)(bmc != null ? bmc.scope2Start : bc.scope2Start);
- ((List<double>)args.Value)[1] = (int)(bmc != null ? bmc.scope2End : bc.scope2End);
- }
- else if (args.Key == "scope3")
- {
- ((List<double>)args.Value)[0] = (int)(bmc != null ? bmc.scope3Start : bc.scope3Start);
- ((List<double>)args.Value)[1] = (int)(bmc != null ? bmc.scope3End : bc.scope3End);
- }
- }
- }
- /// <summary>
- /// 获取相的工作结构
- /// </summary>
- /// <param name="index">指明获取第几个相的工作结构</param>
- /// <returns></returns>
- public List<PhaseModel> getPhaseModels(int index)
- {
- return this.documentItems[index].phaseModels;
- }
- ///// <summary>
- ///// 判断是否存在视场
- ///// </summary>
- ///// <returns></returns>
- //public bool IsExsitView()
- //{
- // if (this.graphicsList != null && this.graphicsList.Count > 0
- // && this.graphicsList.FindAll(a => a.objectType == DrawClass.View).Count > 0)
- // {
- // return true;
- // }
- // return false;
- //}
- /// <summary>
- /// ListView图片选择改变事件,不显示视场
- /// </summary>
- /// <param name="bitmap">选择改变后的图片</param>
- public void listView1_SelectedIndexChangedHideDrawClassView(Bitmap bitmap)
- {
- Document document = Document.FromImage(bitmap);
- this.documentWorkspace.Document = document;
- this.documentWorkspace.Visible = true;
- GraphicsList itemGraphicsList = this.appWorkspace.DocumentWorkspaces[this.listView1.FocusedItem.Index].GraphicsList;
- GraphicsList graphicsList = new GraphicsList();
- for (int j = 0; j < itemGraphicsList.Count; j++)
- {
- if (itemGraphicsList[j].objectType != Annotation.Enum.DrawClass.View)
- graphicsList.Add(itemGraphicsList[j]);
- }
- this.documentWorkspace.GraphicsList = graphicsList;
- this.documentWorkspace.PhaseModels = new List<PhaseModel>();
- this.documentWorkspace.PhaseModels.AddRange(this.getPhaseModels(this.listView1.FocusedItem.Index));
- if ((bc != null || bmc != null) && this.documentWorkspace.PhaseModels[0].mat != null)
- {
- if (!(bmc != null ? bmc.BinaryChecked : bc.BinaryChecked) && this.documentWorkspace.PhaseModels[0].choise)
- {
- this.toApplyBinary = false;
- if (bmc != null)
- bmc.BinaryChecked = true;
- else
- bc.BinaryChecked = true;
- }
- }
- else
- {
- this.applyButtonImpl();
- }
- if ((bc != null || bmc != null) && !this.documentWorkspace.PhaseModels[0].choise)
- if (bmc != null)
- bmc.BinaryChecked = false;
- else
- bc.BinaryChecked = false;
- //显示直方图
- if (bc != null || bmc != null)
- if (bmc != null)
- bmc.CreateHistogram(bitmap, true, 339, 130, 0);
- else
- bc.CreateHistogram(bitmap, true, 339, 130, 0);
- }
- /// <summary>
- /// ListView图片选择改变事件
- /// </summary>
- /// <param name="bitmap">选择改变后的图片</param>
- public void listView1_SelectedIndexChanged(Bitmap bitmap)
- {
- Document document = Document.FromImage(bitmap);
- this.documentWorkspace.Document = document;
- this.documentWorkspace.Visible = true;
- this.documentWorkspace.GraphicsList = this.appWorkspace.DocumentWorkspaces[this.listView1.FocusedItem.Index].GraphicsList;
- this.documentWorkspace.PhaseModels = new List<PhaseModel>();
- this.documentWorkspace.PhaseModels.AddRange(this.getPhaseModels(this.listView1.FocusedItem.Index));
- if ((bc != null || bmc != null) && this.documentWorkspace.PhaseModels[0].mat != null)
- {
- if (!(bmc != null ? bmc.BinaryChecked : bc.BinaryChecked) && this.documentWorkspace.PhaseModels[0].choise)
- {
- this.toApplyBinary = false;
- if (bmc != null)
- bmc.BinaryChecked = true;
- else
- bc.BinaryChecked = true;
- }
- }
- else
- {
- this.applyButtonImpl();
- }
- if ((bc != null || bmc != null) && !this.documentWorkspace.PhaseModels[0].choise)
- if (bmc != null)
- bmc.BinaryChecked = false;
- else
- bc.BinaryChecked = false;
- //显示直方图
- if (bc != null || bmc != null)
- if (bmc != null)
- bmc.CreateHistogram(bitmap, true, 339, 130, 0);
- else
- bc.CreateHistogram(bitmap, true, 339, 130, 0);
- }
- /// <summary>
- /// ListView图片选择改变事件
- /// </summary>
- /// <param name="bitmap">选择改变后的图片</param>
- public void listView1_SelectedIndexChangedNoCheckedChanged(Bitmap bitmap)
- {
- Document document = Document.FromImage(bitmap);
- this.documentWorkspace.Document = document;
- this.documentWorkspace.Visible = true;
- this.documentWorkspace.GraphicsList = this.appWorkspace.DocumentWorkspaces[this.listView1.FocusedItem.Index].GraphicsList;
- this.documentWorkspace.PhaseModels = new List<PhaseModel>();
- this.documentWorkspace.PhaseModels.AddRange(this.getPhaseModels(this.listView1.FocusedItem.Index));
- if ((bc != null || bmc != null) && this.documentWorkspace.PhaseModels[0].mat != null)
- {
- if (!(bmc != null ? bmc.BinaryChecked : bc.BinaryChecked) && this.documentWorkspace.PhaseModels[0].choise)//to sure and test
- {
- this.toApplyBinary = false;
- if (bmc != null)
- bmc.BinaryChecked = true;
- else
- bc.BinaryChecked = true;
- }
- }
- else
- {
- this.applyButtonImpl();
- }
- ////to sure and test
- //if (bc != null && !this.documentWorkspace.PhaseModels[0].choise)
- // bc.BinaryChecked = false;
- //显示直方图
- if (bc != null || bmc != null)
- if (bmc != null)
- bmc.CreateHistogram(bitmap, true, 339, 130, 0);
- else
- bc.CreateHistogram(bitmap, true, 339, 130, 0);
- }
- /// <summary>
- /// 构造相的工作结构
- /// </summary>
- /// <param name="phaseNames">相的命名,如果只有二值则只传PdnResources.GetString("Menu.BinaryAction.BinaryExtraction.Text")即可,没有特殊情况命名第一个相为PdnResources.GetString("Menu.BinaryAction.BinaryExtraction.Text")</param>
- /// <param name="bmc"></param>
- /// <param name="appWorkspace"></param>
- /// <param name="documentWorkspace"></param>
- public void createDocumentItemsSmaller(string[] phaseNames, CustomControl.BinaryControlSmaller bmc, AppWorkspace appWorkspace
- , DocumentWorkspaceWindow documentWorkspace, ListView listView1)
- {
- this.bmc = bmc;
- this.appWorkspace = appWorkspace;
- this.documentWorkspace = documentWorkspace;
- this.listView1 = listView1;
- this.initParams();
- for (int i = 0; i < phaseNames.Length; i++)
- {
- PhaseModel model = new PhaseModel();
- model.choise = true;
- model.mat = null;
- model.color = (i == 0 && bmc != null) ? bmc.BinaryBackColor.ToArgb() : Color.Green.ToArgb();//###
- model.position = documentWorkspace.PhaseModels.Count + 1;
- model.name = phaseNames[i];
- documentWorkspace.PhaseModels.Add(model);
- }
- this.documentItems = new Dictionary<int, DocumentItem>();
- // 构造工作结构
- for (int i = 0; i < appWorkspace.DocumentWorkspaces.Length; i++)
- {
- Bitmap bitmap = appWorkspace.DocumentWorkspaces[i].CompositionSurface.CreateAliasedBitmap();
- GraphicsList graphicsList = new GraphicsList();
- for (int j = 0; j < appWorkspace.DocumentWorkspaces[i].GraphicsList.Count; j++)
- {
- graphicsList.Add(appWorkspace.DocumentWorkspaces[i].GraphicsList[j]);
- }
- List<PhaseModel> phaseModels = new List<PhaseModel>();
- for (int j = 0; j < phaseNames.Length; j++)
- {
- //二值化相关
- if (j == 0)
- {
- PhaseModel analysisModel = appWorkspace.DocumentWorkspaces[i].AnalysisPhaseModel;
- if (analysisModel == null)
- {
- PhaseModel model = new PhaseModel();
- model.choise = true;
- model.mat = null;
- model.color = bmc != null ? bmc.BinaryBackColor.ToArgb() : Color.Green.ToArgb();
- model.position = phaseModels.Count + 1;
- model.name = phaseNames[j];
- phaseModels.Add(model);
- }
- else
- phaseModels.Add(analysisModel);
- }
- else
- {
- PhaseModel model = new PhaseModel();
- model.choise = true;
- model.mat = null;
- model.color = Color.Green/*panel2.BackColor*/.ToArgb();//###
- model.position = phaseModels.Count + 1;
- model.name = phaseNames[j];
- phaseModels.Add(model);
- }
- }
- this.documentItems.Add(i, new DocumentItem(bitmap, graphicsList, phaseModels));
- }
- this.InitParameterToControl();//###
- this.InitBinaryControlEvent();
- }
- /// <summary>
- /// 构造相的工作结构
- /// </summary>
- /// <param name="phaseNames">相的命名,如果只有二值则只传(二值提取)即可,没有特殊情况命名第一个相为(二值提取)</param>
- /// <param name="bc"></param>
- /// <param name="appWorkspace"></param>
- /// <param name="documentWorkspace"></param>
- public void createDocumentItems(string[] phaseNames, CustomControl.BinaryControl bc, AppWorkspace appWorkspace
- , DocumentWorkspaceWindow documentWorkspace, ListView listView1)
- {
- this.bc = bc;
- this.appWorkspace = appWorkspace;
- this.documentWorkspace = documentWorkspace;
- this.listView1 = listView1;
- this.initParams();
- for (int i = 0; i < phaseNames.Length; i++)
- {
- PhaseModel model = new PhaseModel();
- model.choise = true;
- model.mat = null;
- model.color = (i == 0 && bc != null) ? bc.BinaryBackColor.ToArgb() : Color.Green.ToArgb();//###
- model.position = documentWorkspace.PhaseModels.Count + 1;
- model.name = phaseNames[i];
- documentWorkspace.PhaseModels.Add(model);
- }
- this.documentItems = new Dictionary<int, DocumentItem>();
- // 构造工作结构
- for (int i = 0; i < appWorkspace.DocumentWorkspaces.Length; i++)
- {
- Bitmap bitmap = appWorkspace.DocumentWorkspaces[i].CompositionSurface.CreateAliasedBitmap();
- GraphicsList graphicsList = new GraphicsList();
- for (int j = 0; j < appWorkspace.DocumentWorkspaces[i].GraphicsList.Count; j++)
- {
- graphicsList.Add(appWorkspace.DocumentWorkspaces[i].GraphicsList[j]);
- }
- List<PhaseModel> phaseModels = new List<PhaseModel>();
- for (int j = 0; j < phaseNames.Length; j++)
- {
- //二值化相关
- if (j == 0)
- {
- PhaseModel analysisModel = appWorkspace.DocumentWorkspaces[i].AnalysisPhaseModel;
- if (analysisModel == null)
- {
- PhaseModel model = new PhaseModel();
- model.choise = true;
- model.mat = null;
- model.color = bc != null ? bc.BinaryBackColor.ToArgb() : Color.Green.ToArgb();
- model.position = phaseModels.Count + 1;
- model.name = phaseNames[j];
- phaseModels.Add(model);
- }
- else
- phaseModels.Add(analysisModel);
- }
- else
- {
- PhaseModel model = new PhaseModel();
- model.choise = true;
- model.mat = null;
- model.color = Color.Green/*panel2.BackColor*/.ToArgb();//###
- model.position = phaseModels.Count + 1;
- model.name = phaseNames[j];
- phaseModels.Add(model);
- }
- }
- this.documentItems.Add(i, new DocumentItem(bitmap, graphicsList, phaseModels));
- }
- this.InitParameterToControl();//###
- this.InitBinaryControlEvent();
- }
- /// <summary>
- /// 无视场执行运算
- /// </summary>
- public OpenCvSharp.Mat PerformProcess(OpenCvSharp.Mat src) { return action.PerformProcess(src); }
- /// <summary>
- /// 多视场执行运算
- /// </summary>
- /// <param name="src">视场mat</param>
- /// <param name="mat">原图mat</param>
- /// <returns></returns>
- public OpenCvSharp.Mat PerformProcess(OpenCvSharp.Mat src, OpenCvSharp.Mat mat) { return action.PerformProcess(src, mat); }
- public int ColorInterval
- {
- get
- {
- return this.binaryExtractionModel.ColorInterval;
- }
- set
- {
- this.binaryExtractionModel.ColorInterval = value;
- }
- }
- private void colorsForm1Changed(object sender, EventArgs e)
- {
- Color color = this.colorsForm1.UserPrimaryColor.ToColor();
- this.SetBinaryBackColor(color);//改变参数配置的相颜色
- this.colorsForm1.Close();
- }
- /// <summary>
- /// 把参数的值设置到控件上
- /// </summary>
- public void InitParameterToControl()
- {
- //
- //调色板
- //
- this.colorsForm1 = new ColorsForm();
- this.colorsForm1.StartPosition = FormStartPosition.CenterScreen;
- this.colorsForm1.setSaveBtn_Click(new System.EventHandler(this.colorsForm1Changed));
- if (this.binaryExtractionModel != null)
- {
- if (bc != null || bmc != null)
- {
- //阈值相关
- //1个颜色区间还是2个
- if (bmc != null)
- bmc.setInverseStyle((this.binaryExtractionModel.ColorInterval == 1) ? 1 : 2);
- else
- bc.setInverseStyle((this.binaryExtractionModel.ColorInterval == 1) ? 1 : 2);
- //删除事件
- if (bmc != null)
- bmc.DeleteEventHandler();
- else
- bc.DeleteEventHandler();
- if (bmc != null)
- bmc.scope1End = this.binaryExtractionModel.ColorOneEnd;
- else
- bc.scope1End = this.binaryExtractionModel.ColorOneEnd;
- if (bmc != null)
- bmc.scope1Start = this.binaryExtractionModel.ColorOneStart;
- else
- bc.scope1Start = this.binaryExtractionModel.ColorOneStart;
- if (bmc != null)
- bmc.scope2End = this.binaryExtractionModel.ColorTwoEnd;
- else
- bc.scope2End = this.binaryExtractionModel.ColorTwoEnd;
- if (bmc != null)
- bmc.scope2Start = this.binaryExtractionModel.ColorTwoStart;
- else
- bc.scope2Start = this.binaryExtractionModel.ColorTwoStart;
- if (bmc != null)
- bmc.scope3End = this.binaryExtractionModel.ColorThreeEnd;
- else
- bc.scope3End = this.binaryExtractionModel.ColorThreeEnd;
- if (bmc != null)
- bmc.scope3Start = this.binaryExtractionModel.ColorThreeStart;
- else
- bc.scope3Start = this.binaryExtractionModel.ColorThreeStart;
- if (bmc != null)
- bmc.BinaryStyle = this.binaryExtractionModel.BinaryStyle;
- else
- bc.BinaryStyle = this.binaryExtractionModel.BinaryStyle;
- if (bmc != null)
- bmc.BinaryBackColor = Color.FromArgb(this.binaryExtractionModel.PhaseColor);
- else
- bc.BinaryBackColor = Color.FromArgb(this.binaryExtractionModel.PhaseColor);
- //添加事件
- if (bmc != null)
- bmc.AddEventHandler();
- else
- bc.AddEventHandler();
- if (bmc != null)
- bmc.InitParameterToControl();
- else
- bc.InitParameterToControl();
- }
- this.applyButtonImpl();
- }
- }
- public void SetBinaryBackColor(Color color)
- {
- if (bmc != null)
- bmc.BinaryBackColor = color;//设置panel背景
- else
- bc.BinaryBackColor = color;//设置panel背景
- this.binaryExtractionModel.PhaseColor = color.ToArgb();
- //###
- foreach (Args args in action.Lists)
- {
- if (args.Key == "phaseColor")
- {
- args.Value = color.ToArgb();//this.binaryExtractionModel.PhaseColor
- break;
- }
- }
- this.applyButtonImpl();
- }
- /// <summary>
- /// 保证二值化颜色赋值到action
- /// </summary>
- public void loadParams()
- {
- if (bc == null && bmc == null)
- return;
- foreach (Args args in action.Lists)
- {
- switch (args.Key)
- {
- case "scope1"://不反选时候的范围
- if (bmc != null)
- bmc.ScopeValue1ChangedAction += new EventHandler(((DecimalScope)args).numberScope_ValueChanged);
- else
- bc.ScopeValue1ChangedAction += new EventHandler(((DecimalScope)args).numberScope_ValueChanged);
- break;
- case "scope2"://反选时候的范围1
- if (bmc != null)
- bmc.ScopeValue2ChangedAction += new EventHandler(((DecimalScope)args).numberScope_ValueChanged);
- else
- bc.ScopeValue2ChangedAction += new EventHandler(((DecimalScope)args).numberScope_ValueChanged);
- break;
- case "scope3"://反选时候的范围2
- if (bmc != null)
- bmc.ScopeValue3ChangedAction += new EventHandler(((DecimalScope)args).numberScope_ValueChanged);
- else
- bc.ScopeValue3ChangedAction += new EventHandler(((DecimalScope)args).numberScope_ValueChanged);
- break;
- case "phaseColor":
- args.Value = this.binaryExtractionModel.PhaseColor;
- break;
- default:
- break;
- }
- }
- }
- /// <summary>
- /// 执行二值方法的事件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void bcApplyButtonImplAction(object sender, EventArgs e)
- {
- this.applyButtonImpl(/*bitmap*/);
- }
- /// <summary>
- /// 参数改变时,重新处理图像
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- public void applyButtonImpl(/*Bitmap bitmap*/)
- {
- if (bc == null && bmc == null)
- return;
- //long start = Cv2.GetTickCount();
- if (listView1.FocusedItem != null && (bmc != null ? bmc.BinaryChecked : bc.BinaryChecked))
- {
- Bitmap bitmap = this.appWorkspace.DocumentWorkspaces[this.listView1.FocusedItem.Index].CompositionSurface.CreateAliasedBitmap();
- //判断是否存在视场,如果存在视场,则把视场提取出来,进行处理
- if (!processWholeMat && documentWorkspace.GraphicsList.IsExsitView())
- {
- documentWorkspace.PhaseModels[0].mat = this.PerformProcess(
- OpenCvSharp.Extensions.BitmapConverter.ToMat(documentWorkspace.GetFullSizeWithRegion()),
- OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap));
- documentWorkspace.PhaseModels[0].color = (bmc != null ? bmc.BinaryBackColor.ToArgb() : bc.BinaryBackColor.ToArgb());
- documentWorkspace.Refresh();
- }
- else if (processWholeMat && documentWorkspace.GraphicsList.IsExsitView())
- {
- if (PhaseModels0Mat != null)
- {
- PhaseModels0Mat.Dispose();
- PhaseModels0Mat = null;
- }
- Mat OrgImg0 = this.PerformProcess(OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap));
- PhaseModels0Mat = OrgImg0.Clone();
- Vec4b vec4 = new Vec4b(0, 0, 0, 0);
- //视场图像
- Mat exsitViewMatOrg = OpenCvSharp.Extensions.BitmapConverter.ToMat(documentWorkspace.GetFullSizeWithRegion());
- for (int y = 0; y < exsitViewMatOrg/*temp*/.Rows; y++)
- {
- for (int x = 0; x < exsitViewMatOrg/*temp*/.Cols; x++)
- {
- if (exsitViewMatOrg.At<Vec4b>(y, x).Item3 == 0)
- OrgImg0.Set(y, x, vec4);//不在视场图像范围内
- }
- }
- documentWorkspace.PhaseModels[0].mat = OrgImg0;
- documentWorkspace.PhaseModels[0].color = (bmc != null ? bmc.BinaryBackColor.ToArgb() : bc.BinaryBackColor.ToArgb());
- documentWorkspace.Refresh();
- }
- else
- {
- documentWorkspace.PhaseModels[0].mat = this.PerformProcess(OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap));
- documentWorkspace.PhaseModels[0].color = (bmc != null ? bmc.BinaryBackColor.ToArgb() : bc.BinaryBackColor.ToArgb());
- documentWorkspace.Refresh();
- }
- }
- //double time = (Cv2.GetTickCount() - start) / Cv2.GetTickFrequency();
- //System.Console.WriteLine("执行时间:" + time);
- //AddRectangleToRectangleFCaps();//0916###18745
- OnBinaryImplFinishAction();
- }
- /// <summary>
- /// 初始化二值化相关的变量
- /// </summary>
- public void initParams()
- {
- this.binaryExtractionModel = XmlSerializeHelper.DESerializer<BinaryExtractionModel>(FileOperationHelper.ReadStringFromFile(Application.StartupPath + "\\Config\\" + Startup.instance.SettingPrefix + "\\BinaryExtraction\\Default.xml", FileMode.Open));
- }
- #region 内部类
- internal class LocalListViewItem
- {
- public DocumentWorkspace Value { get; }
- public string Display { get; }
- public LocalListViewItem(DocumentWorkspace Value, string Display)
- {
- this.Value = Value;
- this.Display = Display;
- }
- }
- internal class DocumentItem
- {
- public Bitmap bitmap;
- public GraphicsList graphicsList;
- public List<PhaseModel> phaseModels;
- public DocumentItem(Bitmap bitmap, GraphicsList graphicsList, List<PhaseModel> phaseModels)
- {
- this.bitmap = bitmap;
- this.graphicsList = graphicsList;
- this.phaseModels = phaseModels;
- }
- }
- #endregion
- }
- }
|