⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rxysegment_temp.cpp

📁 3D reconstruction, medical image processing from colons, using intel image processing for based clas
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// RxySegment.cpp: implementation of the RxySegment class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "fusion.h"#include "RxySegment.h"// yeni 2004.02.11#include "filters.h"// yeni 2004.02.24.#include "ipl.h"//#include "JJBinaryVolume.h"// yeni 2004.03.19.#include "volumedata.h"#include "RxyConnectedComponent.h"#include "fusionglobal.h"// yeni 2004.05.18.#include "ProgressWnd.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif#define PATIENT_1		1#define PATIENT_2		0#define PATIENT_3		0#define PATIENT_4		0#define PATIENT_5		0#define PATIENT_6		0#define PATIENT_7		0#define PATIENT_8		0#define PATIENT_9		0#define PATIENT_10		0//		1 全扁后//		2 蜡公磊//		3 捞犁帮//		4 辫荐沥//		5 颊措牢, Float 2锅掳 辆剧 92锅掳 浇扼捞胶//	    6 捞荐磊//		7 决沥巢//	    8 捞篮雀, 2锅掳 巴 肋 救凳//      9 烙篮惑, 2锅掳 巴 肋 救凳//      10 捞荐康, 4锅掳 巴 肋 救凳// 全扁后#ifdef PATIENT_1#define THRESHOLD			600			#define NUM_OF_EROSION		4	#define REMOVEBACK			0.1			#define OFFSET				4#endif// 蜡公磊#ifdef PATIENT_2#define THRESHOLD			600			#define NUM_OF_EROSION		3			#define REMOVEBACK			0.137	#define OFFSET				10	#endif// 捞犁帮#ifdef PATIENT_3#define THRESHOLD			600			#define NUM_OF_EROSION		3			#define REMOVEBACK			0.15			#define OFFSET				10#endif// 辫荐沥#ifdef PATIENT_4#define THRESHOLD			600			#define NUM_OF_EROSION		3		#define REMOVEBACK			0.1#define OFFSET				10			#endif// 颊措牢#ifdef PATIENT_5#define THRESHOLD			550			#define NUM_OF_EROSION		3			#define REMOVEBACK			0.1			#define OFFSET				4#endif// 捞荐磊#ifdef PATIENT_6#define THRESHOLD			600		#define NUM_OF_EROSION		2			#define REMOVEBACK			0.15			#define OFFSET				4#endif// 决辆巢#ifdef PATIENT_7#define THRESHOLD			600		#define NUM_OF_EROSION		2			#define REMOVEBACK			0.15			#define OFFSET				4#endif// 捞篮锐#ifdef PATIENT_8#define THRESHOLD			600		#define NUM_OF_EROSION		2			#define REMOVEBACK			0.15			#define OFFSET				4#endif// 烙篮惑#ifdef PATIENT_9#define THRESHOLD			600		#define NUM_OF_EROSION		2			#define REMOVEBACK			0.15			#define OFFSET				4#endif// 捞荐康#ifdef PATIENT_10#define THRESHOLD			600		#define NUM_OF_EROSION		3			#define REMOVEBACK			0.15			#define OFFSET				4#endifCQ::CQ(int MaxCount){	m_nMaxElement=MaxCount;	m_pQElement = (int *)malloc(m_nMaxElement*sizeof(int)*0.2);	m_nIndexEnqueue =0;	m_nIndexDequeue =0;}CQ::~CQ(){	free(m_pQElement);}void CQ::Clear(){	m_nIndexEnqueue =0;	m_nIndexDequeue =0;}void CQ::Enqueue(int nIndex){	m_pQElement[m_nIndexEnqueue++]=nIndex;		}int CQ::Dequeue(){	return(m_pQElement[m_nIndexDequeue++]);}bool CQ::IsEmpty(){	return(m_nIndexEnqueue == m_nIndexDequeue);}bool CQ::IsFull(){	return(m_nIndexEnqueue>=m_nMaxElement);}//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////RxySegment::RxySegment(){	// yeni 2004.03.19.	m_pLabel = NULL;	m_ptSeed = NULL;}RxySegment::~RxySegment(){}BOOL RxySegment::SRG2D_MinMax( float SeedX, float SeedY, 									 unsigned short *pImg, BYTE *pLabel, int nWidth, int nHeight, 									 int nMin, int nMax ) {		int nSliceSize = nWidth*nHeight;		if(SeedX<0 || SeedX>=nWidth|| SeedY<0 || SeedY>=nHeight ) {		TRACE(_T("return FALSE\n"));		return FALSE;			}		CQ Q(nSliceSize);		BOOL bRet = FALSE;	int nIndex = SeedX+SeedY*nWidth;	unsigned short nData = pImg[nIndex];	int nValue = 255;		if((pLabel[nIndex]==0) && (nData>=nMin && nData<=nMax)){		Q.Enqueue(nIndex); // seed point啊 烙拌摹 捞郴捞搁 q 俊 涝仿 (Seed 犬厘)		bRet = TRUE;	}	else {		TRACE(_T("out of threshold range\n"));		return bRet;	}		do{		nIndex = Q.Dequeue();// Seed 痢阑 罐绰促.				int x_pos = (nIndex%(nSliceSize))%nWidth;		int y_pos = (nIndex%(nSliceSize))/nWidth;		int nXIndex = (nIndex%(nSliceSize))%nWidth; // current row俊辑 割锅掳 牢郸胶牢啊		int nYIndex = nIndex%(nSliceSize)-nXIndex;	// current slice俊辑 previous row鳖瘤狼 牢郸胶 		bool bTop_Connectivity = false;		bool bBottom_Connectivity = false;			bool bTop_Check = true;		bool bBottom_Check = true;			if(y_pos <= 0) bTop_Check = false;		if(y_pos >= nHeight) bBottom_Check = false;		for(int x=x_pos;x>=0;x--){			int nIndexNeighbor = nYIndex+x;			if(pLabel[nIndexNeighbor]!=0/* && pLabel[nZIndex+nIndexNeighbor]!=HALF_MARK_LABEL*/){				break;			}			nData = pImg[nIndexNeighbor];			if((nMin<=nData) && (nData<=nMax)){											pLabel[nIndexNeighbor]=nValue; //弊 痢俊 饭捞喉阑 霖促.					if(bTop_Check){					int nRefIndex = nIndexNeighbor - nWidth; // top neighbor					if( pLabel[nRefIndex]==0 ){						int nRefData = pImg[nRefIndex];						if((nMin<=nRefData) && (nRefData<=nMax)){ // threshold裹困 郴俊 乐栏搁							if(!bTop_Connectivity){								Q.Enqueue(nRefIndex);																bTop_Connectivity = true;							}						} else bTop_Connectivity = false;					} else bTop_Connectivity = false;				}				if(bBottom_Check){					int nRefIndex = nIndexNeighbor + nWidth; // bottom neighbor					if( pLabel[nRefIndex]==0 ){						int nRefData = pImg[nRefIndex];						if((nMin<=nRefData) && (nRefData<=nMax)){ // threshold裹困 郴俊 乐栏搁							if(!bBottom_Connectivity){								Q.Enqueue(nRefIndex);	 															bBottom_Connectivity = true;							}						} else bBottom_Connectivity = false;					} else bBottom_Connectivity = false;				}			} 			else 	break;					}		bTop_Connectivity = bBottom_Connectivity = false;		for(x=x_pos+1;x<=nWidth;x++){			int nIndexNeighbor = nYIndex+x;			if(pLabel[nIndexNeighbor]!=0 ){					break;			}			nData = pImg[nIndexNeighbor];			if((nMin<=nData) && (nData<=nMax)){								pLabel[nIndexNeighbor]=nValue; //弊 痢俊 饭捞喉阑 霖促.								if(bTop_Check){					int nRefIndex = nIndexNeighbor - nWidth;					if( pLabel[nRefIndex]==0 ){						int nRefData = pImg[nRefIndex];						if((nMin<=nRefData) && (nRefData<=nMax)){							if(!bTop_Connectivity){								Q.Enqueue(nRefIndex);																bTop_Connectivity = true;							}						} else bTop_Connectivity = false;					} else bTop_Connectivity = false;				}				if(bBottom_Check){					int nRefIndex = nIndexNeighbor + nWidth;					if( pLabel[nRefIndex]==0 ){						int nRefData = pImg[nRefIndex];						if((nMin<=nRefData) && (nRefData<=nMax)){							if(!bBottom_Connectivity){								Q.Enqueue(nRefIndex);								bBottom_Connectivity = true;							}						} else bBottom_Connectivity = false;					} else bBottom_Connectivity = false;				}			} 			else	break;					}	}while(!Q.IsEmpty()); // Q俊 甸绢埃 point啊 家柳瞪 锭鳖瘤	return bRet;}////////////////////////////////////// 3D seeded region growing// added in 2004. 02. 04 ////////////////////////////////////BOOL RxySegment::SRG3D_LineMinMax(float SeedX, float SeedY, float SeedZ, 							 unsigned short *pImg, BYTE *pLabel, int nWidth, int nHeight, 							 int iSliceCnt, int nMin, int nMax )														{		TRACE(_T("Start SRG3D_LineMinMax!\n"));		int nSliceSize = nWidth*nHeight;	int nVolSize = iSliceCnt*nSliceSize;		if(SeedX<0 || SeedX>nWidth-1 || SeedY<0 || SeedY>nHeight-1 		|| SeedZ<0 || SeedZ>iSliceCnt-1) {		TRACE(_T("return FALSE\n"));		return FALSE;			}		CQ Q(nVolSize);		BOOL bRet = FALSE;	int nIndex = SeedX+SeedY*nWidth+SeedZ*nSliceSize;	unsigned short nData = pImg[nIndex];	int nValue = 255;		if((pLabel[nIndex]==0) && (nData>=nMin && nData<=nMax)){		Q.Enqueue(nIndex); // seed point啊 烙拌摹 捞郴捞搁 q 俊 涝仿 (Seed 犬厘)		bRet = TRUE;	}	else {		TRACE(_T("out of threshold range\n"));		return bRet;	}		do{		nIndex = Q.Dequeue();// Seed 痢阑 罐绰促.				int x_pos = (nIndex%nSliceSize)%nWidth;		int y_pos = (nIndex%nSliceSize)/nWidth;		int z_pos = nIndex/nSliceSize;		int nXIndex = (nIndex%nSliceSize)%nWidth; // current row俊辑 割锅掳 牢郸胶牢啊		int nYIndex = nIndex%nSliceSize-nXIndex;	// current slice俊辑 previous row鳖瘤狼 牢郸胶 		int nZIndex = nIndex-nYIndex-nXIndex;		// previous slice鳖瘤狼 牢郸胶				int nZUpIndex = nZIndex-nSliceSize;		// nZIndex俊 slice茄厘父怒 牢郸胶 力寇		int nZDownIndex = nZIndex+nSliceSize;	// nZIndex俊 slice茄厘父怒 牢郸胶 眠啊		if(z_pos < 0) continue;		if(z_pos > iSliceCnt-1) continue;		bool bTop_Connectivity = false;		bool bBottom_Connectivity = false;		bool bUp_Connectivity = false;		bool bDown_Connectivity = false;		bool bTop_Check = true;		bool bBottom_Check = true;		bool bUp_Check = true;		bool bDown_Check = true;		if(y_pos <= 0) bTop_Check = false;		if(y_pos >= nHeight-1) bBottom_Check = false;		if(z_pos <= 0) bUp_Check = false;		if(z_pos >= iSliceCnt-1) bDown_Check = false;		for(int x=x_pos;x>=0;x--){			int nIndexNeighbor = nYIndex+x;			if( pLabel[nZIndex+nIndexNeighbor]!=0 ){				break;			}			nData = pImg[nZIndex+nIndexNeighbor];			if((nMin<=nData) && (nData<=nMax)){											pLabel[nZIndex+nIndexNeighbor]=nValue; //弊 痢俊 饭捞喉阑 霖促.					if(bTop_Check){					int nRefIndex = nIndexNeighbor - nWidth; // top neighbor					if(pLabel[nZIndex+nRefIndex]==0 ){						int nRefData = pImg[nZIndex+nRefIndex];						if((nMin<=nRefData) && (nRefData<=nMax)){ // threshold裹困 郴俊 乐栏搁							if(!bTop_Connectivity){								Q.Enqueue(nZIndex+nRefIndex);																bTop_Connectivity = true;							}						} else bTop_Connectivity = false;					} else bTop_Connectivity = false;				}				if(bBottom_Check){					int nRefIndex = nIndexNeighbor + nWidth; // bottom neighbor					if(pLabel[nZIndex+nRefIndex]==0 ){						int nRefData = pImg[nZIndex+nRefIndex];						if((nMin<=nRefData) && (nRefData<=nMax)){ // threshold裹困 郴俊 乐栏搁							if(!bBottom_Connectivity){								Q.Enqueue(nZIndex+nRefIndex);	 															bBottom_Connectivity = true;							}						} else bBottom_Connectivity = false;					} else bBottom_Connectivity = false;				}				if(bUp_Check){										if(pLabel[nZUpIndex+nIndexNeighbor]==0 ){						int nRefData = pImg[nZUpIndex+nIndexNeighbor];						if((nMin<=nRefData) && (nRefData<=nMax)){ // threshold裹困 郴俊 乐栏搁							if(!bUp_Connectivity){								Q.Enqueue(nZUpIndex+nIndexNeighbor);															bUp_Connectivity = true;							}						} else bUp_Connectivity = false;					} else bUp_Connectivity = false;				}				if(bDown_Check){										if(pLabel[nZDownIndex+nIndexNeighbor]==0 ){						int nRefData = pImg[nZDownIndex+nIndexNeighbor];						if((nMin<=nRefData) && (nRefData<=nMax)){ // threshold裹困 郴俊 乐栏搁							if(!bDown_Connectivity){								Q.Enqueue(nZDownIndex+nIndexNeighbor);								bDown_Connectivity = true;							}						} else bDown_Connectivity = false;					} else bDown_Connectivity = false;				}			} 			else 	break;					}		bUp_Connectivity = bDown_Connectivity = bTop_Connectivity = bBottom_Connectivity = false;		for(x=x_pos+1;x<nWidth;x++){			int nIndexNeighbor = nYIndex+x;			if(pLabel[nZIndex+nIndexNeighbor]!=0 ){					break;			}			nData = pImg[nZIndex+nIndexNeighbor];			if((nMin<=nData) && (nData<=nMax)){								pLabel[nZIndex+nIndexNeighbor]=nValue; //弊 痢俊 饭捞喉阑 霖促.								if(bTop_Check){					int nRefIndex = nIndexNeighbor - nWidth;					if( pLabel[nZIndex+nRefIndex]==0 ){						int nRefData = pImg[nZIndex+nRefIndex];						if((nMin<=nRefData) && (nRefData<=nMax)){							if(!bTop_Connectivity){								Q.Enqueue(nZIndex+nRefIndex);																bTop_Connectivity = true;							}						} else bTop_Connectivity = false;					} else bTop_Connectivity = false;				}				if(bBottom_Check){					int nRefIndex = nIndexNeighbor + nWidth;					if(pLabel[nZIndex+nRefIndex]==0 ){						int nRefData = pImg[nZIndex+nRefIndex];						if((nMin<=nRefData) && (nRefData<=nMax)){							if(!bBottom_Connectivity){								Q.Enqueue(nZIndex+nRefIndex);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -