Browse Source

重新统计问题修复

liu 1 year ago
parent
commit
e49eaf794e

+ 9 - 14
Adjust/Battery.cs

@@ -2619,7 +2619,7 @@ namespace PaintDotNet.Adjust
                     }
                 }
                 //边缘
-                if (x < border || x + width > src.Cols - border || y < border || y + height > src.Rows - -border - borderBottom)
+                if (x < border || x + width > src.Cols - border || y < border || y + height > src.Rows - border - borderBottom)
                 {
                     keyValuePairs.Add(h, 1);
                 }
@@ -2692,20 +2692,14 @@ namespace PaintDotNet.Adjust
 
 
                             //double c = contours[0].Length; //轮廓周长
-                            //double xa = Math.Sqrt(areaField1/ Math.PI) * 2;
+                            //double xa = Math.Sqrt(areaField1 / Math.PI) * 2;
                             //double xp = c / Math.PI;
                             //int aa = Convert.ToInt32((xa / xp) * 1000);
 
+                            double nc = Cv2.ArcLength(outArr.ToArray(), true) ;
 
-                            // InputArray contoursAll = InputArray.Create(AllFields[h - 1]);
-                            // List<OpenCvSharp.Point> outArr = new List<OpenCvSharp.Point>();
-                            // OutputArray hull = OutputArray.Create(outArr);
-
-                            // Cv2.ConvexHull(contoursAll, hull, true);
-                            // double nc = Cv2.ArcLength(outArr.ToArray(), true) / Math.PI;
-
-                            // double na = Math.Sqrt(areaField1 / Math.PI) * 2;
-                            //int aa = Convert.ToInt32((na / nc) * 1000);
+                            double na = Math.Sqrt(areaField1 / Math.PI) * 2;
+                            int aa = Convert.ToInt32((na / nc) * 1000);
                             List<OpenCvSharp.Point> listpoint = new List<OpenCvSharp.Point>();
                             Point2f[] point2F = rectR.Points();
                             foreach (var item in point2F)
@@ -2714,7 +2708,7 @@ namespace PaintDotNet.Adjust
                             }
                             rectListPoint.Add(listpoint);
                             rectList.Add(rectR);
-                            List<int> po = new List<int>() { x, y, width, height, areaField1, h, maxxx, maxyy, 1 };
+                            List<int> po = new List<int>() { x, y, width, height, areaField1, h, maxxx, maxyy, 1 , (int)nc };
                             poList.Add(po);
                         }
                     }
@@ -2737,7 +2731,7 @@ namespace PaintDotNet.Adjust
 
             #region 添加颗粒
 
-            Mat MatAdd = new Mat(src.Size(), MatType.CV_8UC1);
+            Mat MatAdd = new Mat(src.Rows, src.Cols, MatType.CV_8UC1,new Scalar(0));
 
             if (AddPontins != null && AddPontins.Count > 0)
             {
@@ -2759,6 +2753,7 @@ namespace PaintDotNet.Adjust
             {
                 Rect rect = Cv2.BoundingRect(contours[i]);
                 int areaField1 =Convert.ToInt32( Cv2.ContourArea(contours[i]));
+                int nc = Convert.ToInt32(Cv2.ArcLength(contours[i], true));
                 int x = rect.X;
                 int y = rect.Y;
                 int width = rect.Width;
@@ -2784,7 +2779,7 @@ namespace PaintDotNet.Adjust
                 }
                 rectListPoint.Add(listpoint);
                 rectList.Add(rectR);
-                List<int> po = new List<int>() { x, y, width, height, areaField1, centroids.Height+i, maxxx, maxyy, 1 };
+                List<int> po = new List<int>() { x, y, width, height, areaField1, centroids.Height+i, maxxx, maxyy, 1 , nc };
                 poList.Add(po);
             }
 

+ 22 - 5
DedicatedAnalysis/Battery/BatteryPrimaryDialog.Designer.cs

@@ -78,7 +78,8 @@ namespace PaintDotNet.DedicatedAnalysis.Battery
             this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
             this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
             this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn();
-
+            this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn();
             this.numericUpDown11 = new System.Windows.Forms.NumericUpDown();
             numericMax = new System.Windows.Forms.NumericUpDown();
             ckMin = new CheckBox();
@@ -498,7 +499,7 @@ namespace PaintDotNet.DedicatedAnalysis.Battery
             this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
             this.Column11,
             this.dataGridViewTextBoxColumn1,
-            this.dataGridViewTextBoxColumn2,ColumnKey,this.dataGridViewTextBoxColumn3,this.dataGridViewTextBoxColumn4});
+            this.dataGridViewTextBoxColumn2,ColumnKey,this.dataGridViewTextBoxColumn3,this.dataGridViewTextBoxColumn4,this.dataGridViewTextBoxColumn5,this.dataGridViewTextBoxColumn6});
             this.dataGridView1.Location = new System.Drawing.Point(9, 19);
             this.dataGridView1.MultiSelect = false;
             this.dataGridView1.Name = "dataGridView1";
@@ -563,7 +564,22 @@ namespace PaintDotNet.DedicatedAnalysis.Battery
             this.ColumnKey.ReadOnly = true;
             this.ColumnKey.Visible = false;
 
-
+            // 
+            // 周长
+            // 
+            this.dataGridViewTextBoxColumn5.DefaultCellStyle = dataGridViewCellStyle12;
+            this.dataGridViewTextBoxColumn5.HeaderText = "周长";
+            this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5";
+            this.dataGridViewTextBoxColumn5.ReadOnly = true;
+            this.dataGridViewTextBoxColumn5.Width = 55;
+            // 
+            // 面积
+            // 
+            this.dataGridViewTextBoxColumn6.DefaultCellStyle = dataGridViewCellStyle12;
+            this.dataGridViewTextBoxColumn6.HeaderText = "面积";
+            this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6";
+            this.dataGridViewTextBoxColumn6.ReadOnly = true;
+            this.dataGridViewTextBoxColumn6.Width = 55;
 
 
             // 
@@ -636,7 +652,7 @@ namespace PaintDotNet.DedicatedAnalysis.Battery
             this.Controls.Add(this.groupBox2);
             this.Controls.Add(this.groupBoxGrid2);
             this.Name = "BatteryPrimaryDialog";
-            this.Text = "前驱截面一次颗粒";
+            this.Text = "一次颗粒统计分析";
             this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.InclusionsStandardDialog_FormClosing);
             this.Load += new System.EventHandler(this.GrainSizePointCountingMethodDialog_Load);
             this.Shown += new System.EventHandler(this.ShownChoiseItemAndInitData);
@@ -723,7 +739,8 @@ namespace PaintDotNet.DedicatedAnalysis.Battery
         private DataGridViewTextBoxColumn dataGridViewTextBoxColumn3;
         private DataGridViewTextBoxColumn dataGridViewTextBoxColumn4;
         private DataGridViewTextBoxColumn ColumnKey;
-
+        private DataGridViewTextBoxColumn dataGridViewTextBoxColumn5;
+        private DataGridViewTextBoxColumn dataGridViewTextBoxColumn6;
 
         private DataGridViewTextBoxColumn ColumnNum;
         private DataGridViewTextBoxColumn ColumnName;

+ 7 - 2
DedicatedAnalysis/Battery/BatteryPrimaryDialog.cs

@@ -791,6 +791,8 @@ namespace PaintDotNet.DedicatedAnalysis.Battery
                 dataGridView1.Rows[newPo].Cells[3].Value = dataList[i][5];
                 dataGridView1.Rows[newPo].Cells[4].Value = Math.Round(maxD * d, 2).ToString();
                 dataGridView1.Rows[newPo].Cells[5].Value = Math.Round(minD * d, 2).ToString();
+                dataGridView1.Rows[newPo].Cells[6].Value = Math.Round(dataList[i][9] * d, 2).ToString();
+                dataGridView1.Rows[newPo].Cells[7].Value = Math.Round(dataList[i][4] * d * d, 2).ToString();
             }
             diameterMax.Sort();
 
@@ -896,7 +898,7 @@ namespace PaintDotNet.DedicatedAnalysis.Battery
             MeanP = MeanP / diameter.Count;
             MeanP2 = MeanP2 / diameterPI.Count;
             //int eval =Convert.ToInt32( (max - min) / 20);
-            double eval = 0.2;
+            double eval =Math.Round( max / 15,1);
             List<double[]> vs = new List<double[]>();
             double rightmax = 0;
             for (int i = 0; eval * i < max; i++)
@@ -1598,7 +1600,8 @@ namespace PaintDotNet.DedicatedAnalysis.Battery
             dtb.Columns.Add("卡规直径/微米");
             dtb.Columns.Add("长径/微米");
             dtb.Columns.Add("短径/微米");
-
+            dtb.Columns.Add("周长/微米");
+            dtb.Columns.Add("面积/平方微米");
             for (int r = 0; r < this.dataGridView1.Rows.Count; r++)
             {
                 DataRow dataRow = dtb.NewRow();
@@ -1607,6 +1610,8 @@ namespace PaintDotNet.DedicatedAnalysis.Battery
                 dataRow[2] = dataGridView1.Rows[r].Cells[2].Value.ToString();
                 dataRow[3] = dataGridView1.Rows[r].Cells[4].Value.ToString();
                 dataRow[4] = dataGridView1.Rows[r].Cells[5].Value.ToString();
+                dataRow[5] = dataGridView1.Rows[r].Cells[6].Value.ToString();
+                dataRow[6] = dataGridView1.Rows[r].Cells[7].Value.ToString();
                 dtb.Rows.Add(dataRow);
             }
 

+ 1 - 1
Menus/DedicatedAnalysisMenu.cs

@@ -1613,7 +1613,7 @@ namespace PaintDotNet.Menus
             this.menuMembranes.Click += new EventHandler(MenuMembranes_Click);
             this.menuMembranes.Image = PdnResources.GetImageResource("Icons.ConicalGradientIcon.png").Reference;
 
-            this.menuBatteryPrimary.Text = "二次球粒径";
+            this.menuBatteryPrimary.Text = "一次颗粒统计分析";
             this.menuBatteryPrimary.Click += new EventHandler(MenuBatteryPrimary_Click);
             this.menuBatteryPrimary.Image = PdnResources.GetImageResource("Icons.DediMenuBandedStructure.png").Reference;
             #endregion

+ 1 - 1
Metis.csproj

@@ -2809,7 +2809,7 @@
     <COMReference Include="Microsoft.Office.Core">
       <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
       <VersionMajor>2</VersionMajor>
-      <VersionMinor>5</VersionMinor>
+      <VersionMinor>8</VersionMinor>
       <Lcid>0</Lcid>
       <WrapperTool>primary</WrapperTool>
       <Isolated>False</Isolated>