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

📄 subband_pyramid3d_int.c

📁 QccPack-0.54-1 released (2007-04-30) is being developed and tested on Fedora Core Linux. QccPack pro
💻 C
📖 第 1 页 / 共 4 页
字号:
      return(1);    }  if (QccWAVSubbandPyramid3DIntReadHeader(infile, subband_pyramid))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntRead): Error calling QccWAVSubbandPyramid3DIntReadHeader()");      return(1);    }  if (QccWAVSubbandPyramid3DIntAlloc(subband_pyramid))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntRead): Error calling QccIMGSubbandPyramidAlloc()");      return(1);    }  for (frame = 0; frame < subband_pyramid->num_frames; frame++)    for (row = 0; row < subband_pyramid->num_rows; row++)      for (col = 0; col < subband_pyramid->num_cols; col++)        if (QccFileReadInt(infile,                           &(subband_pyramid->volume[frame][row][col])))          {            QccErrorAddMessage("(QccWAVSubbandPyramid3DIntRead): Error calling QccFileReadInt()",                               subband_pyramid->filename);            return(1);          }  QccFileClose(infile);  return(0);}static int QccWAVSubbandPyramid3DIntWriteHeader(FILE *outfile,                                                const QccWAVSubbandPyramid3DInt                                                *subband_pyramid){  if ((outfile == NULL) || (subband_pyramid == NULL))    return(0);  if (QccFileWriteMagicNumber(outfile, QCCWAVSUBBANDPYRAMID3DINT_MAGICNUM))    goto Error;  fprintf(outfile, "%d\n", subband_pyramid->transform_type);  if (ferror(outfile))    goto Error;  switch (subband_pyramid->transform_type)    {    case QCCWAVSUBBANDPYRAMID3DINT_DYADIC:      fprintf(outfile, "%d\n", subband_pyramid->spatial_num_levels);      if (ferror(outfile))        goto Error;      break;    case QCCWAVSUBBANDPYRAMID3DINT_PACKET:      fprintf(outfile, "%d %d\n",              subband_pyramid->temporal_num_levels,              subband_pyramid->spatial_num_levels);      if (ferror(outfile))        goto Error;      break;    default:      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntWriteHeader): Unrecognized transform type");      goto Error;    }    fprintf(outfile, "%d %d %d\n",          subband_pyramid->num_cols,          subband_pyramid->num_rows,	  subband_pyramid->num_frames);  if (ferror(outfile))    goto Error;  return(0); Error:  QccErrorAddMessage("(QccWAVSubbandPyramid3DIntWriteHeader): Error writing header to %s",                     subband_pyramid->filename);  return(1);}int QccWAVSubbandPyramid3DIntWrite(const QccWAVSubbandPyramid3DInt *subband_pyramid){  FILE *outfile;  int frame, row, col;  if (subband_pyramid == NULL)    return(0);  if ((outfile = QccFileOpen(subband_pyramid->filename, "w")) == NULL)    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntWrite): Error calling QccFileOpen()");      return(1);    }  if (QccWAVSubbandPyramid3DIntWriteHeader(outfile, subband_pyramid))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntWrite): Error calling QccWAVSubbandPyramid3DIntWriteHeader()");      return(1);    }  for (frame = 0; frame < subband_pyramid->num_frames; frame++)    for (row = 0; row < subband_pyramid->num_rows; row++)      for (col = 0; col < subband_pyramid->num_cols; col++)        if (QccFileWriteInt(outfile,                            subband_pyramid->volume[frame][row][col]))          {            QccErrorAddMessage("(QccWAVSubbandPyramid3DIntWrite): Error calling QccFileWriteInt()");            return(1);          }  QccFileClose(outfile);  return(0);}int QccWAVSubbandPyramid3DIntCopy(QccWAVSubbandPyramid3DInt *subband_pyramid1,                                  const QccWAVSubbandPyramid3DInt                                  *subband_pyramid2){  if (subband_pyramid1 == NULL)    return(0);  if (subband_pyramid2 == NULL)    return(0);  if ((subband_pyramid1->num_rows != subband_pyramid2->num_rows) ||      (subband_pyramid1->num_cols != subband_pyramid2->num_cols) ||      (subband_pyramid1->num_frames != subband_pyramid2->num_frames))    {      QccWAVSubbandPyramid3DIntFree(subband_pyramid1);      subband_pyramid1->num_frames = subband_pyramid2->num_frames;      subband_pyramid1->num_rows = subband_pyramid2->num_rows;      subband_pyramid1->num_cols = subband_pyramid2->num_cols;      if (QccWAVSubbandPyramid3DIntAlloc(subband_pyramid1))        {          QccErrorAddMessage("(QccWAVSubbandPyramidd3DCopy): Error calling QccWAVSubbandPyramid3DIntAlloc()");          return(1);        }    }  subband_pyramid1->transform_type = subband_pyramid2->transform_type;  subband_pyramid1->spatial_num_levels = subband_pyramid2->spatial_num_levels;  subband_pyramid1->temporal_num_levels =    subband_pyramid2->temporal_num_levels;  subband_pyramid1->origin_frame = subband_pyramid2->origin_frame;  subband_pyramid1->origin_row = subband_pyramid2->origin_row;  subband_pyramid1->origin_col = subband_pyramid2->origin_col;  subband_pyramid1->subsample_pattern_frame =    subband_pyramid2->subsample_pattern_frame;  subband_pyramid1->subsample_pattern_row =    subband_pyramid2->subsample_pattern_row;  subband_pyramid1->subsample_pattern_col =    subband_pyramid2->subsample_pattern_col;  if (QccVolumeIntCopy(subband_pyramid1->volume,                       subband_pyramid2->volume,                       subband_pyramid1->num_frames,                       subband_pyramid1->num_rows,                       subband_pyramid1->num_cols))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntCopy): Error calling QccVolumeIntCopy()");      return(1);    }  return(0);}int QccWAVSubbandPyramid3DIntZeroSubband(QccWAVSubbandPyramid3DInt *subband_pyramid,                                         int subband){  int num_subbands;  int subband_num_frames;  int subband_num_rows;  int subband_num_cols;  int subband_frame;  int subband_row;  int subband_col;  int frame, row, col;  int spatial_num_levels = subband_pyramid->spatial_num_levels;  int temporal_num_levels = subband_pyramid->temporal_num_levels;  if (subband_pyramid == NULL)    return(0);  if (subband_pyramid->volume == NULL)    return(0);  if (subband < 0)    return(0);    switch (subband_pyramid->transform_type)    {    case QCCWAVSUBBANDPYRAMID3DINT_DYADIC:      num_subbands =        QccWAVSubbandPyramid3DIntNumLevelsToNumSubbandsDyadic(spatial_num_levels);      break;    case QCCWAVSUBBANDPYRAMID3DINT_PACKET:      num_subbands =        QccWAVSubbandPyramid3DIntNumLevelsToNumSubbandsPacket(spatial_num_levels,                                                              temporal_num_levels);      break;    default:      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntZeroSubband): Unrecognized transform type");      return(1);    }  if (subband > num_subbands)    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntZeroSubband): specified subband is large for given subband pyramid");      return(1);    }    if (QccWAVSubbandPyramid3DIntSubbandSize(subband_pyramid,                                           subband,                                           &subband_num_frames,                                           &subband_num_rows,                                           &subband_num_cols))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntZeroSubband): Error calling QccWAVSubbandPyramid3DIntSubbandSize()");      return(1);    }    if (QccWAVSubbandPyramid3DIntSubbandOffsets(subband_pyramid,                                              subband,                                              &subband_frame,                                              &subband_row,                                              &subband_col))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntZeroSubband): Error calling QccWAVSubbandPyramid3DIntSubbandOffsets()");      return(1);    }    for (frame = subband_frame; frame < subband_frame + subband_num_frames;       frame++)    for (row = subband_row; row < subband_row + subband_num_rows; row++)      for (col = subband_col; col < subband_col + subband_num_cols; col++)        subband_pyramid->volume[frame][row][col] = 0;    return(0);}int QccWAVSubbandPyramid3DIntSubtractMean(QccWAVSubbandPyramid3DInt                                          *subband_pyramid,                                          int *mean){  int subband_frame, subband_row, subband_col;  int subband_num_frames, subband_num_rows, subband_num_cols;    int mean1;    if (subband_pyramid == NULL)    return(0);  if (subband_pyramid->volume == NULL)    return(0);    if (QccWAVSubbandPyramid3DIntSubbandSize(subband_pyramid,                                           0,                                           &subband_num_frames,                                           &subband_num_rows,                                           &subband_num_cols))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntSubtractMean): Error calling QccWAVSubbandPyramid3DIntSubbandSize()");      return(1);    }    mean1 = (int)rint(QccVolumeIntMean(subband_pyramid->volume,                                     subband_num_frames,                                     subband_num_rows,                                     subband_num_cols));    for (subband_frame = 0; subband_frame < subband_num_frames; subband_frame++)    for (subband_row = 0; subband_row < subband_num_rows; subband_row++)      for (subband_col = 0; subband_col < subband_num_cols; subband_col++)        subband_pyramid->volume[subband_frame][subband_row][subband_col] -=          mean1;    if (mean != NULL)    *mean = mean1;    return(0);}int QccWAVSubbandPyramid3DIntAddMean(QccWAVSubbandPyramid3DInt                                     *subband_pyramid,                                     int mean){  int subband_frame, subband_row, subband_col;  int subband_num_frames, subband_num_rows, subband_num_cols;    if (subband_pyramid == NULL)    return(0);  if (subband_pyramid->volume == NULL)    return(0);  if (subband_pyramid->spatial_num_levels ||      subband_pyramid->temporal_num_levels)    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntAddMean): Subband-pyramid number of levels is not zero");      return(1);    }    if (QccWAVSubbandPyramid3DIntSubbandSize(subband_pyramid,                                           0,                                           &subband_num_frames,                                           &subband_num_rows,                                           &subband_num_cols))    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntAddMean): Error calling QccWAVSubbandPyramid3DIntSubbandSize()");      return(1);    }    for (subband_frame = 0; subband_frame < subband_num_frames; subband_frame++)    for (subband_row = 0; subband_row < subband_num_rows; subband_row++)      for (subband_col = 0; subband_col < subband_num_cols; subband_col++)        subband_pyramid->volume[subband_frame][subband_row][subband_col] +=          mean;    return(0);}int QccWAVSubbandPyramid3DIntDWT(QccWAVSubbandPyramid3DInt *subband_pyramid,                                 int transform_type,                                 int temporal_num_levels,                                 int spatial_num_levels,                                 const QccWAVWavelet *wavelet){  int return_value;    if (subband_pyramid == NULL)    return(0);  if (wavelet == NULL)    return(0);    if (subband_pyramid->spatial_num_levels ||      subband_pyramid->temporal_num_levels)    {      QccErrorAddMessage("(QccWAVSubbandPyramid3DIntDWT): Subband pyramid is already decomposed");      goto Error;    }    switch (transform_type)    {    case QCCWAVSUBBANDPYRAMID3DINT_DYADIC:      subband_pyramid->transform_type = QCCWAVSUBBANDPYRAMID3DINT_DYADIC;      if (spatial_num_levels != temporal_num_levels)        {          QccErrorAddMessage("(QccWAVSubbandPyramid3DIntDWT): Spatial and temporal number of levels must be identical for a dyadic transform");          goto Error;        }      subband_pyramid->spatial_num_levels =        subband_pyramid->temporal_num_levels = spatial_num_levels;      if (QccWAVWaveletDyadicDWT3DInt(subband_pyramid->volume,                                      subband_pyramid->num_frames,                                      subband_pyramid->num_rows,                                      subband_pyramid->num_cols,                                      subband_pyramid->origin_frame,                                      subband_pyramid->origin_row,                                      subband_pyramid->origin_col,                                      subband_pyramid->subsample_pattern_frame,                                      subband_pyramid->subsample_pattern_row,                                      subband_pyramid->subsample_pattern_col,                                      spatial_num_levels,                                      wavelet))        {          QccErrorAddMessage("(QccWAVSubbandPyramid3DIntDWT): Error calling QccWAVWaveletDyadicDWT3DInt()");          goto Error;        }      break;    case QCCWAVSUBBANDPYRAMID3DINT_PACKET:      subband_pyramid->transform_type = QCCWAVSUBBANDPYRAMID3DINT_PACKET;      subband_pyramid->spatial_num_levels = spatial_num_levels;      subband_pyramid->temporal_num_levels = temporal_num_levels;      if (QccWAVWaveletPacketDWT3DInt(subband_pyramid->volume,                                       subband_pyramid->num_frames,                                      subband_pyramid->num_rows,                                      subband_pyramid->num_cols,

⌨️ 快捷键说明

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