123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386 |
- using OpenCvSharp;
- using OpenCvSharp.Extensions;
- using PaintDotNet.Annotation;
- using PaintDotNet.Annotation.Enum;
- using PaintDotNet.Annotation.FieldView;
- using PaintDotNet.Base.DedicatedAnalysis.Porosity;
- using PaintDotNet.Base.DedicatedAnalysis.Porosity.Standard.TypesOfAssessment;
- using PaintDotNet.Base.Functionodel;
- using PaintDotNet.GeneralAnalysis;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace PaintDotNet.DedicatedAnalysis.Porosity.GBT37787
- {
- partial class GBT37787Dialog : PorosityStandardDialog
- {
- private GroupBox groupBox1;
- private DataGridView dataGridView1;
- private DataGridViewTextBoxColumn Column11;
- private DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;
- private DataGridViewTextBoxColumn dataGridViewTextBoxColumn2;
- private DataGridViewTextBoxColumn dataGridViewTextBoxColumn3;
- private DataGridViewTextBoxColumn dataGridViewTextBoxColumn4;
- public GBT37787Dialog(AppWorkspace appWorkspace, string dialogText, PdnMenuItem menuItem) : base(appWorkspace, dialogText, menuItem)
- {
- InitializeComponent();
- InitializeLanguageText();
- }
- private void InitializeLanguageText()
- {
- this.dataGridViewTextBoxColumn2.HeaderText = PdnResources.GetString("Menu.Phasearea.text");
- this.dataGridViewTextBoxColumn1.HeaderText = PdnResources.GetString("Menu.Phasename.text");
- this.Column11.HeaderText = PdnResources.GetString("Menu.view.text");
- this.groupBox1.Text = PdnResources.GetString("Menu.reckoning.text");
- this.dataGridViewTextBoxColumn3.HeaderText = PdnResources.GetString("Menu.proportion.text");
- this.dataGridViewTextBoxColumn4.HeaderText = PdnResources.GetString("Menu.Phasecontent.text");
- this.Text = "GBT37787_2019(" + PdnResources.GetString("Menu.Porosity.text") + ")";
- }
- private void InitializeComponent()
- {
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();
- this.groupBox1 = new System.Windows.Forms.GroupBox();
- this.dataGridView1 = new System.Windows.Forms.DataGridView();
- this.Column11 = new System.Windows.Forms.DataGridViewTextBoxColumn();
- this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
- this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
- this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
- this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn();
- ((System.ComponentModel.ISupportInitialize)(this.numericUpDown_lwRatioLimit)).BeginInit();
- this.groupBox1.SuspendLayout();
- ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
- this.SuspendLayout();
- //
- // groupBox1
- //
- this.groupBox1.Controls.Add(this.dataGridView1);
- this.groupBox1.Location = new System.Drawing.Point(178, 370);
- this.groupBox1.Name = "groupBox1";
- this.groupBox1.Size = new System.Drawing.Size(356, 186);
- this.groupBox1.TabIndex = 35;
- this.groupBox1.TabStop = false;
- //
- // dataGridView1
- //
- this.dataGridView1.AllowUserToAddRows = false;
- this.dataGridView1.BackgroundColor = System.Drawing.SystemColors.ControlLightLight;
- dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
- dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
- dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
- this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
- this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
- this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
- this.Column11,
- this.dataGridViewTextBoxColumn1,
- this.dataGridViewTextBoxColumn2,
- this.dataGridViewTextBoxColumn3,
- this.dataGridViewTextBoxColumn4});
- this.dataGridView1.Location = new System.Drawing.Point(8, 20);
- this.dataGridView1.MultiSelect = false;
- this.dataGridView1.Name = "dataGridView1";
- this.dataGridView1.ReadOnly = true;
- this.dataGridView1.RowHeadersVisible = false;
- this.dataGridView1.RowTemplate.Height = 23;
- this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
- this.dataGridView1.Size = new System.Drawing.Size(340, 157);
- this.dataGridView1.TabIndex = 1;
- //
- // Column11
- //
- dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
- this.Column11.DefaultCellStyle = dataGridViewCellStyle2;
- this.Column11.Name = "Column11";
- this.Column11.ReadOnly = true;
- this.Column11.Width = 80;
- //
- // dataGridViewTextBoxColumn1
- //
- dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
- this.dataGridViewTextBoxColumn1.DefaultCellStyle = dataGridViewCellStyle3;
- this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1";
- this.dataGridViewTextBoxColumn1.ReadOnly = true;
- this.dataGridViewTextBoxColumn1.Width = 70;
- //
- // dataGridViewTextBoxColumn2
- //
- dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
- this.dataGridViewTextBoxColumn2.DefaultCellStyle = dataGridViewCellStyle4;
- this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2";
- this.dataGridViewTextBoxColumn2.ReadOnly = true;
- this.dataGridViewTextBoxColumn2.Width = 70;
- //
- // dataGridViewTextBoxColumn3
- //
- dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
- this.dataGridViewTextBoxColumn3.DefaultCellStyle = dataGridViewCellStyle5;
- this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3";
- this.dataGridViewTextBoxColumn3.ReadOnly = true;
- this.dataGridViewTextBoxColumn3.Width = 60;
- //
- // dataGridViewTextBoxColumn4
- //
- dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
- this.dataGridViewTextBoxColumn4.DefaultCellStyle = dataGridViewCellStyle6;
- this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4";
- this.dataGridViewTextBoxColumn4.ReadOnly = true;
- this.dataGridViewTextBoxColumn4.Width = 70;
- //
- // GBT37787Dialog
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
- this.ClientSize = new System.Drawing.Size(1177, 761);
- this.Controls.Add(this.groupBox1);
- this.Name = "GBT37787Dialog";
- this.Controls.SetChildIndex(this.groupBox1, 0);
- ((System.ComponentModel.ISupportInitialize)(this.numericUpDown_lwRatioLimit)).EndInit();
- this.groupBox1.ResumeLayout(false);
- ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
- this.ResumeLayout(false);
- }
- #region 需继承方法
- protected override void SubclassInitialize()
- {
- InitializeComponent();
- }
- protected override MethodOfAssessment getMethodOfAssessment()
- {
- return new MethodOfGBT37787(this.imgPxPerUnit);
- }
- protected override void initColorSetting()
- {
- //this.radioButton_Black.CheckedChanged += new System.EventHandler(colorSettingRadioButton);
- //this.radioButton_Gray.CheckedChanged += new System.EventHandler(colorSettingRadioButton);
- //this.radioButton_LightBlue.CheckedChanged += new System.EventHandler(colorSettingRadioButton);
- //this.radioButton_DarkGray.CheckedChanged += new System.EventHandler(colorSettingRadioButton);
- }
- protected override void initDisplaySetting()
- {
- //this.panel_displaySetting_SS.BackColor = Color.FromArgb(MethodOfAssessment.activeMethod.inclusionsStandard.globalSettings.typeDics["SS"].showColor);
- //this.panel_displaySetting_OS.BackColor = Color.FromArgb(MethodOfAssessment.activeMethod.inclusionsStandard.globalSettings.typeDics["OS"].showColor);
- //this.panel_displaySetting_OA.BackColor = Color.FromArgb(MethodOfAssessment.activeMethod.inclusionsStandard.globalSettings.typeDics["OA"].showColor);
- //this.panel_displaySetting_OG.BackColor = Color.FromArgb(MethodOfAssessment.activeMethod.inclusionsStandard.globalSettings.typeDics["OG"].showColor);
- }
- protected override void list_add_data()
- {
- }
- #endregion 需继承方法
- /// <summary>
- /// 获取视场即相相关参数
- /// </summary>
- protected override void getAllView()
- {
- double pxPerUnit = Startup.instance.rules[MeasurementUnit.Micron];
- if (this.documentWorkspace.phaseModels.Count == 0)
- {
- MessageBox.Show(PdnResources.GetString("Menu.Thereisnophasetoanalyze.text")+"!");
- return;
- }
- dataGridView1.Rows.Clear();
- if (this.lstView_img.FocusedItem != null)
- {
- //总面积
- double fullArea = AnalysisTools.GetPointsFromMat(this.imageMat.Clone()) * pxPerUnit * pxPerUnit;
- int num = 2;
- if (this.domainUpDown_resultPrecision.SelectedIndex != -1)
- {
- num = Convert.ToInt32(this.domainUpDown_resultPrecision.Items[this.domainUpDown_resultPrecision.SelectedIndex]);
- }
- if (this.documentWorkspace.GraphicsList.IsExsitView())
- {
- int m = 0;
- for (int k = 0; k < this.documentWorkspace.GraphicsList.Count; k++)
- {
- if (this.documentWorkspace.GraphicsList[k].objectType != DrawClass.View || (this.documentWorkspace.GraphicsList[k].Rectangle.Width == 0 && this.documentWorkspace.GraphicsList[k].Rectangle.Height == 0)) {
- continue;
- }
- for (int i = 0; i < this.originalPhaseModels.Count; i++)
- {
- PhaseModel pModel = this.originalPhaseModels[i];
- if (pModel.mat == null)
- {
- pModel.mat = this.documentWorkspace.phaseModels[i].mat;
- }
- // TODO 用于在一张图中扣出所有视场的Mat
- Bitmap bitmap = this.appWorkspace.DocumentWorkspaces[this.lstView_img.FocusedItem.Index].GetCutSizeWithColorWhiteOrTransparentColor(false);
- Mat oldMapabc = PaintDotNet.Camera.Tools.ToMat(bitmap);
- int X = (int)this.documentWorkspace.GraphicsList[k].Rectangle.X;
- int Y = (int)this.documentWorkspace.GraphicsList[k].Rectangle.Y;
- int reWidth = (int)this.documentWorkspace.GraphicsList[k].Rectangle.Width;
- int reHeight = (int)this.documentWorkspace.GraphicsList[k].Rectangle.Height;
- if (this.documentWorkspace.GraphicsList[k].Rectangle.Contains(new RectangleF(0, 0, bitmap.Width, bitmap.Height)))
- {
- X = 0;
- Y = 0;
- reWidth = bitmap.Width;
- reHeight = bitmap.Height;
- }
- else {
- if (this.documentWorkspace.GraphicsList[k].Rectangle.IntersectsWith(new RectangleF(0, 0, bitmap.Width, bitmap.Height))) {
- RectangleF rectangleF = new RectangleF(this.documentWorkspace.GraphicsList[k].Rectangle.X, this.documentWorkspace.GraphicsList[k].Rectangle.Y, this.documentWorkspace.GraphicsList[k].Rectangle.Width, this.documentWorkspace.GraphicsList[k].Rectangle.Height);
- rectangleF.Intersect(new RectangleF(0, 0, bitmap.Width, bitmap.Height));
- X = (int)rectangleF.X;
- Y = (int)rectangleF.Y;
- reWidth = (int)rectangleF.Width;
- reHeight = (int)rectangleF.Height;
- }
- }
- Mat oldMap = new Mat(oldMapabc, new Rect(X, Y, reWidth, reHeight));
- //寻找并标记区域个数
- Mat labelMat = new Mat();
- Mat stats = new Mat();
- Mat centroids = new Mat();
- int nonenum = Cv2.ConnectedComponentsWithStats(oldMap.CvtColor(ColorConversionCodes.BGR2GRAY), labelMat, stats, centroids, PixelConnectivity.Connectivity8);
- for (int h = 1; h < centroids.Cols; h++)
- {
- int x = stats.At<int>(h, 0);
- int y = stats.At<int>(h, 1);
- int width = stats.At<int>(h, 2);
- int height = stats.At<int>(h, 3);
- int area = stats.At<int>(h, 4);
- //if (x < 0 || y < 0 || width > bitmap.Width || height > bitmap.Height)
- //{
- // continue;
- //}
- Mat ImageROI1 = new Mat(pModel.mat, new Rect(X, Y, reWidth, reHeight));
- Mat[] contours = null;
- Mat hierarchy = new Mat();
- Mat mat = Mat.FromImageData(ImageROI1.ToBytes(), ImreadModes.Grayscale);
- Cv2.FindContours(mat, out contours, hierarchy, RetrievalModes.External, ContourApproximationModes.ApproxNone);
- CounterResult result = new CounterResult();
- result.GraphName = lstView_img.FocusedItem.Text;
- result.PolyphaseName = pModel.name;
- result.Count = contours.Count();
- //视场面积
- int viewArea = (int)(this.documentWorkspace.GraphicsList[k].Rectangle.Width * this.documentWorkspace.GraphicsList[k].Rectangle.Height * pxPerUnit * pxPerUnit);
- //相面积
- double phaseArea = AnalysisTools.GetPointsFromMat(ImageROI1) * pxPerUnit * pxPerUnit;
- result.Area = Convert.ToDouble(Math.Round(Convert.ToDecimal(phaseArea), num));
- // 比例
- result.AreaContent = viewArea > 0 ? (double)(((double)phaseArea) / ((double)viewArea)) * 100 : 0;
- result.AreaContent = Convert.ToDouble(Math.Round(Convert.ToDecimal(result.AreaContent), num));
- //相含量
- result.AreaPercent = fullArea > 0 ? (double)(result.Area / fullArea) * 100 : 0;
- result.AreaPercent = Convert.ToDouble(Math.Round(Convert.ToDecimal(result.AreaPercent), num));
- dataGridView1.Rows.Add(PdnResources.GetString("Menu.view.text") + m + "-相" + (h -1), result.PolyphaseName, result.Area, result.AreaContent, result.AreaPercent);
- m++;
- }
- }
- }
- }
- else {
- for (int i = 0; i < this.originalPhaseModels.Count; i++)
- {
- PhaseModel pModel = this.originalPhaseModels[i];
- if (pModel.mat == null) {
- pModel.mat = this.documentWorkspace.phaseModels[i].mat;
- }
- Mat[] contours = null;
- Mat hierarchy = new Mat();
- Mat mat = Mat.FromImageData(pModel.mat.ToBytes(), ImreadModes.Grayscale);
- Cv2.FindContours(mat, out contours, hierarchy, RetrievalModes.External, ContourApproximationModes.ApproxNone);
- CounterResult result = new CounterResult();
- result.GraphName = lstView_img.FocusedItem.Text;
- result.PolyphaseName = pModel.name;
- result.Count = contours.Count();
- //视场面积
- double viewArea = this.imageMat.Width * this.imageMat.Height * pxPerUnit * pxPerUnit;
- //相面积
- double phaseArea = AnalysisTools.GetPointsFromMat(pModel.mat) * pxPerUnit * pxPerUnit;
- result.Area = Convert.ToDouble(Math.Round(Convert.ToDecimal(phaseArea), num));
- // 比例
- result.AreaContent = viewArea > 0 ? (double)(((double)phaseArea) / ((double)viewArea)) * 100 : 0;
- result.AreaContent = Convert.ToDouble(Math.Round(Convert.ToDecimal(result.AreaContent), num));
- //相含量
- result.AreaPercent = fullArea > 0 ? (double)(result.Area / fullArea) * 100 : 0;
- result.AreaPercent = Convert.ToDouble(Math.Round(Convert.ToDecimal(result.AreaPercent), num));
- dataGridView1.Rows.Add(PdnResources.GetString("Menu.view.text")+ "1", result.PolyphaseName, result.Area, result.AreaContent, result.AreaPercent);
- }
- }
- }
- }
- protected override void clearAllView() {
- dataGridView1.Rows.Clear();
- }
- protected override void clearOneView()
- {
- if (dataGridView1.Rows.Count > 0)
- {
- dataGridView1.Rows.RemoveAt(this.delIndex);
- }
- }
- protected override void changeOneViewColor()
- {
- if (dataGridView1.Rows.Count > 0)
- {
- dataGridView1.Rows[this.delIndex].DefaultCellStyle.BackColor = this.documentItems[this.lstView_img.FocusedItem.Index].drawGraphicsList[this.delIndex].Color;
- }
- }
- }
- }
|