📄 subband_pyramid3d.c
字号:
break; case QCCWAVSUBBANDPYRAMID3D_PACKET: subband_pyramid->transform_type = QCCWAVSUBBANDPYRAMID3D_PACKET; subband_pyramid->spatial_num_levels = spatial_num_levels; subband_pyramid->temporal_num_levels = temporal_num_levels; if (QccWAVWaveletPacketDWT3D(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, temporal_num_levels, spatial_num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DDWT): Error calling QccWAVWaveletPacketDWT3D()"); goto Error; } break; default: QccErrorAddMessage("(QccWAVSubbandPyramid3DDWT): Unrecognized transform type"); goto Error; } return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramid3DInverseDWT(QccWAVSubbandPyramid3D *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 QCCWAVSUBBANDPYRAMID3D_DYADIC: if (QccWAVWaveletInverseDyadicDWT3D(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("(QccWAVSubbandPyramid3DInverseDWT): Error calling QccWAVWaveletDyadicInverseDWT3D()"); goto Error; } break; case QCCWAVSUBBANDPYRAMID3D_PACKET: if (QccWAVWaveletInversePacketDWT3D(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("(QccWAVSubbandPyramid3DInverseDWT): Error calling QccWAVWaveletPacketInverseDWT3D()"); goto Error; } break; default: QccErrorAddMessage("(QccWAVSubbandPyramid3DInverseDWT): 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 QccWAVSubbandPyramid3DShapeAdaptiveDWT(QccWAVSubbandPyramid3D *subband_pyramid, QccWAVSubbandPyramid3D *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("(QccWAVSubbandPyramid3DShapeAdaptiveDWT): 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("(QccWAVSubbandPyramid3DShapeAdaptiveDWT): Subband pyramid and mask must have same number of frames, rows, and columns"); goto Error; } switch (transform_type) { case QCCWAVSUBBANDPYRAMID3D_DYADIC: subband_pyramid->transform_type = QCCWAVSUBBANDPYRAMID3D_DYADIC; mask->transform_type = QCCWAVSUBBANDPYRAMID3D_DYADIC; if (spatial_num_levels != temporal_num_levels) { QccErrorAddMessage("(QccWAVSubbandPyramid3DDWT): 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 (QccWAVWaveletShapeAdaptiveDyadicDWT3D(subband_pyramid->volume, mask->volume, subband_pyramid->num_frames, subband_pyramid->num_rows, subband_pyramid->num_cols, spatial_num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DShapeAdaptiveDWT): Error calling QccWAVWaveletShapeAdaptiveDyadicDWT3D()"); goto Error; } break; case QCCWAVSUBBANDPYRAMID3D_PACKET: subband_pyramid->transform_type = QCCWAVSUBBANDPYRAMID3D_PACKET; subband_pyramid->spatial_num_levels = spatial_num_levels; subband_pyramid->temporal_num_levels = temporal_num_levels; mask->transform_type = QCCWAVSUBBANDPYRAMID3D_PACKET; mask->spatial_num_levels = spatial_num_levels; mask->temporal_num_levels = temporal_num_levels; if (QccWAVWaveletShapeAdaptivePacketDWT3D(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("(QccWAVSubbandPyramid3DShapeAdaptiveDWT): Error calling QccWAVWaveletShapeAdaptivePacketDWT3D()"); goto Error; } break; default: QccErrorAddMessage("(QccWAVSubbandPyramid3DShapeAdaptiveDWT): Unrecognized transform type"); goto Error; } return_value = 0; goto Return; Error: return_value = 1; Return: return(return_value);}int QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT(QccWAVSubbandPyramid3D *subband_pyramid, QccWAVSubbandPyramid3D *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("(QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT): 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("(QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT): Subband pyramid and mask must have same number of levels of decomposition"); goto Error; } switch (subband_pyramid->transform_type) { case QCCWAVSUBBANDPYRAMID3D_DYADIC: if (QccWAVWaveletInverseShapeAdaptiveDyadicDWT3D(subband_pyramid->volume, mask->volume, subband_pyramid->num_frames, subband_pyramid->num_rows, subband_pyramid->num_cols, subband_pyramid->spatial_num_levels, wavelet)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT): Error calling QccWAVWaveletInverseShapeAdaptiveDyadicDWT3D)"); goto Error; } break; case QCCWAVSUBBANDPYRAMID3D_PACKET: if (QccWAVWaveletInverseShapeAdaptivePacketDWT3D(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("(QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT): Error calling QccWAVWaveletInverseShapeAdaptiveDyadicDWT3D)"); goto Error; } break; default: QccErrorAddMessage("(QccWAVSubbandPyramid3DInverseShapeAdaptiveDWT): 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 QccWAVSubbandPyramid3DPacketToDyadic(QccWAVSubbandPyramid3D *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 != QCCWAVSUBBANDPYRAMID3D_PACKET) { QccErrorAddMessage("(QccWAVSubbandPyramid3DPacketToDyadic): Subband pyramid is not a packet decomposition"); goto Error; } if (QccWAVWaveletCreate(&lazy_wavelet_transform, "LWT.lft", "symmetric")) { QccErrorAddMessage("(QccWAVSubbandPyramid3DPacketToDyadic): Error calling QccWAVWaveletCreate()"); goto Error; } if (QccWAVSubbandPyramid3DInverseDWT(subband_pyramid, &lazy_wavelet_transform)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DPacketToDyadic): Error calling QccWAVSubbandPyramid3DInverseDWT()"); goto Error; } if (QccWAVSubbandPyramid3DDWT(subband_pyramid, QCCWAVSUBBANDPYRAMID3D_DYADIC, num_levels, num_levels, &lazy_wavelet_transform)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DPacketToDyadic): Error calling QccWAVSubbandPyramid3DDWT()"); goto Error; } return_value = 0; goto Return; Error: return_value = 1; Return: QccWAVWaveletFree(&lazy_wavelet_transform); return(return_value);}int QccWAVSubbandPyramid3DDyadicToPacket(QccWAVSubbandPyramid3D *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 != QCCWAVSUBBANDPYRAMID3D_DYADIC) { QccErrorAddMessage("(QccWAVSubbandPyramid3DDyadicToPacket): Subband pyramid is not a dyadic decomposition"); goto Error; } if (QccWAVWaveletCreate(&lazy_wavelet_transform, "LWT.lft", "symmetric")) { QccErrorAddMessage("(QccWAVSubbandPyramid3DDyadicToPacket): Error calling QccWAVWaveletCreate()"); goto Error; } if (QccWAVSubbandPyramid3DInverseDWT(subband_pyramid, &lazy_wavelet_transform)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DDyadicToPacket): Error calling QccWAVSubbandPyramid3DInverseDWT()"); goto Error; } if (QccWAVSubbandPyramid3DDWT(subband_pyramid, QCCWAVSUBBANDPYRAMID3D_PACKET, temporal_num_levels, spatial_num_levels, &lazy_wavelet_transform)) { QccErrorAddMessage("(QccWAVSubbandPyramid3DDyadicToPacket): Error calling QccWAVSubbandPyramid3DDWT()"); 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 + -