Browse Source

add search gray value function

gsp 11 months ago
parent
commit
4452b1e52d

+ 6 - 0
Bin/x64/Debug/Config/SysData/OTSInclusionsTraceabilityParam.rpf

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<XMLData>
+  <Member RegName="EquivalentCircularDiameter" strValue="10" />
+  <Member RegName="Contains" strValue="False" />
+  <Member RegName="DisplaySource" strValue="精炼渣" />
+</XMLData>

+ 15 - 0
Bin/x64/Debug/Config/SysData/OTSProgMgrParam.pmf

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XMLData RunMode="ProfessionalMode" SysType="CleannessA">
+  <Member RegName="GenParam" DefaultArea="100" DefaultSampleName="Sample" DefaultShape="0" MeasParamFileFolderName=".\Config\ProData\" MeasSwitch="true" PartSTDLibFolderName=".\Config\SysData\" PropertyDisplayMode="0" StdLibFileName="NoSTDDB" SteelTechnology="0" UseSysSTD="true" />
+  <Member RegName="ImageProcParam" AutoBGRemoveType="0:MIDDLE" BGRemoveType="1:MANUAL" OverlapParam="0" ParticleSelectionCondition="">
+    <Member RegName="BGGray" end="255" start="80" />
+    <Member RegName="IncArea" end="100" start="3" />
+    <Member RegName="ParticleGray" end="90" start="50" />
+  </Member>
+  <Member RegName="ImageScanParam" ImageResolution="4:_1536_1024" SatrtImageMode="0:Spiral" ScanImageSpeed="0:low" StopMode="0:CoverMode" StopParamArea="10" StopParamFields="100" StopParamMeasTime="360" StopParamParticles="5000" />
+  <Member RegName="StageData" ControlDelay="1000" MinMag="65" scanFieldSize="1270" xAxisDir="0:LEFT_TOWARD" yAxisDir="1:DOWN_TOWARD">
+    <Member RegName="XAxis" end="55000" start="-55000" />
+    <Member RegName="YAxis" end="55000" start="-55000" />
+  </Member>
+  <Member RegName="XrayParam" AnalyExpCount="1000" IfAutoId="true" KnownElements="C,N,O,F,Na,Mg,Al,Si,P,S,Ca,Ti,V,Cr,Mn,Fe,Zr,Nb,Mo,La,Ce" MidAnalyAQTime="200" QuantifyMinSize="1" ScanMode="0:PointMode" SmallPartAQTime="200" UseFilter="false" UsingXray="true" XrayLimit="50" />
+</XMLData>

+ 1 - 1
Bin/x64/Debug/Config/SysData/OTSReportMgrParam.rpf

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<XMLData systype="IncA">
+<XMLData systype="CleannessA">
   <Member RegName="Scale" strValue="1000" />
   <Member RegName="DefaultComputedColName" strValue="Area,EquivalentCircleDiameter,MaxDiameter,MinDiameter,DiameterRatio,FerretDiameter,PERP,PERI,INSCR,MEAN,ELONG,ASPECT_ELONG,Orientation" />
   <Member RegName="ElementsColName" strValue="C,O,Al,Fe,F,Ti,Na,Mn,Mg" />

BIN
Bin/x64/Debug/Config/SysData/OTS_TC_Axia_per.db


+ 2 - 2
Bin/x64/Debug/Resources/XMLData/ResourceForMeasureSourceGrid-EN.xml

@@ -41,8 +41,8 @@
 			<member itemKey="20021" itemName="" itemText="MaxEqualCirCleDiamiter(um)"/>
 			<member itemKey="20022" itemName="" itemText="BG_GRAY_MIN"/>
 			<member itemKey="20023" itemName="" itemText="BG_GRAY_MAX"/>
-			<member itemKey="20024" itemName="" itemText="PART_GRAY_MIN"/>
-			<member itemKey="20025" itemName="" itemText="PART_GRAY_MAX"/>
+			<member itemKey="20024" itemName="" itemText="EIGEN_GRAY_MIN"/>
+			<member itemKey="20025" itemName="" itemText="EIGEN_GRAY_MAX"/>
 			<member itemKey="20029" itemName="" itemText="OtherSelect" description="otherselection"/>
 
         </collection>

+ 2 - 2
Bin/x64/Debug/Resources/XMLData/ResourceForMeasureSourceGrid-ZH.xml

@@ -37,8 +37,8 @@
 			<member itemKey="20028" itemName="" itemText="手动方式" description=""/>		
 			<member itemKey="20022" itemName="" itemText="背景灰度最小值" description="输入背景灰度最小值(0~255)。"/>
 			<member itemKey="20023" itemName="" itemText="背景灰度最大值" description="输入背景灰度最大值(0~255),不小于背景灰度最小值。"/>
-			<member itemKey="20024" itemName="" itemText="颗粒灰度最小值" description="输入分析颗粒灰度最大值(0~255)。"/>
-			<member itemKey="20025" itemName="" itemText="颗粒灰度最大值" description="输入分析颗粒灰度最大值(0~255),不小于分析颗粒灰度最小值。"/>
+			<member itemKey="20024" itemName="" itemText="特征灰度最小值" description="输入分析颗粒灰度最大值(0~255)。"/>
+			<member itemKey="20025" itemName="" itemText="特征灰度最大值" description="输入分析颗粒灰度最大值(0~255),不小于分析颗粒灰度最小值。"/>
 			<member itemKey="20020" itemName="" itemText="等效圆直径最小值(微米)" description="输入分析颗粒面积最小值(微米)。"/>
 			<member itemKey="20021" itemName="" itemText="等效圆直径最大值(微米)" description="输入分析颗粒面积最大值(微米)。"/>
 			<member itemKey="20029" itemName="" itemText="其他筛选" description="otherselection"/>	

+ 27 - 26
OTSCPP/OTSImagePro/OTSImageProcess.cpp

@@ -56,7 +56,7 @@ namespace OTSIMGPROC
 
 		CRect r = CRect(0, 0, nWidthImg, nHeightImg);
 		CBSEImgPtr imgNoBGBinary = CBSEImgPtr(new CBSEImg(r));
-		//long nNumParticle = 0;
+		
 		RemoveBackGround(inBSEImg, m_imageProcessParam, imgNoBGBinary/*, nNumParticle*/);
 
 
@@ -67,20 +67,11 @@ namespace OTSIMGPROC
 
 
 
-		long nPtStart = m_imageProcessParam->GetParticleGray().GetStart();
-		long nPtEnd = m_imageProcessParam->GetParticleGray().GetEnd();
-
-
-		/*if (nNumParticle == 0)
-		{
+		long nEigenGrayStart = m_imageProcessParam->GetParticleGray().GetStart();
+		long nEigenGrayEnd = m_imageProcessParam->GetParticleGray().GetEnd();
 
-			COTSParticleList listParticleEmpty;
-			listParticleEmpty.clear();
-			m_pFieldData->SetParticleList(listParticleEmpty);
 
-		}
-		else
-		{*/
+		
 
 			// get the area image	
 
@@ -161,13 +152,14 @@ namespace OTSIMGPROC
 			}
 			int  nTagId;
 			
-
+			COTSParticleList listParticleSearched;
 			for (auto pParticle : listParticleOut)
 			{
 				COTSFeaturePtr pFeature = pParticle->GetFeature();
 				COTSSegmentsList listSegment = pFeature->GetSegmentsList();
 
 				long nPixelNum = 0;
+				long eigenPixelNum = 0;
 				long nPixelAll = 0;
 				int nStartS = 0;
 				int nHeightS = 0;
@@ -188,23 +180,32 @@ namespace OTSIMGPROC
 
 						long nValueTemp = (long)*(pSrcImg + nHeightS * nWidthImg + nStartS + i);
 						nPixelAll += nValueTemp;
+						if (nValueTemp >= nEigenGrayStart && nValueTemp <= nEigenGrayEnd)
+						{
+							eigenPixelNum += 1;
+						}
 					}
 				}
-				BYTE nAveGray = (BYTE)(nPixelAll / nPixelNum);
-				pParticle->SetAveGray(nAveGray);
-				auto fieldOTSRect = m_pFieldData->GetOTSRect();
-				CPoint leftTop = fieldOTSRect.GetTopLeft();
-				
-				CRect rectInSinglefld = pParticle->GetParticleRect();
-				CPoint OTSLeftTop = CPoint(leftTop.x + rectInSinglefld.left * a_pixelSize, leftTop.y - rectInSinglefld.top * a_pixelSize);
-				CPoint OTSRightBottom = CPoint(leftTop.x + rectInSinglefld.right * a_pixelSize, leftTop.y - rectInSinglefld.bottom * a_pixelSize);
+				if (eigenPixelNum > 5)
+				{
+					BYTE nAveGray = (BYTE)(nPixelAll / nPixelNum);
+					pParticle->SetAveGray(nAveGray);
+					auto fieldOTSRect = m_pFieldData->GetOTSRect();
+					CPoint leftTop = fieldOTSRect.GetTopLeft();
+
+					CRect rectInSinglefld = pParticle->GetParticleRect();
+					CPoint OTSLeftTop = CPoint(leftTop.x + rectInSinglefld.left * a_pixelSize, leftTop.y - rectInSinglefld.top * a_pixelSize);
+					CPoint OTSRightBottom = CPoint(leftTop.x + rectInSinglefld.right * a_pixelSize, leftTop.y - rectInSinglefld.bottom * a_pixelSize);
 
-				COTSRect recInOTSCord = COTSRect(OTSLeftTop, OTSRightBottom);
-				pParticle->SetOTSRect(recInOTSCord);
+					COTSRect recInOTSCord = COTSRect(OTSLeftTop, OTSRightBottom);
+					pParticle->SetOTSRect(recInOTSCord);
+					listParticleSearched.push_back(pParticle);
+				}
+				
 
 			}
-			m_pFieldData->SetParticleList(listParticleOut);
-		//}
+			m_pFieldData->SetParticleList(listParticleSearched);
+		
 
 
 		delete[]pTempImg;

+ 8 - 8
OTSIncAMeasureApp/0-OTSModel/OTSDataType/COTSImageProcParam.cs

@@ -19,7 +19,7 @@ namespace OTSDataType
         int DEFUALT_PARTICLE_GRAY_LEVEL_MAX = 155;
         private CDoubleRange m_oIncArea = new CDoubleRange();
         private CIntRange m_oBGGray = new CIntRange();
-        private CIntRange m_oParticleGray = new CIntRange();
+        private CIntRange m_oParticleEigenGray = new CIntRange();
         private OTS_BGREMOVE_TYPE m_BGRemoveType;
         private OTS_AUTOBGREMOVE_TYPE m_autoBGRemoveType;
         int m_OverlapParam;
@@ -89,7 +89,7 @@ namespace OTSDataType
             m_specialGreyRangeParam = new CSpecialGrayRangeParam();
             m_oIncArea = new CDoubleRange(DEFUALT_PARTICALE_AREA_MIN, DEFUALT_PARTICALE_AREA_MAX);
             m_oBGGray = new CIntRange(DEFUALT_BG_GRAY_LEVEL_MIN, DEFUALT_BG_GRAY_LEVEL_MAX);
-            m_oParticleGray = new CIntRange(DEFUALT_PARTICLE_GRAY_LEVEL_MIN, DEFUALT_PARTICLE_GRAY_LEVEL_MAX);
+            m_oParticleEigenGray = new CIntRange(DEFUALT_PARTICLE_GRAY_LEVEL_MIN, DEFUALT_PARTICLE_GRAY_LEVEL_MAX);
             m_BGRemoveType = OTS_BGREMOVE_TYPE.MANUAL;// OTS_BGREMOVE_TYPE.AUTO;
             m_autoBGRemoveType = OTS_AUTOBGREMOVE_TYPE.MIDDLE;           
             m_OverlapParam = 20;
@@ -100,8 +100,8 @@ namespace OTSDataType
         public CIntRange GetBGGray() { return m_oBGGray; }
         public void SetBGGray(CIntRange a_oVal) { m_oBGGray = a_oVal; }
 
-        public CIntRange GetParticleGray() { return m_oParticleGray; }
-        public void SetParticleGray(CIntRange a_oVal) { m_oParticleGray = a_oVal; }
+        public CIntRange GetParticleGray() { return m_oParticleEigenGray; }
+        public void SetParticleGray(CIntRange a_oVal) { m_oParticleEigenGray = a_oVal; }
 
         public OTS_BGREMOVE_TYPE GetBGRemoveType() { return m_BGRemoveType; }
 
@@ -127,8 +127,8 @@ namespace OTSDataType
             m_oIncArea.SetEnd(a_oSource.m_oIncArea.GetEnd());
             m_oBGGray.SetStart(a_oSource.m_oBGGray.GetStart());
             m_oBGGray.SetEnd(a_oSource.m_oBGGray.GetEnd());
-            m_oParticleGray.SetStart(a_oSource.m_oParticleGray.GetStart());
-            m_oParticleGray.SetEnd(a_oSource.m_oParticleGray.GetEnd());
+            m_oParticleEigenGray.SetStart(a_oSource.m_oParticleEigenGray.GetStart());
+            m_oParticleEigenGray.SetEnd(a_oSource.m_oParticleEigenGray.GetEnd());
             m_BGRemoveType = a_oSource.m_BGRemoveType;
             m_autoBGRemoveType = a_oSource.m_autoBGRemoveType;
             SetParticleSelectCondition(a_oSource.GetParticleSelectCondition());
@@ -141,7 +141,7 @@ namespace OTSDataType
             // return test result
             return m_oIncArea == a_oSource.m_oIncArea &&
                 m_oBGGray == a_oSource.m_oBGGray &&
-                m_oParticleGray == a_oSource.m_oParticleGray &&
+                m_oParticleEigenGray == a_oSource.m_oParticleEigenGray &&
                
                 m_OverlapParam == a_oSource.m_OverlapParam;
 
@@ -157,7 +157,7 @@ namespace OTSDataType
           
             slo.Register("BGGray", m_oBGGray);
            
-            slo.Register("ParticleGray", m_oParticleGray);
+            slo.Register("ParticleGray", m_oParticleEigenGray);
 
             xInt xnOverlapParam = new xInt();
             slo.Register("OverlapParam", xnOverlapParam);

+ 2 - 3
OTSIncAMeasureApp/1-OTSMeasure/Measure/3-MeasureFlow/CSmplMsrResult.cs

@@ -286,10 +286,9 @@ namespace OTSModelSharp
 
             
             Serialize(true, xmlDoc, root);
-            if (!File.Exists(m_strRstFileName))
-            {
+            
                 xmlDoc.Save(m_strRstFileName);
-            }
+           
           
 
            

+ 26 - 1
OTSIncAMeasureApp/3-OTSDisplaySourceGridData/OTSSampleVisualPropertyInfo.cs

@@ -1024,8 +1024,20 @@ namespace OTSMeasureApp
                                     nItemId = OTS_SAMPLE_PROP_GRID_ITEMS.BG_GRAY_MAX;
                                     poPropItem.InitialSmplParameter(a_nId, nItemId, OTS_ITEM_TYPES.INT, false, bShow);
                                     a_listPropItems.Add(poPropItem);
-                       
 
+                                    // Eigen gray level min
+
+                                    poPropItem = new CPropItem();
+                                    nItemId = OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MIN;
+                                    poPropItem.InitialSmplParameter(a_nId, nItemId, OTS_ITEM_TYPES.INT, false, bShow);
+                                    a_listPropItems.Add(poPropItem);
+
+                                    // Eigen gray level max
+
+                                    poPropItem = new CPropItem();
+                                    nItemId = OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MAX;
+                                    poPropItem.InitialSmplParameter(a_nId, nItemId, OTS_ITEM_TYPES.INT, false, bShow);
+                                    a_listPropItems.Add(poPropItem);
                                     // particle area min
 
                                     poPropItem = new CPropItem();
@@ -1471,6 +1483,19 @@ namespace OTSMeasureApp
                                     nItemId = OTS_SAMPLE_PROP_GRID_ITEMS.BG_GRAY_MAX;
                                     poPropItem.InitialSmplParameter(a_nId, nItemId, OTS_ITEM_TYPES.INT, false, bShow);
                                     a_listPropItems.Add(poPropItem);
+                                    // Eigen gray level min
+
+                                    poPropItem = new CPropItem();
+                                    nItemId = OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MIN;
+                                    poPropItem.InitialSmplParameter(a_nId, nItemId, OTS_ITEM_TYPES.INT, false, bShow);
+                                    a_listPropItems.Add(poPropItem);
+
+                                    // Eigen gray level max
+
+                                    poPropItem = new CPropItem();
+                                    nItemId = OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MAX;
+                                    poPropItem.InitialSmplParameter(a_nId, nItemId, OTS_ITEM_TYPES.INT, false, bShow);
+                                    a_listPropItems.Add(poPropItem);
 
                                     // particle area min