From a569f6895e7ea624b869609a41ad4e39ea0f041a Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 22 八月 2025 11:12:01 +0800
Subject: [PATCH] 1. NI添加计算Notch周长
---
EdgeInspector_App/Process/InspectCamera.cpp | 38 ++++++++++++++++++++++++++++----------
1 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/EdgeInspector_App/Process/InspectCamera.cpp b/EdgeInspector_App/Process/InspectCamera.cpp
index dda71b4..afa2e45 100644
--- a/EdgeInspector_App/Process/InspectCamera.cpp
+++ b/EdgeInspector_App/Process/InspectCamera.cpp
@@ -3826,7 +3826,7 @@
defectInfo.m_nSideIdx = (int)emDim;
defectInfo.m_ptDefectPos_pxl = rtRotateArea.CenterPoint();
defectInfo.m_rtDefectPos_pxl = rtRotateArea;
- defectInfo.m_DefectLoc = DefectLoc_Notch_Crack;
+ defectInfo.m_DefectLoc = DefectLoc_Notch_NoGrind;
m_pDefectControl->ExtractDefect(emDim, m_iCamera, stFrame.nScanIdx, defectInfo);
cvReleaseImageHeader(&pOriginImage);
@@ -4127,13 +4127,13 @@
{
if (m_pRecipe == NULL || m_pGlassData == NULL)
return FALSE;
-
+ int NotchFlag = 0;
for (int nMeasureIdx = 0; nMeasureIdx < MAX_SIDE_NOTCH_MEASURE_COUNT; nMeasureIdx++)
{
CPoint ptRef_pxl = m_pGlassData->GetSideData(emDim)->m_ptNotch_Reference[nNotchIdx][nMeasureIdx];
CPoint ptDim_pxl = m_pGlassData->GetSideData(emDim)->m_ptNotch_Dimension_Edge[nNotchIdx][nMeasureIdx];
-
- if (ptRef_pxl.x < 0 || ptRef_pxl.y < 0) {
+
+ /* if (ptRef_pxl.x < 0 || ptRef_pxl.y < 0) {
g_pLog->DisplayMessage(_T("[ERROR] Invalid Ref Point at Notch_Process_Calculate, NotchIdx: %d, MeasureIdx: %d, Point: (%d, %d)"), nNotchIdx, nMeasureIdx, ptRef_pxl.x, ptRef_pxl.y);
continue;
}
@@ -4141,7 +4141,7 @@
if (ptDim_pxl.x < 0 || ptDim_pxl.y < 0) {
g_pLog->DisplayMessage(_T("[ERROR] Invalid Dim Point at Notch_Process_Calculate, NotchIdx: %d, MeasureIdx: %d, Point: (%d, %d)"), nNotchIdx, nMeasureIdx, ptDim_pxl.x, ptDim_pxl.y);
continue;
- }
+ }*/
// Dimension
double dX_dim_um = (double)(ptRef_pxl.x - ptDim_pxl.x) * m_dPixelSizeX;
@@ -4150,22 +4150,25 @@
m_pGlassData->GetSideData(emDim)->m_dNotch_Dimension_Edge_Result_um[nNotchIdx][nMeasureIdx] = dDimension;
CPoint ptChamfer_pxl = m_pGlassData->GetSideData(emDim)->m_ptNotch_Chamfer_Edge[nNotchIdx][nMeasureIdx];
- if (ptChamfer_pxl.x < 0 || ptChamfer_pxl.y < 0) {
+ /* if (ptChamfer_pxl.x < 0 || ptChamfer_pxl.y < 0) {
g_pLog->DisplayMessage(_T("[ERROR] Invalid Chamfer Point at Notch_Process_Calculate, NotchIdx: %d, MeasureIdx: %d, Point: (%d, %d)"), nNotchIdx, nMeasureIdx, ptChamfer_pxl.x, ptChamfer_pxl.y);
continue;
- }
+ }*/
double dX_Chamfer = (double)(ptChamfer_pxl.x - ptDim_pxl.x) * m_dPixelSizeX;
double dY_Chamfer = (double)(ptChamfer_pxl.y - ptDim_pxl.y) * m_dPixelSizeY;
double dChamfer = sqrtf((dX_Chamfer * dX_Chamfer) + (dY_Chamfer * dY_Chamfer));
m_pGlassData->GetSideData(emDim)->m_dNotch_Chamfer_Edge_Result_um[nNotchIdx][nMeasureIdx] = dChamfer;
- if (dDimension > 2000.0 && dChamfer > 2000.0) {
+ if (dDimension > 5000.0 && dChamfer > 5000.0) {
g_pLog->DisplayMessage(_T("[ERROR] Abnormal Dimension & Chamfer too large at Notch_Process_Calculate, NotchIdx: %d, MeasureIdx: %d, Dimension: %.2f, Chamfer: %.2f"), nNotchIdx, nMeasureIdx, dDimension, dChamfer);
- continue;
+ NotchFlag=1;
}
}
-
+ if (NotchFlag == TRUE)
+ {
+ return FALSE;
+ }else
return TRUE;
}
@@ -4440,6 +4443,21 @@
strTemp.Format(_T("Notch\\Notch_%d_Defect_ProcBinImage"), nNotchIdx);
SaveDebugImage(emDim, stFrame, pProcBinImage, strTemp);
+ CvSeq* pContours = nullptr;
+ CvMemStorage* pStorage = cvCreateMemStorage(0);
+ cvFindContours(pProcBinImage, pStorage, &pContours, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
+ for (CvSeq* c = pContours; c != nullptr; c = c->h_next) {
+ double dLength = cvArcLength(c);
+ if (dLength < 2000) {
+ continue;
+ }
+
+ if (std::abs(dLength - 7000) > 1000) {
+ g_pLog->DisplayMessage(_T("[WARN] Notch defect contour length deviates significantly from expected: %f"), dLength);
+ break;
+ }
+ }
+
#if MINI_LED == 0
// 鎺橀健韴囬優電撮憭锛岆牆宀弘矔雽曤彅閳措船鐝傡儉旖旊嫺鐙傜棛
int nDilateCount = pNotchParam->m_nNotch_Inspect_Defect_dilate;
--
Gitblit v1.9.3