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