#include "StdAfx.h" #include "AlignFinder_Extend.h" CAlignFinder_Extend::CAlignFinder_Extend(int nIndex) : CAlignFinder(nIndex) { } CAlignFinder_Extend::~CAlignFinder_Extend(void) { } int CAlignFinder_Extend::FindAlignEdge( SAlignFindResult& findResult ) { findResult.nResultProcess = AlignProcess_Edge; if (m_findParam.bEdgeProcess==FALSE) { return AlignEdge_None; } // step1. Sobel Edge ¿¬»ê TRACE(_T("[A2E]CAlignFinder::FindAlignEdge Step1\n")); int nWidth = m_SourceImage.GetWidth(); int nHeight = m_SourceImage.GetHeight(); if (ImageSobelEdge((BYTE*)m_SourceImage.GetImageBuffer(), (BYTE*)m_EdgeImage.GetImageBuffer(), nWidth, nHeight)!=1) { findResult.nResultCode = AlignEdge_EdgeFail; return 0; } // step2. Binary Threshold ¿¬»ê TRACE(_T("[A2E]CAlignFinder::FindAlignEdge Step2\n")); if (m_EdgeImage.CopyImageTo(&m_ThresImage)==FALSE) { findResult.nResultCode = AlignEdge_None; return 0; } if (ImageThresholding((BYTE*)m_ThresImage.GetImageBuffer(), nWidth, nHeight, m_findParam.nEdgeThreshold)!=1) { findResult.nResultCode = AlignEdge_BinaryFail; return 0; } // step3. Blob Analysis ¿¬»ê TRACE(_T("[A2E]CAlignFinder::FindAlignEdge Step3\n")); if (m_ThresImage.CopyImageTo(&m_BlobImage)==FALSE) { findResult.nResultCode = AlignEdge_None; return 0; } VectorPixelBlob pixelBlob; if (ImageBlobAnalysis((BYTE*)m_BlobImage.GetImageBuffer(), nWidth, nHeight, pixelBlob, m_findParam.nMergeRange, m_findParam.nAlignHeight, m_findParam.nAlignWidth)!=1) { findResult.nResultCode = AlignEdge_BlobFail; return 0; } // // step4. Blob Matching °ª °è»ê TRACE(_T("[A2E]CAlignFinder::FindAlignEdge Step4\n")); findResult.dMatchValue = pixelBlob[0].dMatchValue; if (findResult.dMatchValue