lazy_wavlet.c

来自「spiht的压缩解压缩c编写的」· C语言 代码 · 共 93 行

C
93
字号
#include "spiht.h"
#include "spihtdecode.h"

int QccWAVWaveletLWT(const QccVector input_signal,
                     QccVector output_signal,
                     int signal_length,
                     int signal_origin,
                     int subsample_pattern)
{
  int index;
  int midpoint;
  int phase = (signal_origin % 2) ^ (subsample_pattern & 1);

  if (input_signal == NULL)
    return(0);
  if (output_signal == NULL)
    return(0);

  if (signal_length < 2)
    {
      QccVectorCopy(output_signal, input_signal, signal_length);
      return(0);
    }

  midpoint = 
    QccWAVWaveletDWTSubbandLength(signal_length, 1, 0,
                                  signal_origin, subsample_pattern);

  if (!phase)
    {
      for (index = 0; index < signal_length; index += 2)
        output_signal[index >> 1] = input_signal[index];
      
      for (index = 1; index < signal_length; index += 2)
        output_signal[midpoint + (index >> 1)] = input_signal[index];
    }
  else
    {
      for (index = 1; index < signal_length; index += 2)
        output_signal[index >> 1] = input_signal[index];
      
      for (index = 0; index < signal_length; index += 2)
        output_signal[midpoint + (index >> 1)] = input_signal[index];
    }

  return(0);
}

int QccWAVWaveletInverseLWT(const QccVector input_signal,
                            QccVector output_signal,
                            int signal_length,
                            int signal_origin,
                            int subsample_pattern)
{
  int index;
  int midpoint;
  int phase = (signal_origin % 2) ^ (subsample_pattern & 1);

  if (input_signal == NULL)
    return(0);
  if (output_signal == NULL)
    return(0);

  if (signal_length < 2)
    {
      QccVectorCopy(output_signal, input_signal, signal_length);
      return(0);
    }

  midpoint = 
    QccWAVWaveletDWTSubbandLength(signal_length, 1, 0,
                                  signal_origin, subsample_pattern);

  if (!phase)
    {
      for (index = 0; index < signal_length; index += 2)
        output_signal[index] = input_signal[index >> 1];
      
      for (index = 1; index < signal_length; index += 2)
        output_signal[index] = input_signal[midpoint + (index >> 1)];
    }
  else
    {
      for (index = 1; index < signal_length; index += 2)
        output_signal[index] = input_signal[index >> 1];
      
      for (index = 0; index < signal_length; index += 2)
        output_signal[index] = input_signal[midpoint + (index >> 1)];
    }

  return(0);
}

⌨️ 快捷键说明

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