64,654
社区成员
发帖
与我相关
我的任务
分享
UCHAR* pBufOut = new UCHAR[width];
UCHAR* pBufWin = NULL;
UCHAR** pBufBands = NULL;
UCHAR** pBufWin2D = NULL;
UCHAR*** pBufBands3D = NULL;
for (int j=0; j<height;j++)
{
for (int i=0; i<width;i++)
{
nWinSize = nWinSizeDefault;
do
{
//此处可能会有新的nWinSize的值,且根据i,j的不同而不同
//if(nWinSizeOk)break;
} while (1);
HalfWindow = nWinSize/2;
pBufBands = new UCHAR*[nBand];
for (int n=0;n<nBand;n++)
{
pBufBands[n] = new UCHAR[nWinSize*nWinSize];
}
for (int n=0;n<nBand;n++)
{
CGEO_RasterData* pRaster = m_pImage_->GetRasterData(n);
//对pBufBands[n]赋值
Get_Mask_Buf(pRaster,rect.left+i,rect.top+j,nWinSize,pBufBands[n]);
}
//根据nWinSize 和 nBand 建立 一个二维数组和三维数组
pBufWin2D = new UCHAR*[nWinSize];
for (int n1=0;n1<nWinSize;n1++)
{
pBufWin2D[n1]=new UCHAR[nWinSize];
//memset(pBufWin2D[n1],0,nWinSize*sizeof(UCHAR));
}
pBufBands3D= new UCHAR**[nWinSize];
for (int n1=0;n1<nWinSize;n1++)
{
pBufBands3D[n1]=new UCHAR*[nWinSize];
for (int n2=0;n2<nWinSize;n2++)
{
pBufBands3D[n1][n2]=new UCHAR[nBand];
}
}
//由pBufBands和pBufWin 给pBufBands3D和pBufWin2D 赋值
for (int ii=0; ii<nWinSize; ii++)
{
for (int jj=0; jj<nWinSize; jj++)
{
int ID = pBufWin[ii*nWinSize+jj];
pBufWin2D[ii][jj] = ID;
for (int b =0;b<nBand;b++)
{
int val = pBufBands[b][ii*width + jj];
pBufBands3D[ii][jj][b] = val;
}
}
}
//将pBufBands3D和pBufWin2D输入函数计算
pBufOut[i] = adjust_mindist_classifier(nWinSize,pBufBands3D,pBufWin2D,dSpaWeight);
//释放内存
//free pBufWin and pBufBands
delete[] pBufWin;
pBufWin =NULL;
for (int n=0; n<nBand; n++)
{
delete []pBufBands[n];
}
delete []pBufBands;
pBufBands =NULL;
//free pBufWin2D and pBufBands3D
for (int n=0; n<nWinSize; n++){
delete []pBufWin2D[n];
}
delete []pBufWin2D;
for(int i = 0; i < nWinSize; ++i){
for(int j = 0; j < nWinSize; ++j)
delete [] (pBufBands3D[i][j]);
delete []pBufBands3D[i];
}
delete [] pBufBands3D;
pBufWin2D =NULL;
pBufBands3D =NULL;
}
}
//由pBufBands和pBufWin 给pBufBands3D和pBufWin2D 赋值
for (int ii=0; ii<nWinSize; ii++)
{
for (int jj=0; jj<nWinSize; jj++)
{
int ID = pBufWin[ii*nWinSize+jj];
pBufWin2D[ii][jj] = ID;
for (int b =0;b<nBand;b++)
{
int val = pBufBands[b][ii*width + jj];
pBufBands3D[ii][jj][b] = val;
}
}
}