📄 subband_pyramid3d_int.c
字号:
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, temporal_num_levels, spatial_num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntDWT): Error calling QccWAVWaveletPacketDWT3DInt()"); goto Error; } break; default: QccErrorAddMessage("(QccWAVSubbandPyramid3DIntDWT): Unrecognized transform type"); goto Error; } return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramid3DIntInverseDWT(QccWAVSubbandPyramid3DInt *subband_pyramid, const QccWAVWavelet *wavelet){ int return_value; if (subband_pyramid == NULL) return(0); if (wavelet == NULL) return(0); if ((subband_pyramid->spatial_num_levels <= 0) && (subband_pyramid->temporal_num_levels <= 0)) return(0); switch (subband_pyramid->transform_type) { case QCCWAVSUBBANDPYRAMID3DINT_DYADIC: if (QccWAVWaveletInverseDyadicDWT3DInt(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, subband_pyramid->spatial_num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntInverseDWT): Error calling QccWAVWaveletDyadicInverseDWT3DInt()"); goto Error; } break; case QCCWAVSUBBANDPYRAMID3DINT_PACKET: if (QccWAVWaveletInversePacketDWT3DInt(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, subband_pyramid->temporal_num_levels, subband_pyramid->spatial_num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntInverseDWT): Error calling QccWAVWaveletPacketInverseDWT3DInt()"); goto Error; } break; default: QccErrorAddMessage("(QccWAVSubbandPyramid3DIntInverseDWT): Unrecognized transform type"); goto Error; } subband_pyramid->spatial_num_levels = 0; subband_pyramid->temporal_num_levels = 0; return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramid3DIntShapeAdaptiveDWT(QccWAVSubbandPyramid3DInt *subband_pyramid, QccWAVSubbandPyramid3DInt *mask, int transform_type, int temporal_num_levels, int spatial_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->spatial_num_levels || subband_pyramid->temporal_num_levels) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntShapeAdaptiveDWT): Subband pyramid is already decomposed"); goto Error; } if ((subband_pyramid->num_frames != mask->num_frames) || (subband_pyramid->num_rows != mask->num_rows) || (subband_pyramid->num_cols != mask->num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntShapeAdaptiveDWT): Subband pyramid and mask must have same number of frames, rows, and columns"); goto Error; } switch (transform_type) { case QCCWAVSUBBANDPYRAMID3DINT_DYADIC: subband_pyramid->transform_type = QCCWAVSUBBANDPYRAMID3DINT_DYADIC; mask->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; mask->spatial_num_levels = mask->temporal_num_levels = spatial_num_levels; if (QccWAVWaveletShapeAdaptiveDyadicDWT3DInt(subband_pyramid->volume, mask->volume, subband_pyramid->num_frames, subband_pyramid->num_rows, subband_pyramid->num_cols, spatial_num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntShapeAdaptiveDWT): Error calling QccWAVWaveletShapeAdaptiveDyadicDWT3DInt()"); 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; mask->transform_type = QCCWAVSUBBANDPYRAMID3DINT_PACKET; mask->spatial_num_levels = spatial_num_levels; mask->temporal_num_levels = temporal_num_levels; if (QccWAVWaveletShapeAdaptivePacketDWT3DInt(subband_pyramid->volume, mask->volume, subband_pyramid->num_frames, subband_pyramid->num_rows, subband_pyramid->num_cols, temporal_num_levels, spatial_num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntShapeAdaptiveDWT): Error calling QccWAVWaveletShapeAdaptivePacketDWT3DInt()"); goto Error; } break; default: QccErrorAddMessage("(QccWAVSubbandPyramid3DIntShapeAdaptiveDWT): Unrecognized transform type"); goto Error; } return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramid3DIntInverseShapeAdaptiveDWT(QccWAVSubbandPyramid3DInt *subband_pyramid, QccWAVSubbandPyramid3DInt *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->spatial_num_levels <= 0) && (subband_pyramid->temporal_num_levels <= 0)) return(0); if ((subband_pyramid->num_frames != mask->num_frames) || (subband_pyramid->num_rows != mask->num_rows) || (subband_pyramid->num_cols != mask->num_cols)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntInverseShapeAdaptiveDWT): Subband pyramid and mask must have same number of frames, rows, and columns"); goto Error; } if ((subband_pyramid->spatial_num_levels != mask->spatial_num_levels) || (subband_pyramid->temporal_num_levels != mask->temporal_num_levels)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntInverseShapeAdaptiveDWT): Subband pyramid and mask must have same number of levels of decomposition"); goto Error; } switch (subband_pyramid->transform_type) { case QCCWAVSUBBANDPYRAMID3DINT_DYADIC: if (QccWAVWaveletInverseShapeAdaptiveDyadicDWT3DInt(subband_pyramid->volume, mask->volume, subband_pyramid->num_frames, subband_pyramid->num_rows, subband_pyramid->num_cols, subband_pyramid->spatial_num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntInverseShapeAdaptiveDWT): Error calling QccWAVWaveletInverseShapeAdaptiveDyadicDWT3DInt)"); goto Error; } break; case QCCWAVSUBBANDPYRAMID3DINT_PACKET: if (QccWAVWaveletInverseShapeAdaptivePacketDWT3DInt(subband_pyramid->volume, mask->volume, subband_pyramid->num_frames, subband_pyramid->num_rows, subband_pyramid->num_cols, subband_pyramid->temporal_num_levels, subband_pyramid->spatial_num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntInverseShapeAdaptiveDWT): Error calling QccWAVWaveletInverseShapeAdaptiveDyadicDWT3DInt)"); goto Error; } break; default: QccErrorAddMessage("(QccWAVSubbandPyramid3DIntInverseShapeAdaptiveDWT): Unrecognized transform type"); goto Error; } subband_pyramid->spatial_num_levels = 0; subband_pyramid->temporal_num_levels = 0; mask->spatial_num_levels = 0; mask->temporal_num_levels = 0; return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramid3DIntPacketToDyadic(QccWAVSubbandPyramid3DInt *subband_pyramid, int num_levels){ int return_value; QccWAVWavelet lazy_wavelet_transform; QccWAVWaveletInitialize(&lazy_wavelet_transform); if (subband_pyramid == NULL) return(0); if (subband_pyramid->volume == NULL) return(0); if (subband_pyramid->transform_type != QCCWAVSUBBANDPYRAMID3DINT_PACKET) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntPacketToDyadic): Subband pyramid is not a packet decomposition"); goto Error; } if (QccWAVWaveletCreate(&lazy_wavelet_transform, "LWT.int.lft", "symmetric")) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntPacketToDyadic): Error calling QccWAVWaveletCreate()"); goto Error; } if (QccWAVSubbandPyramid3DIntInverseDWT(subband_pyramid, &lazy_wavelet_transform)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntPacketToDyadic): Error calling QccWAVSubbandPyramid3DIntInverseDWT()"); goto Error; } if (QccWAVSubbandPyramid3DIntDWT(subband_pyramid, QCCWAVSUBBANDPYRAMID3DINT_DYADIC, num_levels, num_levels, &lazy_wavelet_transform)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntPacketToDyadic): Error calling QccWAVSubbandPyramid3DIntDWT()"); goto Error; } return_value = 0; goto Return; Error: return_value = 1; Return: QccWAVWaveletFree(&lazy_wavelet_transform); return(return_value);}int QccWAVSubbandPyramid3DIntDyadicToPacket(QccWAVSubbandPyramid3DInt *subband_pyramid, int temporal_num_levels, int spatial_num_levels){ int return_value; QccWAVWavelet lazy_wavelet_transform; QccWAVWaveletInitialize(&lazy_wavelet_transform); if (subband_pyramid == NULL) return(0); if (subband_pyramid->volume == NULL) return(0); if (subband_pyramid->transform_type != QCCWAVSUBBANDPYRAMID3DINT_DYADIC) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntDyadicToPacket): Subband pyramid is not a dyadic decomposition"); goto Error; } if (QccWAVWaveletCreate(&lazy_wavelet_transform, "LWT.int.lft", "symmetric")) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntDyadicToPacket): Error calling QccWAVWaveletCreate()"); goto Error; } if (QccWAVSubbandPyramid3DIntInverseDWT(subband_pyramid, &lazy_wavelet_transform)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntDyadicToPacket): Error calling QccWAVSubbandPyramid3DIntInverseDWT()"); goto Error; } if (QccWAVSubbandPyramid3DIntDWT(subband_pyramid, QCCWAVSUBBANDPYRAMID3DINT_PACKET, temporal_num_levels, spatial_num_levels, &lazy_wavelet_transform)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DIntDyadicToPacket): Error calling QccWAVSubbandPyramid3DIntDWT()"); goto Error; } return_value = 0; goto Return; Error: return_value = 1; Return: QccWAVWaveletFree(&lazy_wavelet_transform); return(return_value);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -