📄 subband_pyramid_int.c
字号:
for (row = 0; row < subband_pyramid->num_rows; row++) for (col = 0; col < subband_pyramid->num_cols; col++) if (QccFileWriteInt(outfile, subband_pyramid->matrix[row][col])) { QccErrorAddMessage("(QccWAVSubbandPyramidIntWrite): Error calling QccFileWriteInt()"); return(1); } QccFileClose(outfile); return(0);}int QccWAVSubbandPyramidIntCopy(QccWAVSubbandPyramidInt *subband_pyramid1, const QccWAVSubbandPyramidInt *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)) { QccWAVSubbandPyramidIntFree(subband_pyramid1); subband_pyramid1->num_rows = subband_pyramid2->num_rows; subband_pyramid1->num_cols = subband_pyramid2->num_cols; if (QccWAVSubbandPyramidIntAlloc(subband_pyramid1)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntCopy): Error calling QccWAVSubbandPyramidIntAlloc()"); return(1); } } subband_pyramid1->num_levels = subband_pyramid2->num_levels; subband_pyramid1->origin_row = subband_pyramid2->origin_row; subband_pyramid1->origin_col = subband_pyramid2->origin_col; subband_pyramid1->subsample_pattern_row = subband_pyramid2->subsample_pattern_row; subband_pyramid1->subsample_pattern_col = subband_pyramid2->subsample_pattern_col; if (QccMatrixIntCopy(subband_pyramid1->matrix, subband_pyramid2->matrix, subband_pyramid1->num_rows, subband_pyramid1->num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntCopy): Error calling QccMatrixIntCopy()"); return(1); } return(0);}int QccWAVSubbandPyramidIntZeroSubband(QccWAVSubbandPyramidInt *subband_pyramid, int subband){ int num_subbands; int subband_num_rows; int subband_num_cols; int subband_row; int subband_col; int row, col; if (subband_pyramid == NULL) return(0); if (subband_pyramid->matrix == NULL) return(0); if (subband < 0) return(0); num_subbands = QccWAVSubbandPyramidIntNumLevelsToNumSubbands(subband_pyramid->num_levels); if (subband > num_subbands) { QccErrorAddMessage("(QccWAVSubbandPyramidIntZeroSubband): specified subband is large for given subband pyramid"); return(1); } if (QccWAVSubbandPyramidIntSubbandSize(subband_pyramid, subband, &subband_num_rows, &subband_num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntZeroSubband): Error calling QccWAVSubbandPyramidIntSubbandSize()"); return(1); } if (QccWAVSubbandPyramidIntSubbandOffsets(subband_pyramid, subband, &subband_row, &subband_col)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntZeroSubband): Error calling QccWAVSubbandPyramidIntSubbandOffsets()"); return(1); } for (row = subband_row; row < subband_row + subband_num_rows; row++) for (col = subband_col; col < subband_col + subband_num_cols; col++) subband_pyramid->matrix[row][col] = 0; return(0);}int QccWAVSubbandPyramidIntSubtractMean(QccWAVSubbandPyramidInt *subband_pyramid, int *mean){ int subband_row, subband_col; int subband_num_rows, subband_num_cols; int mean1; if (subband_pyramid == NULL) return(0); if (subband_pyramid->matrix == NULL) return(0); if (QccWAVSubbandPyramidIntSubbandSize(subband_pyramid, 0, &subband_num_rows, &subband_num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntSubtractMean): Error calling QccWAVSubbandPyramidIntSubbandSize()"); return(1); } mean1 = (int)rint(QccMatrixIntMean(subband_pyramid->matrix, subband_num_rows, subband_num_cols)); for (subband_row = 0; subband_row < subband_num_rows; subband_row++) for (subband_col = 0; subband_col < subband_num_cols; subband_col++) subband_pyramid->matrix[subband_row][subband_col] -= mean1; if (mean != NULL) *mean = mean1; return(0);}int QccWAVSubbandPyramidIntAddMean(QccWAVSubbandPyramidInt *subband_pyramid, int mean){ int subband_row, subband_col; int subband_num_rows, subband_num_cols; if (subband_pyramid == NULL) return(0); if (subband_pyramid->matrix == NULL) return(0); if (subband_pyramid->num_levels != 0) { QccErrorAddMessage("(QccWAVSubbandPyramidIntAddMean): Subband-pyramid number of levels is not zero"); return(1); } if (QccWAVSubbandPyramidIntSubbandSize(subband_pyramid, 0, &subband_num_rows, &subband_num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntAddMean): Error calling QccWAVSubbandPyramidIntSubbandSize()"); return(1); } for (subband_row = 0; subband_row < subband_num_rows; subband_row++) for (subband_col = 0; subband_col < subband_num_cols; subband_col++) subband_pyramid->matrix[subband_row][subband_col] += mean; return(0);}int QccWAVSubbandPyramidIntRasterScan(const QccWAVSubbandPyramidInt *subband_pyramid, QccVectorInt 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 = QccWAVSubbandPyramidIntNumLevelsToNumSubbands(subband_pyramid->num_levels); coefficient = 0; for (subband = 0; subband < num_subbands; subband++) { if (QccWAVSubbandPyramidIntSubbandSize(subband_pyramid, subband, &subband_num_rows, &subband_num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntRasterScan): Error calling QccWAVSubbandPyramidIntSubbandSize()"); return(1); } if (QccWAVSubbandPyramidIntSubbandOffsets(subband_pyramid, subband, &subband_row_offset, &subband_col_offset)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntRasterScan): Error calling QccWAVSubbandPyramidIntSubbandOffsets()"); 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 QccWAVSubbandPyramidIntInverseRasterScan(QccWAVSubbandPyramidInt *subband_pyramid, const QccVectorInt 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 = QccWAVSubbandPyramidIntNumLevelsToNumSubbands(subband_pyramid->num_levels); coefficient = 0; for (subband = 0; subband < num_subbands; subband++) { if (QccWAVSubbandPyramidIntSubbandSize(subband_pyramid, subband, &subband_num_rows, &subband_num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntInverseRasterScan): Error calling QccWAVSubbandPyramidIntSubbandSize()"); return(1); } if (QccWAVSubbandPyramidIntSubbandOffsets(subband_pyramid, subband, &subband_row_offset, &subband_col_offset)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntInverseRasterScan): Error calling QccWAVSubbandPyramidIntSubbandOffsets()"); 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 QccWAVSubbandPyramidIntDWT(QccWAVSubbandPyramidInt *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("(QccWAVSubbandPyramidIntDWT): Subband pyramid is already decomposed"); goto Error; } subband_pyramid->num_levels = num_levels; if (QccWAVWaveletDWT2DInt(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("(QccWAVSubbandPyramidIntDWT): Error calling QccWAVWaveletDWT2DInt()"); goto Error; } return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramidIntInverseDWT(QccWAVSubbandPyramidInt *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 (QccWAVWaveletInverseDWT2DInt(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("(QccWAVSubbandPyramidIntInverseDWT): Error calling QccWAVWaveletDWT2DInt()"); goto Error; } subband_pyramid->num_levels = 0; return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramidIntShapeAdaptiveDWT(QccWAVSubbandPyramidInt *subband_pyramid, QccWAVSubbandPyramidInt *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("(QccWAVSubbandPyramidIntShapeAdaptiveDWT): Subband pyramid is already decomposed"); goto Error; } if ((subband_pyramid->num_rows != mask->num_rows) || (subband_pyramid->num_cols != mask->num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntShapeAdaptiveDWT): Subband pyramid and mask must have same number of rows and columns"); goto Error; } if (QccWAVWaveletShapeAdaptiveDWT2DInt(subband_pyramid->matrix, mask->matrix, subband_pyramid->num_rows, subband_pyramid->num_cols, num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntShapeAdaptiveDWT): Error calling QccWAVWaveletShapeAdaptiveDWT2DInt()"); 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 QccWAVSubbandPyramidIntInverseShapeAdaptiveDWT(QccWAVSubbandPyramidInt *subband_pyramid, QccWAVSubbandPyramidInt *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("(QccWAVSubbandPyramidIntInverseShapeAdaptiveDWT): Subband pyramid and mask must have same number of rows and columns"); goto Error; } if (subband_pyramid->num_levels != mask->num_levels) { QccErrorAddMessage("(QccWAVSubbandPyramidIntInverseShapeAdaptiveDWT): Subband pyramid and mask must have same number of levels of decomposition"); goto Error; } if (QccWAVWaveletInverseShapeAdaptiveDWT2DInt(subband_pyramid->matrix, mask->matrix, subband_pyramid->num_rows, subband_pyramid->num_cols, subband_pyramid->num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramidIntInverseShapeAdaptiveDWT): Error calling QccWAVWaveletInverseShapeAdaptiveDWT2DInt()"); goto Error; } subband_pyramid->num_levels = 0; mask->num_levels = 0; return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -