Bladeren bron

loading the special gray value realtime.

lizhongsys 3 jaren geleden
bovenliggende
commit
22084c6466

+ 28 - 19
OTSCPP/OTSImagePro/OTSImageProcess.cpp

@@ -1337,10 +1337,10 @@ namespace OTSIMGPROC
 
 			Mat cvcopyImg = Mat(nHeightImg, nWidthImg, CV_8UC1, pPixel);
 			Mat blurImg;
-			medianBlur(cvcopyImg, blurImg, 5);//get rid of the noise point.
+			//medianBlur(cvcopyImg, blurImg, 5);//get rid of the noise point.
 			
 			Mat labels, stats, centroids;
-			int number = connectedComponentsWithStats(blurImg, labels, stats, centroids, 8, CV_16U);
+			int number = connectedComponentsWithStats(cvcopyImg, labels, stats, centroids, 8, CV_16U);
 			
 		
 
@@ -1360,7 +1360,7 @@ namespace OTSIMGPROC
 				
 				  Rect rectMax = Rect(x, y, w, h);
 				Mat  rectROI = labels(rectMax).clone();
-				Mat imageROI = blurImg(rectMax).clone();
+				Mat imageROI = cvcopyImg(rectMax).clone();
 
 				//exclude the point which  intersect into this bounding box but is not in this group.
 				int curlabel = i;
@@ -1506,7 +1506,7 @@ namespace OTSIMGPROC
 
 
 			Mat cvcopyImg = Mat(nHeightImg, nWidthImg, CV_8UC1, pPixel);
-			//Mat blurImg;
+			Mat blurImg;
 			//medianBlur(cvcopyImg, blurImg, 3);//smooth the edge
 
 
@@ -1753,8 +1753,8 @@ namespace OTSIMGPROC
 				}
 		
 			}
-			COTSImageProcess::BErode3(pPixel, pTempImg, 5, nHeightImg, nWidthImg);
-			COTSImageProcess::BDilate3(pTempImg, pPixel, 5, nHeightImg, nWidthImg);
+			COTSImageProcess::BErode3(pPixel, pTempImg, 3, nHeightImg, nWidthImg);
+			COTSImageProcess::BDilate3(pTempImg, pPixel, 3, nHeightImg, nWidthImg);
 		
 		a_pBinImgOut->SetImageData(pPixel, nWidthImg, nHeightImg);
 
@@ -1813,11 +1813,11 @@ namespace OTSIMGPROC
 					pPixel[i] = 0;
 				}
 			}
-			COTSImageProcess::BErode3(pPixel, pTempImg, 5, nHeightImg, nWidthImg);
-			COTSImageProcess::BDilate3(pTempImg, pPixel, 5, nHeightImg, nWidthImg);
-			//Mat cvcopyImg = Mat(nHeightImg, nWidthImg, CV_8UC1, pPixel);// use the medianblur method to achieve the same effect as open morphology(errod and dialate).
-			//medianBlur(cvcopyImg, cvcopyImg, 5);
-			//pPixel = cvcopyImg.data;
+			/*COTSImageProcess::BErode3(pPixel, pTempImg, 3, nHeightImg, nWidthImg);
+			COTSImageProcess::BDilate3(pTempImg, pPixel, 3, nHeightImg, nWidthImg);*/
+			Mat cvcopyImg = Mat(nHeightImg, nWidthImg, CV_8UC1, pPixel);// use the medianblur method to achieve the same effect as open morphology(errod and dialate).
+			medianBlur(cvcopyImg, cvcopyImg, 5);
+			pPixel = cvcopyImg.data;
 
 			
 		}
@@ -1877,11 +1877,11 @@ namespace OTSIMGPROC
 			default:
 				break;
 			}
-			COTSImageProcess::BErode3(pPixel, pTempImg, 5, nHeightImg, nWidthImg);
-			COTSImageProcess::BDilate3(pTempImg, pPixel, 5, nHeightImg, nWidthImg);
-			/*Mat cvcopyImg = Mat(nHeightImg, nWidthImg, CV_8UC1, pPixel);
+			/*COTSImageProcess::BErode3(pPixel, pTempImg, 3, nHeightImg, nWidthImg);
+			COTSImageProcess::BDilate3(pTempImg, pPixel, 3, nHeightImg, nWidthImg);*/
+			Mat cvcopyImg = Mat(nHeightImg, nWidthImg, CV_8UC1, pPixel);
 			medianBlur(cvcopyImg, cvcopyImg, 5);
-			pPixel = cvcopyImg.data;*/
+			pPixel = cvcopyImg.data;
 		}
 		a_pBinImgOut->SetImageData(pPixel,nWidthImg,nHeightImg);
 		
@@ -2635,19 +2635,28 @@ namespace OTSIMGPROC
 			std::map<std::string, std::vector<EleAreaPercentage>> mapEleData;
 
 			CPosXrayPtr pXray1 = p->GetXrayInfo();
-			for (auto ele : pXray1->GetElementQuantifyData())
+			if (pXray1 != nullptr)
 			{
-				mapEleData[ele->GetName().GetBuffer()].push_back(EleAreaPercentage(p->GetArea() / allPartArea, ele));
+
+				for (auto ele : pXray1->GetElementQuantifyData())
+				{
+					mapEleData[ele->GetName().GetBuffer()].push_back(EleAreaPercentage(p->GetArea() / allPartArea, ele));
+				}
 			}
+			
 
 			for (auto other : pair.second)
 			{
 				auto otherXray = other->GetXrayInfo();
-				for (auto eledata : otherXray->GetElementQuantifyData())
+				if (otherXray != nullptr)
 				{
-					mapEleData[eledata->GetName().GetBuffer()].push_back(EleAreaPercentage(other->GetArea() / allPartArea, eledata));
+					for (auto eledata : otherXray->GetElementQuantifyData())
+					{
+						mapEleData[eledata->GetName().GetBuffer()].push_back(EleAreaPercentage(other->GetArea() / allPartArea, eledata));
 
+					}
 				}
+				
 			}
 			// third,we calculate all the element's new percentage data and get a new element chemistry list.
 

+ 4 - 3
OTSIncAMeasureApp/0-OTSModel/Measure/1-OTSInclution/SmplMeasureInclution.cs

@@ -117,7 +117,8 @@ namespace OTSModelSharp
                     bSaveThreadWorking = true;
 
                     m_thread_ptr = new System.Threading.Thread(this.SaveFieldMgrData);//m_thread_ptr = shared_ptr<thread>(new thread(&CSmplMeasureInc::SaveFieldMgrData, this));
-                    m_thread_ptr.Start();//m_thread_ptr->detach();
+                    m_thread_ptr.IsBackground = true;
+                    m_thread_ptr.Start();
                 }
             }
         }
@@ -293,10 +294,10 @@ namespace OTSModelSharp
             // get image process parameter
             CSampleParam pMsrParam = m_Sample.GetMsrParams();
             COTSImageProcParam pImgProcessParam = pMsrParam.GetImageProcessParam();
-            var specialPartsparam = pMsrParam.SpecialGrayRangeParam;
+            var specialPartsparam = pMsrParam.GetSpecialGrayRangeParam();
             if (specialPartsparam.IsToRun)
             {
-                List<CSpecialGrayRange> ranges = pMsrParam.SpecialGrayRangeParam.GetIntRanges();
+                List<CSpecialGrayRange> ranges = pMsrParam.GetSpecialGrayRangeParam().GetIntRanges();
                 foreach (var grayRange in ranges)
                 {
                     CIntRangeClr range = new CIntRangeClr(grayRange.range.GetStart(), grayRange.range.GetEnd());

+ 10 - 1
OTSIncAMeasureApp/0-OTSModel/OTSDataType/CSampleParam.cs

@@ -22,7 +22,16 @@ namespace OTSDataType
         public otsdataconst.OTS_SysType_ID m_nPackId;
         public otsdataconst.RunMode m_runmode;
 
-        public CSpecialGrayRangeParam SpecialGrayRangeParam { get => m_specialGrayRangeParam; set => m_specialGrayRangeParam = value; }
+        public CSpecialGrayRangeParam GetSpecialGrayRangeParam()
+        {
+            m_specialGrayRangeParam.LoadParam();
+            return m_specialGrayRangeParam;
+        }
+
+        public void SetSpecialGrayRangeParam(CSpecialGrayRangeParam value)
+        {
+            m_specialGrayRangeParam = value;
+        }
 
         public CSampleParam()
         {

+ 1 - 1
OTSIncAMeasureApp/2-OTSMeasureParamManage/COTSMeasureParam.cs

@@ -303,7 +303,7 @@ namespace OTSMeasureApp
             String sSTDName = m_pParam.GetSTDSelect();
             poMsrParams.SetSTDName(sSTDName);
             poMsrParams.SetSteelTechnology((STEEL_TECHNOLOGY)m_pParam.GetSteelTechnology());
-            poMsrParams.SpecialGrayRangeParam = m_specialRanges;
+            poMsrParams.SetSpecialGrayRangeParam(m_specialRanges);
             // set sample parameters
             pSample.SetName(strNewSampleName);
             pSample.SetSampleHoleName(pHole.GetName());