www.pudn.com > hongmodingweiyuanchengxu.rar > PicOpt.h


//图像处理类 
 
/* 
	本程序是练习时顺手写的程序,简陋至极,欢迎高手指点。 
 
	“打开”一幅虹膜样本就可以进行操作。 
 
				作者:	吴春雷 
				QQ:		26885133 
				群:		29153069 
				EMail:	wuchunlei@163.com 
*/ 
class CPicOpt{ 
public: 
	CPicOpt(); 
 
public: 
	inline ReadInInfo(unsigned char **sTBmpData,BITMAPINFOHEADER stTBmpInfoHeader){ 
		sBmpData=sTBmpData; 
		stBmpInfoHeader=stTBmpInfoHeader; 
		nHeight=stBmpInfoHeader.biHeight; 
		nWidth=stBmpInfoHeader.biWidth; 
	} 
	void ChangedAver();				//灰度均衡变换 
	void Segmentation();				//迭代法 图像二值化 
	void VProject();			//统计垂直投影数据 
	void HProject();			//水平投影数据统计 
	void AverRein(int nK);				//平均值增强	nK为阈值比例 
	void MakeVJump();				//统计垂直跳变数据 
	void DisNoise(int nD);				//消除噪音	nD为连续黑色点数 
	inline unsigned char **GetChangedBmpData(){ 
		return sNewBmpData; 
	} 
	inline long *GetHPjData(){ 
		return HPjData; 
	} 
	inline long *GetVPjData(){ 
		return VPjData; 
	} 
	inline long *GetVJumpData(){ 
		return VJumpData; 
	} 
	CreateNewBmpData(int nT);		//根据阈值建立新的图像数据 
 
private: 
	CountHD();				//统计直方图信息 
//	CreateNewBmpData(int nT);		//根据阈值建立新的图像数据 
private: 
	int nHD[256];				//记录256个灰度的像素个数 
	float fHDFB[256];			//记录256个灰度的分布 
	unsigned char **sNewBmpData;		//保存改变后的像素数据  
	 
	unsigned char **sBmpData; 
	BITMAPINFOHEADER stBmpInfoHeader; 
	long nHeight,nWidth; 
	long *VPjData;			//垂直投影数据 
	long *HPjData; 
	long *VJumpData;		//跳变图投影 
 
}; 
CPicOpt::CPicOpt(){ 
	int i; 
	for (i=0;i<256;i++){			//初始化 
		nHD[i]=0; 
		fHDFB[i]=0; 
	} 
} 
void CPicOpt::ChangedAver(){ 
 
	int i,j; 
	int nTemp; 
	int nYS[256]={0};		//保存影射关系 
 
	 
	CountHD();			//统计灰度分布信息 
	 
	//计算映射关系 
	for (i=0;i<256;i++){ 
		nTemp=(int)(fHDFB[i]*255+0.5); 
		nYS[i]=nTemp; 
	} 
	//调整 
	sNewBmpData=new unsigned char *[nHeight]; 
	for (i=0;i=nT) sNewBmpData[i][j]=255;		//高过阈值的全为白色 
			else sNewBmpData[i][j]=0; 
		} 
	} 
} 
void CPicOpt::VProject(){				//统计垂直投影数据	 
	int i,j; 
	long nTotal=0; 
	VPjData=new long [nWidth]; 
	for (i=0;ifAver/nK) sNewBmpData[i][j]=255; 
			else sNewBmpData[i][j]=0; 
		} 
	} 
} 
void CPicOpt::MakeVJump(){ 
	long i,j; 
	 
	VJumpData=new long [nWidth]; 
 
	for (j=0;j