//================================================================================== // DIPM.h : Declaration of DIPM //================================================================================== #ifndef __EDGE_DIPM__ #define __EDGE_DIPM__ //#include "stdafx.h" #include "cv.h" #include "highgui.h" #include "opencv.hpp" #include "core.hpp" #include #include #include #include //Define DLL IM/EXPORTs #ifndef DLLEXPORT #define DLLEXPORT __declspec(dllexport) #endif #ifndef DLLIMPORT #define DLLIMPORT __declspec(dllimport) #endif //////////////////////////////////////////////////////////////////////////////////// // MACRO definitions #define align_4byte(in) ((in + 3)/4)*4 // Memory allocation MACRO for compatible with windows SDK #define memalloc(flags, cb) (GlobalLock(GlobalAlloc((flags),(cb)))) #define memfree(lp) \ (GlobalUnlock((HGLOBAL)GlobalHandle(lp)),(BOOL)GlobalFree((HGLOBAL)GlobalHandle(lp))) //////////////////////////////////////////////////////////////////////////////////// // Constant definitions #define ROUND(a) (a+0.5) #define FLOOR(a) (a) // Numerical MACRO's #define M_PI acos(-1.0) #define M_RADIAN(x) (((M_PI)*(x))/180.0) #define M_DEGREE(x) (((180.0)*(x))/M_PI) #ifndef RANGEIN #define RANGEIN(a, r1, r2) (((a>=r1)&&(a<=r2)) ? (1) : (0)) #endif // Logical MACRO's #define MINIMUM(a, b) ((a)<(b) ? (a) : (b)) #define MAXIMUM(a, b) ((a)>(b) ? (a) : (b)) #define MIDDLE(a, b, c) (((a>b)&&(a= rhs.s_ptVertex[0].x) // LT s_ptVertex[0] = rhs.s_ptVertex[0]; if (s_ptVertex[1].x >= rhs.s_ptVertex[1].x) // LB s_ptVertex[1] = rhs.s_ptVertex[1]; if (s_ptVertex[2].y >= rhs.s_ptVertex[2].y) // TL s_ptVertex[2] = rhs.s_ptVertex[2]; if (s_ptVertex[3].y >= rhs.s_ptVertex[3].y) // TR s_ptVertex[3] = rhs.s_ptVertex[3]; if (s_ptVertex[4].x <= rhs.s_ptVertex[4].x) // RT s_ptVertex[4] = rhs.s_ptVertex[4]; if (s_ptVertex[5].x <= rhs.s_ptVertex[5].x) // RB s_ptVertex[5] = rhs.s_ptVertex[5]; if (s_ptVertex[6].y <= rhs.s_ptVertex[6].y) // BL s_ptVertex[6] = rhs.s_ptVertex[6]; if (s_ptVertex[7].y <= rhs.s_ptVertex[7].y) // BR s_ptVertex[7] = rhs.s_ptVertex[7]; s_nDefectRScale = (s_nDefectRScale + rhs.s_nDefectRScale); if (s_DefectRect.left > rhs.s_DefectRect.left) s_DefectRect.left = rhs.s_DefectRect.left; if (s_DefectRect.top > rhs.s_DefectRect.top) s_DefectRect.top = rhs.s_DefectRect.top; if (s_DefectRect.right < rhs.s_DefectRect.right) s_DefectRect.right = rhs.s_DefectRect.right; if (s_DefectRect.bottom < rhs.s_DefectRect.bottom) s_DefectRect.bottom = rhs.s_DefectRect.bottom; if (s_sDefectPeak < rhs.s_sDefectPeak) s_sDefectPeak = rhs.s_sDefectPeak; s_nDefectX = (s_DefectRect.right + s_DefectRect.left) / 2; s_nDefectY = (s_DefectRect.bottom + s_DefectRect.top) / 2; if (s_sLevelSrcMin > rhs.s_sLevelSrcMin) s_sLevelSrcMin = rhs.s_sLevelSrcMin; if (s_sLevelSrcMax < rhs.s_sLevelSrcMax) { s_sLevelSrcMax = rhs.s_sLevelSrcMax; s_xLevelSrcMax = rhs.s_xLevelSrcMax; s_yLevelSrcMax = rhs.s_yLevelSrcMax; } s_sLevelSrcAvg = (s_sLevelSrcAvg + rhs.s_sLevelSrcAvg) / 2; if (s_sLevelRefMin > rhs.s_sLevelRefMin) s_sLevelRefMin = rhs.s_sLevelRefMin; if (s_sLevelRefMax < rhs.s_sLevelRefMax) s_sLevelRefMax = rhs.s_sLevelRefMax; s_sLevelRefAvg = (s_sLevelRefAvg + rhs.s_sLevelRefAvg) / 2; if (s_sLevelDiffMin > rhs.s_sLevelDiffMin) s_sLevelDiffMin = rhs.s_sLevelDiffMin; if (s_sLevelDiffMax < rhs.s_sLevelDiffMax) s_sLevelDiffMax = rhs.s_sLevelDiffMax; s_sLevelDiffAvg = (s_sLevelDiffAvg + rhs.s_sLevelDiffAvg) / 2; s_nLevelSrcSum += rhs.s_nLevelSrcSum; s_nLevelRefSum += rhs.s_nLevelRefSum; s_nLevelDiffSum += rhs.s_nLevelDiffSum; if (s_sThreshold < rhs.s_sThreshold) s_sThreshold = rhs.s_sThreshold; if(s_dThick < rhs.s_dThick) s_dThick = rhs.s_dThick; s_bCornerChip |= rhs.s_bCornerChip; return *this; } }; class CChipPair { public: ChipPair s_DefectPair; ChipType s_DefectType; ChipResionType s_RegionType; DefectPosType s_DefectPosType; float s_fDefectPeak; int s_nDefectX; int s_nDefectY; int s_nGraySrc; int s_nGrayRef; double s_dThick; BOOL s_bCornerChip; CChipPair() { Reset(); } void Reset() { s_DefectPair = CHIPDEFPAIR_NOTDEFINE; s_DefectType = CHIPDEFTYPE_NODEFECT; s_RegionType = CHIPREGTYPE_NONE; s_DefectPosType = INS_DEFECT_NONE; s_fDefectPeak = 0.0; s_nDefectX = 0; s_nDefectY = 0; s_nGraySrc = 0; s_nGrayRef = 0; s_dThick = 0.; s_bCornerChip = FALSE; } void SetPeak(int nPeak, int nKernelThres, int nCalcPixel) { s_fDefectPeak= static_cast(abs(nPeak)); s_fDefectPeak -= static_cast(nKernelThres); s_fDefectPeak /= static_cast(nCalcPixel); } // º¹»ç »ý¼ºÀÚ. CChipPair(const CChipPair& rhs) { if(this != &rhs) { s_DefectPair = rhs.s_DefectPair; s_DefectType = rhs.s_DefectType; s_fDefectPeak = rhs.s_fDefectPeak; s_nDefectX = rhs.s_nDefectX; s_nDefectY = rhs.s_nDefectY; s_nGraySrc = rhs.s_nGraySrc; s_nGrayRef = rhs.s_nGrayRef; s_RegionType = rhs.s_RegionType; s_dThick = rhs.s_dThick; s_bCornerChip = rhs.s_bCornerChip; s_DefectPosType = rhs.s_DefectPosType; } } // ´ëÀÔ¿¬»êÀÚ ¿À¹ö·Îµù. CChipPair& operator=(const CChipPair& rhs) { if(this != &rhs) { s_DefectPair = rhs.s_DefectPair; s_DefectType = rhs.s_DefectType; s_fDefectPeak = rhs.s_fDefectPeak; s_nDefectX = rhs.s_nDefectX; s_nDefectY = rhs.s_nDefectY; s_nGraySrc = rhs.s_nGraySrc; s_nGrayRef = rhs.s_nGrayRef; s_RegionType = rhs.s_RegionType; s_dThick = rhs.s_dThick; s_bCornerChip = rhs.s_bCornerChip; } return *this; } }; #endif // End of FV_DIPM.h ////////////////////////////////////////////////////////////////////////////////////