// MosisMath.h: interface for the CMosisMath class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_MOSISMATH_H__00204741_878C_42AB_8757_3EE86C292EFD__INCLUDED_) #define AFX_MOSISMATH_H__00204741_878C_42AB_8757_3EE86C292EFD__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "MosisBuffer.h" typedef __int64 int64; typedef unsigned char uchar; typedef unsigned short ushort; /* // defect count ±â¹ÝÀ¸·Î cutoff point ¸¦ ã¾Æ ÁØ´Ù. // AddCountData¸¦ ÅëÇÑ ¹æ¹ý°ú FindCutoff_Continue¸¦ ÅëÇÑ ¹æ¹ý µÎ°¡Áö°¡ ÀÖ´Ù. class AFX_EXT_CLASS CCutoffFind { int m_nContinuousCutoff; int *m_pCountData; public: int m_nCountData; CCutoffFind() { m_nCountData= 0; m_pCountData= NULL; } ~CCutoffFind() { if(m_pCountData) delete m_pCountData; } BOOL SetSize(int nData) { m_nCountData= nData; if(m_pCountData) delete m_pCountData; m_pCountData= new int[nData]; return TRUE; } // ¼øÂ÷ÀûÀ¸·Î È£ÃâµÇ¸é cutoffÀÎÁö¸¦ ÆÇº°ÇØ ¿¬¼Ó cutoff count¸¦ ¸®ÅÏÇØ ÁØ´Ù. int AddCountData(int data, int nCutoff) { if(data < nCutoff) { m_nContinuousCutoff++; return m_nContinuousCutoff; } m_nContinuousCutoff= 0; return 0; } void SetCountData(int iData, int data) { m_pCountData[iData]= data; } // Á¤,¿ª¹æÇâÀ¸·Î line by line °Ë»çÇϸç Cutoff_Continuous¸¦ ã¾Æ ³½´Ù. Cutoff_Continuous°¡ ¾øÀ¸¸é false, Cutoff À§Ä¡´Â Á¤¹æÇâ ±âÁØÀÇ indexÀÌ´Ù. // nContinue°³¼ö ÀÌ»ó Áö¼ÓÀûÀ¸·Î cutoff°¡ »ý°Ü¾ß Cutoff_Continuous·Î °£ÁÖÇÑ´Ù. BOOL FindCutoff_Continuous(BOOL bForwardScan, int nCutoff, int nContinue, int &iForwardResult) { int i; int nOccur= 0; if(bForwardScan) { for(i= 0; i< m_nCountData; i++) { if(m_pCountData[i] > nCutoff) { nOccur++; if(nOccur >= nContinue) { iForwardResult= i- nContinue+ 1; return TRUE; } }else { nOccur= 0; } } return FALSE; } for(i= m_nCountData-1; i >= 0; i--) { if(m_pCountData[i] > nCutoff) { nOccur++; if(nOccur >= nContinue) { iForwardResult= i+ nContinue- 1; return TRUE; }else { nOccur= 0; } } } return FALSE; } }; */ // 1. Sum of Absolute Differences // 2. Cross-Correlation Values. // 3. Minimum or Maximum on a certain curve. class AFX_EXT_CLASS CMosisMath { public: // 1. Get Sum of Absolute Differences on the specific area(Rect). static INT64 GetAbsDiff(CMosisBuffer buffer, CRect rect, CMosisBuffer buffer2, int x2, int y2) { return GetAbsDiff(buffer, rect.left, rect.top, rect.Width(), rect.Height(), buffer2, x2, y2); } static INT64 GetAbsDiff(CMosisBuffer buffer, int x1, int y1, int width, int height, CMosisBuffer buffer2, int x2, int y2); static INT64 GetAbsDiff(BYTE* pData, BYTE* pData2, int len); // 2. Get Cross Correlation Value on the specific area(Rect). static int64 Get_CCU8( CMosisBuffer buffer1, int x1, int y1, int width, int height, CMosisBuffer buffer2, int x2, int y2); static int64 Get_CCU8_A( const uchar * vec1, int len ); static int64 Get_CCU8_AUA( const uchar * vec1, const uchar * vec2, int len ); static int64 Get_CCU8_UA( const uchar * vec1, const uchar * vec2, int len ); static int64 Get_CCU8_UA( const uchar * vec1, int len ); static int64 Get_CCU16_A( const ushort * vec1, int len ); static int64 Get_CCU16_AUA( const ushort * vec1, const ushort * vec2, int len ); static int64 Get_CCU16_UA( const ushort * vec1, const ushort * vec2, int len ); static int64 Get_CCU16_UA( const ushort * vec1, int len ); static int64 SumPixels_8u( const uchar * vec, int len ); static int64 SumPixels_16u( const ushort * vec, int len ); // 3. y= -a(x+ b)^2+ c => ÃÖ¼Ò°ªÀ» °¡Áö´Â Æ÷¹°¼±¿¡¼­ ÃÖ¼Ò°ªÀ» ã´Â´Ù. static double SearchMinimum(int64 *pData, int nData); // 3. y= a(x+ b)^2+ c => ÃÖ´ë°ªÀ» °¡Áö´Â Æ÷¹°¼±¿¡¼­ ÃÖ´ë°ªÀ» ã´Â´Ù. static double SearchMaximum(int64 *pData, int nData); // 4. static double GetAverage(CMosisBuffer buffer); static INT64 GetSum(CMosisBuffer buffer); // 5. // static void CountLineDefect(CMosisBuffer bufer, double xPitch, double yPitch, CCutoffFind &find); public: // useless static int64 Get_CCU16_A( const ushort * vec1, const ushort * vec2, int len ); static int64 Get_CCU8_A( const uchar * vec1, const uchar * vec2, int len ); public: // for omp static int64 OMP_CCU8_A(const uchar * vec1, int len); static int64 OMP_CCU8_UA(const uchar *vec1, int len); static int64 OMP_CCU8_AUA( const uchar * vec1, const uchar * vec2, int len ); static int64 OMP_CCU16_A( const ushort * vec1, int len ); static int64 OMP_CCU16_UA( const ushort * vec1, int len ); static int64 OMP_CCU16_AUA( const ushort * vec1, const ushort * vec2, int len ); }; #endif // !defined(AFX_MOSISMATH_H__00204741_878C_42AB_8757_3EE86C292EFD__INCLUDED_)