»õ ÆÄÀÏ |
| | |
| | | #pragma once |
| | | |
| | | #include <vector> |
| | | #include "Singleton.h" |
| | | |
| | | struct _DefectDisplayOption //ê·¸ë¥ ì¬ê¸°ì ë§ë¤ì..;; í´ë íëë í기 ê·ì°¬.. |
| | | { |
| | | _DefectDisplayOption() |
| | | { |
| | | m_bShowDefectNormal = TRUE; |
| | | m_bShowDefectGroupRound = TRUE; |
| | | m_bShowDefectGroupLine = TRUE; |
| | | m_bShowNoFilteredDefect = FALSE; |
| | | |
| | | m_nShowLabel = -1; |
| | | m_nShowSize = 0; |
| | | } |
| | | BOOL m_bShowDefectNormal; |
| | | BOOL m_bShowDefectGroupRound; |
| | | BOOL m_bShowDefectGroupLine; |
| | | BOOL m_bShowNoFilteredDefect; |
| | | |
| | | int m_nShowLabel; // 0ë³´ë¤ ìì¼ë©´ 모ë 보기 |
| | | int m_nShowSize; //í´ë¹ê°ë³´ë¤ ìê±°ë ê°ì¼ë©´ ì ê±° |
| | | }; |
| | | |
| | | struct _akDefect |
| | | { |
| | | int nDefectID; |
| | | double dPositionX; |
| | | double dPositionY; |
| | | |
| | | int nLabel; |
| | | |
| | | int nSize; // |
| | | int nType;//0:black defect, 1:white defect |
| | | |
| | | int nGraySrc; |
| | | int nGrayTar; |
| | | int nGrayDiff; |
| | | |
| | | int nFilter;//1ì´ë©´ ì ì¸ |
| | | //("SIZE_S"); |
| | | //("SIZE_W"); |
| | | //("SIZE_L"); |
| | | //("SIZE_H"); |
| | | //("DEFECT_CODE"); |
| | | //("DEF_AVG_1"); |
| | | //("REF_AVG_1"); |
| | | //("REF_GRAY_1"); |
| | | //("MASK_DEFECT"); |
| | | //("COMMON_DEFECT"); |
| | | //("XY_RATIO"); |
| | | //("CAM_NUM"); |
| | | //("LAMP_VALUE"); |
| | | CString m_strInfos[16]; |
| | | |
| | | short m_nDefectID; |
| | | short m_nCameraID; |
| | | short m_nScanIdx; |
| | | //short m_nDefectIdx; // ì¹´ë©ë¼ììì ê²°í¨ ì¸ë±ì¤ |
| | | int m_nDefectIdx; // ì¹´ë©ë¼ììì ê²°í¨ ì¸ë±ì¤ 201207 CJH - ì릿 ì ë침. intíì¼ë¡ ë³ê²½ |
| | | |
| | | int m_nPixelConv; // pixel ë¨ì ì¢í |
| | | int m_nPixelScan; // pixel ë¨ì ì¢í |
| | | |
| | | short m_nPixelSize; // ê²°í¨í¬ê¸° ---------------------------------PS |
| | | short/*SERVER_DefectType*/ m_DefectType; // ê²°í¨ íì
---------------------------------DT |
| | | short/*SERVER_DefectSubType*/ m_DefectSubType; // ê²°í¨ì íì ìí. |
| | | short/*SERVER_DefectBDType*/ m_DefectBDType; // ê²°í¨ íì
- Bright, Dark, Both |
| | | |
| | | short m_sPixelWidth; // í½ì
ë¨ì ê²°í¨ ëë¹ |
| | | short m_sPixelHeight; // í½ì
ë¨ì ê²°í¨ ëì´ |
| | | short m_nLevelSrcMin; // ê²°í¨ ë°ê¸° Min -----------------------------SN |
| | | short m_nLevelSrcMax; // ê²°í¨ ë°ê¸° Max -----------------------------SX |
| | | short m_nLevelSrcAvg; // ê²°í¨ ë°ê¸° Avg -----------------------------SA |
| | | short m_nLevelRefMin; // ë¹êµëì ë°ê¸° Min -------------------------RN |
| | | short m_nLevelRefMax; // ë¹êµëì ë°ê¸° Max -------------------------RX |
| | | short m_nLevelRefAvg; // ë¹êµëì ë°ê¸° Avg -------------------------RA |
| | | short m_nLevelDiffMin; // ë¹êµì°¨ Min ---------------------------------DN |
| | | short m_nLevelDiffMax; // ë¹êµì°¨ Max ---------------------------------DX |
| | | short m_nLevelDiffAvg; // ë¹êµì°¨ Avg ---------------------------------DA |
| | | |
| | | int m_nDefectRScale; // í½ì
ë¨ì ê²°í¨ ëì´ -------------------------RS |
| | | short m_sThreshold; // ê²°í¨ì ê²ì¶í ëì Threshold |
| | | short m_sThresholdAvg; // ê²°í¨ì ê²ì¶í ëì Threshold AVG |
| | | short m_sDefectPeak; // ê²°í¨ì Peak. |
| | | short m_sDefectLevel; // (DiffAvg - Th) BOE 8G ìì²ì¬í |
| | | |
| | | int m_nPixelGlassStart; // Glass ìì í½ì
|
| | | short m_sDefectLoc; |
| | | |
| | | short m_sZonePixelCount[16]; // Zoneë³ ê²°í¨ Pixel ì |
| | | short m_sZoneValueMin[16]; // Zoneë³ ê²°í¨ Min |
| | | short m_sZoneValueMax[16]; // Zoneë³ ê²°í¨ Max |
| | | short m_sZoneValueAvg[16]; // Zoneë³ ê²°í¨ Avg |
| | | short m_sZonePixelPercent[16]; // --------------------------------------Z0~ZF |
| | | |
| | | //210127 CJH - Zoneë³ Source Gray ì
ë ¥ |
| | | short m_sZoneValueSrcMin[16]; // Zoneë³ Source Min |
| | | short m_sZoneValueSrcMax[16]; // Zoneë³ Source Max |
| | | short m_sZoneValueSrcAvg[16]; // Zoneë³ Source Avg |
| | | |
| | | int m_nUMOriginX; // umë¨ì xì¢í (ìì 기ì¤) |
| | | int m_nUMOriginY; // umë¨ì yì¡°í (ìì 기ì¤) |
| | | int m_nUMCenterAlignX; // umë¨ì Xì¢í (Glass Center 기ì¤, ì¼ë¼ì¸ë³´ì í) |
| | | int m_nUMCenterAlignY; // umë¨ì Yì¢í (Glass Center 기ì¤, ì¼ë¼ì¸ë³´ì í) |
| | | int m_nUMCenterX; // umë¨ì Xì¢í (Glass Center 기ì¤, ì¼ë¼ì¸ë³´ì ì ) |
| | | int m_nUMCenterY; // umë¨ì Yì¢í (Glass Center 기ì¤, ì¼ë¼ì¸ë³´ì ì ) |
| | | int m_nUMSizeX; // umë¨ì X í¬ê¸° -----------------------------UX |
| | | int m_nUMSizeY; // umë¨ì Y í¬ê¸° -----------------------------UY |
| | | int m_nUMSize; // umë¨ì í¬ê¸°. |
| | | CRect m_RectUM; // ëí ì¼í° ê¸°ì¤ ì¬ê°í. |
| | | |
| | | short/*SERVER_DefectSizeType*/ m_DefectSizeType; // ê²°í¨ í¬ê¸° ì¢
ë¥enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra }; |
| | | short/*SERVER_DefectPeakType*/ m_DefectPeakType; // Peakì ì¢
ë¥. |
| | | short/*Judgement*/ m_DefectJudgement; // ê²°í¨ íì . |
| | | BOOL m_bDefectCutoff; // ì»· ì¤í ëí(TRUE= Cutoff, FALSE) |
| | | short/*MAP16_DefectClass*/ m_DefectClass; // BOE Defect Class 16ë±ë¶ êµ¬ë¶ |
| | | int m_nPadRegionIdx; // PAD ìì ì¸ë±ì¤ |
| | | |
| | | int m_nUMCellX; // ì
ìì ê¸°ì¤ x ì¢í |
| | | int m_nUMCellY; // ì
ìì ê¸°ì¤ y ì¢í |
| | | short m_nModelIdx; // ëª ë²ì§¸ 모ë¸ì¸ê°? |
| | | short m_nCellIdx; // ëªë²ì§¸ ì
ì¸ê°? |
| | | short m_nCellGate; // ì
ë³ Gateë¼ì¸(ì¼ë¼ì¸ ë³´ì ì ) |
| | | short m_nCellData; // ì
ë³ Dataë¼ì¸(ì¼ë¼ì¸ ë³´ì ì ) |
| | | short m_nCellGateAlign; // ì
ë³ Gateë¼ì¸(ì¼ë¼ì¸ ë³´ì í) |
| | | short m_nCellDataAlign; // ì
ë³ Dataë¼ì¸(ì¼ë¼ì¸ ë³´ì í) |
| | | |
| | | int m_nUMShotX; // ì· ê¸°ì¤ Xì¢í |
| | | int m_nUMShotY; // ì· ê¸°ì¤ Yì¢í |
| | | short m_nMaskDefectIdx; // í Glassìì ë°ê²¬ë ë§ì¤í¬ê²°í¨ 묶ìì ì¸ë±ì¤. |
| | | short m_nShotIdx; // ë
¸ê´ì· ë²í¸ |
| | | short m_nMatchShotCount; // ëì¼í ë§ì¤í¬ ê²°í¨ì ì. |
| | | short m_nMatchMaxSize; // ëì¼í ë§ì¤í¬ ì¤ ê°ì¥ í° ê²°í¨ì í¬ê¸°. |
| | | |
| | | short m_nRepeatCount; // ì°ìê²°í¨ë°ê²¬ìí ëì¼ì¢í ë°ë³µì |
| | | short m_nMaskRepeatCount; |
| | | int m_StackInfo; // Stack Flag |
| | | BOOL m_bRealStack; // Stack 머ì§ì ìí TD(TRUE) ì¸ì§, íí°ë§ì ìí TD(FALSE)구ë¶í ì ìë¤. |
| | | short m_nStackStepCount; // Stack ì |
| | | short m_nStackColorIdx; // Color를 ì ííë ì¸ë±ì¤. |
| | | //CString m_strStackStep[CFDEFECT_STACKCOUNT]; // Stack Step. |
| | | char m_strStackFirst[60]; // Stack Step. //201221 CJH - ìµë ì¬ì´ì¦ 60bytes |
| | | char m_strUnitID[16]; // ì ëìì´ë |
| | | |
| | | int m_ClassificationType; // enum ClassificationType { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PIë TFEë± ì¶ê° ë¶ë¥ ìê³ ë¦¬ì¦ ì ì© ê²°ê³¼. |
| | | int m_nAtomWidth; // TFE íµ ëë¹ |
| | | int m_nAtomHeight; // TFE íµ ëì´ |
| | | short/*ReKind*/ m_DefectKind; // ê²°í¨ ì¢
ë¥ |
| | | |
| | | char m_strDefectCode[32]; // Defect Code |
| | | BOOL m_bMergeState; // Merge Status |
| | | char m_strAoiImageName[256]; // Defect Image Name(CCD Image) |
| | | CString m_strReviewImageName; |
| | | int m_nDefectMerge; // íì¬ ëíì ë¨¸ì§ ì¬ë¶ |
| | | |
| | | int m_nPixelSizeOrigin; |
| | | int m_nScratchRatio; |
| | | int m_nDensity; // ìí ê²°í¨ êµ¬ë¶ì ìí ë°ë [2017.8.2 bhs] |
| | | |
| | | char m_strDefectName[16]; |
| | | char m_strDefectType[16]; |
| | | |
| | | double m_dScanResolution; |
| | | double m_dConvResolution; |
| | | |
| | | int m_nAngle; // ê°ë |
| | | int m_nMajor; // ì¥ì¶ 길ì´(Long) |
| | | int m_nMinor; // ë¨ì¶ 길ì´(Short) |
| | | int m_nCompact; // Blob ì¥ì¶ì ì§ë¦ì¼ë¡ íë ìì ëì´ì Blob ëì´ì ë¹ì¨ |
| | | int m_nThickness; // Blob ëì´ì ì¥ì¶ì ë¹ì¨ (Area / Major) |
| | | |
| | | short m_nHliLevelIdx; // ëª ë²ì§¸ ë 벨(ì±ë)ì¸ê°? |
| | | int m_nHliLayers; // í´ë¹ê²°í¨ì í¬í¨ë ë ì´ì´ bitì²ë¦¬ |
| | | |
| | | BOOL m_bShrinked; //210323 CJH - Frame Shrink ì ë³´ ì¶ê° |
| | | }; |
| | | |
| | | struct _akModule |
| | | { |
| | | int m_nModuleIndex; |
| | | int m_nUMShotX; // ì· ê¸°ì¤ Xì¢í |
| | | int m_nUMShotY; // ì· ê¸°ì¤ Yì¢í |
| | | int m_nShotIndex; |
| | | }; |
| | | |
| | | struct _akShort |
| | | { |
| | | int m_nUMShotX; // ì· ê¸°ì¤ Xì¢í |
| | | int m_nUMShotY; // ì· ê¸°ì¤ Yì¢í |
| | | int m_nShotIndex; |
| | | }; |
| | | |
| | | struct _akReviewList |
| | | { |
| | | short m_nDefectID; |
| | | int m_nDefectIdx; // ì¹´ë©ë¼ììì ê²°í¨ ì¸ë±ì¤ 201207 CJH - ì릿 ì ë침. intíì¼ë¡ ë³ê²½ |
| | | int m_nReviewIdx; |
| | | char m_strAoiImageName[256]; // Defect Image Name(CCD Image) |
| | | CString m_strReviewImageName; |
| | | CString m_strGlassID; |
| | | char m_strAoiImagePath[256]; |
| | | char m_strReviewImagePath[256]; |
| | | char m_strAlignFirst[64]; |
| | | char m_strAlignSecond[64]; |
| | | |
| | | CString m_strInfos[16]; |
| | | }; |
| | | |
| | | struct _akGlassInfo |
| | | { |
| | | int m_nGlassSelect; |
| | | CString m_strPPID; |
| | | CString m_strGlassID; |
| | | int m_nDefectNum; |
| | | int m_nReviewNum; |
| | | CString m_strGlassJudge; |
| | | CString m_strLotID; |
| | | CString m_strSLotID; |
| | | int m_nSlot_No; |
| | | int m_nCellNum; |
| | | int m_nGlassSizeHeight; |
| | | int m_nGlassSizeWidth; |
| | | |
| | | CString m_strInfos[16]; |
| | | }; |
| | | |
| | | struct _akReviewHeader |
| | | { |
| | | short m_nDefectID; |
| | | int m_nDefectIdx; |
| | | CString m_strGlassID; |
| | | CString m_strPPID; |
| | | int m_nReviewIdx; |
| | | CString m_strJudge; |
| | | CString m_strFileTime; |
| | | CString m_strFileName; |
| | | CString m_strLoading; |
| | | CString m_strFilePath; |
| | | |
| | | CString m_strInfos[16]; |
| | | }; |
| | | |
| | | struct _akFormation |
| | | { |
| | | _akFormation() |
| | | { |
| | | m_nFormLabel = -1; |
| | | m_nFormType = 0; |
| | | m_dRectLeft = 0; |
| | | m_dRectTop = 0; |
| | | m_dRectRight = 0; |
| | | m_dRectBottom = 0; |
| | | } |
| | | void MergeDefect(_akDefect* pDefect) |
| | | { |
| | | if (!m_vecForms.empty()) |
| | | { |
| | | if(m_dRectLeft > pDefect->dPositionX) m_dRectLeft = pDefect->dPositionX; |
| | | if(m_dRectRight < pDefect->dPositionX) m_dRectRight = pDefect->dPositionX; |
| | | |
| | | if (m_dRectTop > pDefect->dPositionY) m_dRectTop = pDefect->dPositionY; |
| | | if (m_dRectBottom < pDefect->dPositionY) m_dRectBottom = pDefect->dPositionY; |
| | | } |
| | | else |
| | | { |
| | | m_dRectRight = m_dRectLeft = pDefect->dPositionX; |
| | | m_dRectTop = m_dRectBottom = pDefect->dPositionY; |
| | | } |
| | | m_vecForms.push_back(pDefect); |
| | | } |
| | | void AnalysisDefectInfo() |
| | | { |
| | | m_nDefectNumS=0; |
| | | m_nDefectNumM=0; |
| | | m_nDefectNumL=0; |
| | | m_nDefectNum1Px=0; |
| | | m_nDefectNumWhite=0; |
| | | m_nDefectNumBlack=0; |
| | | m_nDefectNum1PxWhite = 0; |
| | | m_dSizeAvg = 0; |
| | | m_dSizeStdDev = 0; |
| | | m_dDiffStdDev = 0; |
| | | m_dDiffStdDevAbs = 0; |
| | | |
| | | double dDiffAvg=0; |
| | | double dDiffAvgAbs=0; |
| | | |
| | | _akDefect* pDefect; |
| | | for (int i = 0; i < m_vecForms.size(); i++) |
| | | { |
| | | pDefect = m_vecForms[i]; |
| | | |
| | | if (pDefect->nSize >= 5) m_nDefectNumL++; |
| | | else if (pDefect->nSize >= 2) m_nDefectNumM++; |
| | | else if (pDefect->nSize >= 0) m_nDefectNumS++; |
| | | |
| | | if (pDefect->nSize == 1) m_nDefectNum1Px++; |
| | | |
| | | if (pDefect->nType == 1) m_nDefectNumWhite++; |
| | | else m_nDefectNumBlack++; |
| | | |
| | | if (pDefect->nType == 1 && pDefect->nSize == 1) m_nDefectNum1PxWhite++; |
| | | |
| | | m_dSizeAvg += (double)pDefect->nSize; |
| | | dDiffAvg += (double)pDefect->nGrayDiff; |
| | | dDiffAvgAbs += abs((double)pDefect->nGrayDiff); |
| | | } |
| | | m_dSizeAvg /= m_vecForms.size(); |
| | | dDiffAvg /= m_vecForms.size(); |
| | | dDiffAvgAbs /= m_vecForms.size(); |
| | | |
| | | for (int i = 0; i < m_vecForms.size(); i++) |
| | | { |
| | | pDefect = m_vecForms[i]; |
| | | double dDiff = m_dSizeAvg - m_vecForms[i]->nSize; |
| | | m_dSizeStdDev += dDiff * dDiff; |
| | | |
| | | dDiff = dDiffAvg - m_vecForms[i]->nGrayDiff; |
| | | m_dDiffStdDev += dDiff * dDiff; |
| | | |
| | | dDiff = dDiffAvgAbs - abs((double)pDefect->nGrayDiff); |
| | | m_dDiffStdDevAbs += dDiff * dDiff; |
| | | } |
| | | m_dSizeStdDev = sqrt(m_dSizeStdDev / (double)m_vecForms.size()); |
| | | m_dDiffStdDev = sqrt(m_dDiffStdDev / (double)m_vecForms.size()); |
| | | m_dDiffStdDevAbs = sqrt(m_dDiffStdDevAbs / (double)m_vecForms.size()); |
| | | |
| | | int nFilter = FALSE; |
| | | { |
| | | double d1PxRate = 100.0*((double)m_nDefectNum1Px / (double)m_vecForms.size()); |
| | | double d1PxWhiteRate = 100.0*((double)m_nDefectNum1PxWhite/(double)m_vecForms.size()); |
| | | |
| | | |
| | | if (m_nFormType == 0 && d1PxWhiteRate > 50) |
| | | { |
| | | nFilter = TRUE; |
| | | } |
| | | if (m_nFormType == 1 && d1PxWhiteRate > 30) |
| | | { |
| | | nFilter = TRUE; |
| | | } |
| | | if (m_dSizeStdDev == 0) |
| | | { |
| | | nFilter = TRUE; |
| | | } |
| | | if(d1PxRate>50) |
| | | { |
| | | nFilter = TRUE; |
| | | } |
| | | |
| | | } |
| | | |
| | | if (nFilter) |
| | | { |
| | | for (int i = 0; i < m_vecForms.size(); i++) |
| | | { |
| | | pDefect = m_vecForms[i]; |
| | | pDefect->nFilter = 1; |
| | | } |
| | | } |
| | | |
| | | m_nFormJudge = nFilter; |
| | | } |
| | | |
| | | std::vector<_akDefect*> m_vecForms; |
| | | |
| | | int m_nFormJudge; //0:Normal, 1:Nodefect |
| | | int m_nFormLabel; |
| | | int m_nFormType; //-1:none, 0:round, 1:line |
| | | double m_dRectLeft; |
| | | double m_dRectTop; |
| | | double m_dRectRight; |
| | | double m_dRectBottom; |
| | | |
| | | //ë¶ì ë°ì´í°ë¤ [ê¹íí2021/2/22] |
| | | double m_dSizeAvg; |
| | | double m_dSizeStdDev; |
| | | int m_nDefectNumS; |
| | | int m_nDefectNumM; |
| | | int m_nDefectNumL; |
| | | int m_nDefectNum1Px; |
| | | int m_nDefectNumWhite; |
| | | int m_nDefectNumBlack; |
| | | int m_nDefectNum1PxWhite; |
| | | |
| | | double m_dDiffStdDev; //ê·¸ë ì´ ì°¨ì´ íì¤í¸ì°¨ |
| | | double m_dDiffStdDevAbs; //ê·¸ë ì´ ì°¨ì´ ì ëê° íì¤í¸ì°¨ |
| | | }; |
| | | |
| | | |
| | | class akDefectFormation : public CSingleton< akDefectFormation > |
| | | { |
| | | public: |
| | | akDefectFormation(); |
| | | virtual ~akDefectFormation(); |
| | | |
| | | public: |
| | | void Clear(); |
| | | void AddDefect(double dPosX, double dPosY); |
| | | void AddDefectTemp(double dPosX, double dPosY); |
| | | void AddDefect2(); |
| | | void AddDefectImageTemp(); |
| | | void AddDefectImage(); |
| | | void AddGlassInfo(); |
| | | void AddDefectHeaderTemp(); |
| | | |
| | | public: |
| | | std::vector<_akDefect> m_vecDefects; |
| | | std::vector<_akDefect> m_vecTempDefects; |
| | | std::vector<_akFormation> m_vecFormation; |
| | | std::vector<_akReviewList> m_vecImage; |
| | | std::vector<_akReviewList> m_vecTempImage; |
| | | std::vector<_akReviewHeader> m_vecHeader; |
| | | std::vector<_akReviewHeader> m_vecHeaderTemp; |
| | | std::vector<_akGlassInfo> m_vecGlassInfo; |
| | | |
| | | std::vector<_akDefect> m_vecPath1; |
| | | std::vector<_akDefect> m_vecPath2; |
| | | std::vector<_akDefect> m_vecPath3; |
| | | std::vector<_akDefect> m_vecPath4; |
| | | std::vector<_akDefect> m_vecPath5; |
| | | std::vector<_akDefect> m_vecPath6; |
| | | |
| | | public: |
| | | std::vector< std::vector<_akDefect > > m_vecMoudle; |
| | | }; |
| | | |
| | | |