www.pudn.com > wavelet-vc++6.rar > LBG.cpp
// LBG.cpp : implementation file
//
#include "stdafx.h"
#include "wavelet.h"
#include "LBG.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLBG dialog
int N,K; //K:码字维数,N:码本尺寸
int W,H; //图像的宽度和高度
unsigned char TS0[256][256],YY[32][16]; //TSO数组用于存储训练集
//YY数组用于存储码本
unsigned char level=8;
CLBG::CLBG(CWnd* pParent /*=NULL*/)
: CDialog(CLBG::IDD, pParent)
{
//{{AFX_DATA_INIT(CLBG)
m_codebook = 0;
m_infile = _T("");
m_outfile = _T("");
m_vector = 0;
m_eps = 0.0f;
//}}AFX_DATA_INIT
}
void CLBG::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLBG)
DDX_Text(pDX, IDC_CODEBOOK, m_codebook);
DDX_Text(pDX, IDC_INFILEEDIT, m_infile);
DDX_Text(pDX, IDC_OUTFILEEDIT, m_outfile);
DDX_Text(pDX, IDC_VECTOR, m_vector);
DDX_Text(pDX, IDC_THRESHOLD, m_eps);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLBG, CDialog)
//{{AFX_MSG_MAP(CLBG)
ON_BN_CLICKED(IDC_INFILELOOK, OnInfilelook)
ON_BN_CLICKED(IDC_OUTFILELOOK, OnOutfilelook)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLBG message handlers
void CLBG::mainprogram()
{
unsigned M,j=0,l=0,n=0;
long k=0;
unsigned char *TS,*q,*Y,*y,*p; //定义指针,Y指向码本,TS指向训练集
readfile();
M=(unsigned int)(SOI/(long)m_vector); //m_vector:码字维数
TS=&TS0[0][0];
q=&TS0[0][0];
K=m_vector;
N=m_codebook;
for(k=0;keps)
{
for(i=0;i<(unsigned)N;i++)
{
if(YN[i]!=0)
{
o=core(t,(int*)s,i,m); //求出各个胞腔的形心,构成新码本
t=ts;
s=S;
vcpy(y,o);
y+=K;
}
}
D0=D1;
goto aa; //如果不满足停止条件,转移至工业继续上述过程
}
if((fpo=fopen(m_outfile,"wb"))==NULL)
{
AfxMessageBox("Can't output the file!");
return;
}
putw(m_codebook,fpo); //存入码本尺寸
putw(m_vector,fpo); //存入码字维数
fputc(level,fpo);
//存入码本
for(i=0;i<(unsigned int)m_codebook;i++)
{
y=Y+i*K;
for(int j=0;jz)
{
min0=z;
r=i;
}
}
if(flag==1) return(min0);
else if(flag==0) return(r);
}
//计算两个向量的距离
int CLBG::d(unsigned char *x,unsigned char *y)
{
int sum=0;
for(int i=0;i