📄 subband_pyramid.c
字号:
subband_images[subband].num_cols = subband_num_cols; if (QccIMGImageComponentAlloc(&(subband_images[subband]))) { QccErrorAddMessage("(QccWAVSubbandPyramidAssembleFromDat): Error calling QccIMGImageComponentAlloc()"); goto Error; } tile_dimension = sqrt((double)vector_dimensions[subband]); if (QccIMGDatasetToImageComponent(&subband_images[subband], &input_datasets[subband], tile_dimension, tile_dimension)) { QccErrorAddMessage("(QccWAVSubbandPyramidAssembleFromDat): Error calling QccIMGDatToImageComponent()"); goto Error; } } if (QccWAVSubbandPyramidAssembleFromImageComponent(subband_images, subband_pyramid)) { QccErrorAddMessage("(QccWAVSubbandPyramidAssembleFromDat): Error calling QccWAVSubbandPyramidAssembleFromImageComponent()"); goto Error; } return_value = 0; goto Return; Error: return_value = 1; Return: if (subband_images != NULL) { for (subband = 0; subband < num_subbands; subband++) QccIMGImageComponentFree(&(subband_images[subband])); QccFree(subband_images); } return(return_value);}int QccWAVSubbandPyramidRasterScan(const QccWAVSubbandPyramid *subband_pyramid, QccVector scanned_coefficients){ int num_subbands; int subband; int subband_num_rows, subband_num_cols; int subband_row_offset, subband_col_offset; int row, col; int coefficient; if (subband_pyramid == NULL) return(0); if (scanned_coefficients == NULL) return(0); num_subbands = QccWAVSubbandPyramidNumLevelsToNumSubbands(subband_pyramid->num_levels); coefficient = 0; for (subband = 0; subband < num_subbands; subband++) { if (QccWAVSubbandPyramidSubbandSize(subband_pyramid, subband, &subband_num_rows, &subband_num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramidRasterScan): Error calling QccWAVSubbandPyramidSubbandSize()"); return(1); } if (QccWAVSubbandPyramidSubbandOffsets(subband_pyramid, subband, &subband_row_offset, &subband_col_offset)) { QccErrorAddMessage("(QccWAVSubbandPyramidRasterScan): Error calling QccWAVSubbandPyramidSubbandOffsets()"); return(1); } for (row = 0; row < subband_num_rows; row++) for (col = 0; col < subband_num_cols; col++) scanned_coefficients[coefficient++] = subband_pyramid->matrix [subband_row_offset + row] [subband_col_offset + col]; } return(0);}int QccWAVSubbandPyramidInverseRasterScan(QccWAVSubbandPyramid *subband_pyramid, const QccVector scanned_coefficients){ int num_subbands; int subband; int subband_num_rows, subband_num_cols; int subband_row_offset, subband_col_offset; int row, col; int coefficient; if (subband_pyramid == NULL) return(0); if (scanned_coefficients == NULL) return(0); num_subbands = QccWAVSubbandPyramidNumLevelsToNumSubbands(subband_pyramid->num_levels); coefficient = 0; for (subband = 0; subband < num_subbands; subband++) { if (QccWAVSubbandPyramidSubbandSize(subband_pyramid, subband, &subband_num_rows, &subband_num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramidInverseRasterScan): Error calling QccWAVSubbandPyramidSubbandSize()"); return(1); } if (QccWAVSubbandPyramidSubbandOffsets(subband_pyramid, subband, &subband_row_offset, &subband_col_offset)) { QccErrorAddMessage("(QccWAVSubbandPyramidInverseRasterScan): Error calling QccWAVSubbandPyramidSubbandOffsets()"); return(1); } for (row = 0; row < subband_num_rows; row++) for (col = 0; col < subband_num_cols; col++) subband_pyramid->matrix [subband_row_offset + row] [subband_col_offset + col] = scanned_coefficients[coefficient++]; } return(0);}int QccWAVSubbandPyramidDWT(QccWAVSubbandPyramid *subband_pyramid, int num_levels, const QccWAVWavelet *wavelet){ int return_value; if (subband_pyramid == NULL) return(0); if (wavelet == NULL) return(0); if (subband_pyramid->num_levels != 0) { QccErrorAddMessage("(QccWAVSubbandPyramidDWT): Subband pyramid is already decomposed"); goto Error; } subband_pyramid->num_levels = num_levels; if (QccWAVWaveletDWT2D(subband_pyramid->matrix, subband_pyramid->num_rows, subband_pyramid->num_cols, subband_pyramid->origin_row, subband_pyramid->origin_col, subband_pyramid->subsample_pattern_row, subband_pyramid->subsample_pattern_col, num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramidDWT): Error calling QccWAVWaveletDWT2D()"); goto Error; } return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramidInverseDWT(QccWAVSubbandPyramid *subband_pyramid, const QccWAVWavelet *wavelet){ int return_value; if (subband_pyramid == NULL) return(0); if (wavelet == NULL) return(0); if (subband_pyramid->num_levels <= 0) return(0); if (QccWAVWaveletInverseDWT2D(subband_pyramid->matrix, subband_pyramid->num_rows, subband_pyramid->num_cols, subband_pyramid->origin_row, subband_pyramid->origin_col, subband_pyramid->subsample_pattern_row, subband_pyramid->subsample_pattern_col, subband_pyramid->num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramidInverseDWT): Error calling QccWAVWaveletDWT2D()"); goto Error; } subband_pyramid->num_levels = 0; return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramidShapeAdaptiveDWT(QccWAVSubbandPyramid *subband_pyramid, QccWAVSubbandPyramid *mask, int num_levels, const QccWAVWavelet *wavelet){ int return_value; if (subband_pyramid == NULL) return(0); if (mask == NULL) return(0); if (wavelet == NULL) return(0); if (subband_pyramid->num_levels != 0) { QccErrorAddMessage("(QccWAVSubbandPyramidShapeAdaptiveDWT): Subband pyramid is already decomposed"); goto Error; } if ((subband_pyramid->num_rows != mask->num_rows) || (subband_pyramid->num_cols != mask->num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramidShapeAdaptiveDWT): Subband pyramid and mask must have same number of rows and columns"); goto Error; } if (QccWAVWaveletShapeAdaptiveDWT2D(subband_pyramid->matrix, mask->matrix, subband_pyramid->num_rows, subband_pyramid->num_cols, num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramidShapeAdaptiveDWT): Error calling QccWAVWaveletShapeAdaptiveDWT2D()"); goto Error; } subband_pyramid->num_levels = num_levels; mask->num_levels = num_levels; return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramidInverseShapeAdaptiveDWT(QccWAVSubbandPyramid *subband_pyramid, QccWAVSubbandPyramid *mask, const QccWAVWavelet *wavelet){ int return_value; if (subband_pyramid == NULL) return(0); if (mask == NULL) return(0); if (wavelet == NULL) return(0); if (subband_pyramid->num_levels <= 0) return(0); if ((subband_pyramid->num_rows != mask->num_rows) || (subband_pyramid->num_cols != mask->num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramidInverseShapeAdaptiveDWT): Subband pyramid and mask must have same number of rows and columns"); goto Error; } if (subband_pyramid->num_levels != mask->num_levels) { QccErrorAddMessage("(QccWAVSubbandPyramidInverseShapeAdaptiveDWT): Subband pyramid and mask must have same number of levels of decomposition"); goto Error; } if (QccWAVWaveletInverseShapeAdaptiveDWT2D(subband_pyramid->matrix, mask->matrix, subband_pyramid->num_rows, subband_pyramid->num_cols, subband_pyramid->num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramidInverseShapeAdaptiveDWT): Error calling QccWAVWaveletInverseShapeAdaptiveDWT2D()"); goto Error; } subband_pyramid->num_levels = 0; mask->num_levels = 0; return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramidRedundantDWTSubsample(const QccMatrix *input_matrices, QccWAVSubbandPyramid *subband_pyramid, const QccWAVWavelet *wavelet){ if (input_matrices == NULL) return(0); if (subband_pyramid == NULL) return(0); if (subband_pyramid->matrix == NULL) { QccErrorAddMessage("(QccWAVSubbandPyramidRedundantDWTSubsample): Subband pyramid is not allocated"); return(1); } if ((subband_pyramid->num_rows <= 0) || (subband_pyramid->num_cols <= 0) || (subband_pyramid->num_levels < 0)) { QccErrorAddMessage("(QccWAVSubbandPyramidRedundantDWTSubsample): Subband pyramid is not setup properly"); return(1); } if (QccWAVWaveletRedundantDWT2DSubsample(input_matrices, subband_pyramid->matrix, subband_pyramid->num_rows, subband_pyramid->num_cols, subband_pyramid->num_levels, subband_pyramid->subsample_pattern_row, subband_pyramid->subsample_pattern_col, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramidRedundantDWTSubsample): Error calling QccWAVWaveletRedundantDWT2DSubsample()"); return(1); } return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -