亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tce.c

?? QccPack implementation in C
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*
 * 
 * QccPack: Quantization, compression, and coding libraries
 * Copyright (C) 1997-2005  James E. Fowler
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 * 
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
 * MA 02139, USA.
 * 
 */

/* 
 *
 * Written by
 *
 * Chao Tian, at Cornell University, 2003 
 *
 */


#include "libQccPack.h"


#define QCCTCE_BOUNDARY_VALUE (1e-6)

//definition used in context information
#define QCCTCE_Z 0 //zero, AKA, insignificant
#define QCCTCE_NZN_NEW 2 //non-zero-neighbor
#define QCCTCE_S 3 //significant
#define QCCTCE_S_NEW 4
#define QCCTCE_NZN 5

// more refinement can be made if direction of Tarp filter is considered
// but the improvement is minor
#define QCCWAVTCE_ALPHA 0.4 
#define QCCWAVTCE_ALPHA_HIGH 0.4
#define QCCWAVTCE_ALPHA_LOW 0.4

//ugly fix, use 1-D IIR filter to provide PMF estimate
#define QCCWAVTCE_ALPHA_1D 0.995 
#define QCCWAVTCE_ALPHA_1D_O 0.005

// this should be 0.5, however, 0.3 seems to work a little better (minor)
// reason unknown
#define QCCWAVTCE_REFINE_HOLDER 0.3 

// threshold for cross-scale prediction...
#define QCCWAVTCE_PREDICT_THRESHOLD 0.05  
//weight factor for cross-scale and current scale
#define QCCWAVTCE_CURRENT_SCALE 0.7 
#define QCCWAVTCE_PARENT_SCALE 0.3


static int QccWAVtceUpdateModel(QccENTArithmeticModel *model, double prob)
{
  double probabilities[2]; 
  probabilities[1] = prob;
  probabilities[0] = 1 - probabilities[1];
  
  if (QccENTArithmeticSetModelProbabilities(model,probabilities,0))
    {
      QccErrorAddMessage("(QccWAVtceUpdateModel): Error calling QccENTArithmeticSetModelProbabilities()");
      return(1);
    } 
  return(0);
}


static int QccWAVtceEncodeDWT(QccWAVSubbandPyramid *image_subband_pyramid,
                              char **sign_array,
                              const QccIMGImageComponent *image,
                              int num_levels,
                              double *image_mean,
                              int *max_coefficient_bits,
                              double stepsize,
                              const QccWAVWavelet *wavelet)
{
  double coefficient_magnitude;
  double max_coefficient;
  int num_subbands,subband;
  int row, col;
  int subband_origin_row;
  int subband_origin_col;
  int subband_num_rows;
  int subband_num_cols;
  
  num_subbands =
    QccWAVSubbandPyramidNumLevelsToNumSubbands(num_levels);
  
  if (QccMatrixCopy(image_subband_pyramid->matrix,
                    image->image,
                    image->num_rows,
                    image->num_cols))
    {
      QccErrorAddMessage("(QccWAVtceEncodeDWT): Error calling QccMatrixCopy()");
      return(1);
    }
  
  if (QccWAVSubbandPyramidSubtractMean(image_subband_pyramid,
                                       image_mean,
                                       NULL))
    {
      QccErrorAddMessage("(QccWAVtceEncodeDWT): Error calling QccWAVSubbandPyramidSubtractMean()");
      return(1);
    }
  
  if (QccWAVSubbandPyramidDWT(image_subband_pyramid,
                              num_levels,
                              wavelet))
    {
      QccErrorAddMessage("(QccWAVtceEncodeDWT): Error calling QccWAVSubbandPyramidDWT()");
      return(1);
    }
  
  for (subband = 0; subband < num_subbands; subband++)
    {
      if (QccWAVSubbandPyramidSubbandSize(image_subband_pyramid,
                                          subband,
                                          &subband_num_rows,
                                          &subband_num_cols))
        {
          QccErrorAddMessage("(QccWAVtceEncodeDWT): Error calling QccWAVSubbandPyramidSubbandSize()");
          return(1);
        }

      if (QccWAVSubbandPyramidSubbandOffsets(image_subband_pyramid,
                                             subband,
                                             &subband_origin_row,
                                             &subband_origin_col))
        {
          QccErrorAddMessage("(QccWAVtceEncodeDWT): Error calling QccWAVSubbandPyramidSubbandOffsets()");
          return(1);
        }
      max_coefficient = -MAXFLOAT;
      
      if (stepsize > 0)
        for (row = 0; row < subband_num_rows; row++)
          for (col = 0; col < subband_num_cols; col++)
            {
              coefficient_magnitude =
                floor(fabs(image_subband_pyramid->matrix
                           [subband_origin_row + row]
                           [subband_origin_col + col] / stepsize));
              
              if (image_subband_pyramid->matrix
                  [subband_origin_row + row]
                  [subband_origin_col + col] < 0)
                sign_array
                  [subband_origin_row + row]
                  [subband_origin_col + col] = 1;
              else
                sign_array
                  [subband_origin_row + row]
                  [subband_origin_col + col] = 0;
              
              image_subband_pyramid->matrix
                [subband_origin_row + row]
                [subband_origin_col + col] = coefficient_magnitude;     
              
              if (coefficient_magnitude > max_coefficient)
                max_coefficient = coefficient_magnitude;     
            }
      else
        for (row = 0; row < subband_num_rows; row++)
          for (col = 0; col < subband_num_cols; col++)
            {
              coefficient_magnitude =
                fabs(image_subband_pyramid->matrix
                     [subband_origin_row + row]
                     [subband_origin_col + col]);
              
              if (image_subband_pyramid->matrix
                  [subband_origin_row + row]
                  [subband_origin_col + col] < 0)
                sign_array
                  [subband_origin_row + row]
                  [subband_origin_col + col] = 1;
              else
                sign_array
                  [subband_origin_row + row]
                  [subband_origin_col + col] = 0;
              
              image_subband_pyramid->matrix
                [subband_origin_row + row]
                [subband_origin_col + col] = coefficient_magnitude;     

              if (coefficient_magnitude > max_coefficient)
                max_coefficient = coefficient_magnitude;
            }

      max_coefficient_bits[subband] = 
        (int)floor(QccMathMax(0, QccMathLog2(max_coefficient + 0.0001)));  

    }   

  return(0);
}


static int QccWAVtceEncodeBitPlaneInfo(QccBitBuffer *output_buffer,
                                       int num_subbands,
                                       int *max_coefficient_bits)
{
  int subband;
  int num_zeros = 0;
  
  for (subband = 1; subband < num_subbands; subband++)
    {
      for (num_zeros = max_coefficient_bits[0] - max_coefficient_bits[subband];
           num_zeros > 0;
           num_zeros--)
        if (QccBitBufferPutBit(output_buffer, 0))
          return(1);

      if (QccBitBufferPutBit(output_buffer, 1))
        return(1);
    }

  return(0);
}


static int QccWAVtceDecodeBitPlaneInfo(QccBitBuffer *input_buffer,
                                       int num_subbands,
                                       int *max_bits,
                                       int max_coefficient_bits)
{
  int subband;
  int bit_value;
  
  max_bits[0] = max_coefficient_bits;
  
  for (subband = 1; subband < num_subbands; subband++)
    {
      max_bits[subband] = max_coefficient_bits;
      do
        {
          if (QccBitBufferGetBit(input_buffer,&bit_value))
            return(1);
          max_bits[subband]--;
        }
      while (bit_value == 0);
      max_bits[subband]++;  
    }
  
  return(0);
}


int QccWAVtceEncodeHeader(QccBitBuffer *output_buffer, 
                          int num_levels, 
                          int num_rows, int num_cols,
                          double image_mean,
                          double stepsize,
                          int max_coefficient_bits)
{
  int return_value;
  
  if (QccBitBufferPutChar(output_buffer, (unsigned char)num_levels))
    {
      QccErrorAddMessage("(QccWAVtceEncodeHeader): Error calling QccBitBufferPuChar()");
      goto Error;
    }
  
  if (QccBitBufferPutInt(output_buffer, num_rows))
    {
      QccErrorAddMessage("(QccWAVtceEncodeHeader): Error calling QccBitBufferPutInt()");
      goto Error;
    }
  
  if (QccBitBufferPutInt(output_buffer, num_cols))
    {
      QccErrorAddMessage("(QccWAVtceEncodeHeader): Error calling QccBitBufferPutInt()");
      goto Error;
    }
  
  if (QccBitBufferPutDouble(output_buffer, image_mean))
    {
      QccErrorAddMessage("(QccWAVtceEncodeHeader): Error calling QccBitBufferPutDouble()");
      goto Error;
    }
  
  if (QccBitBufferPutDouble(output_buffer, stepsize))
    {
      QccErrorAddMessage("(QccWAVtceEncodeHeader): Error calling QccBitBufferPutDouble()");
      goto Error;
    }
  
  if (QccBitBufferPutInt(output_buffer, max_coefficient_bits))
    {
      QccErrorAddMessage("(QccWAVtceEncodeHeader): Error calling QccBitBufferPutInt()");
      goto Error;
    }
  
  return_value = 0;
  goto Return;
 Error:
  return_value = 1;
 Return:
  return(return_value);
}


static int QccWAVtceRevEst(QccWAVSubbandPyramid *coefficients,
                           char **significance_map,
                           int subband,
                           double *subband_significance,
                           double **p)
{
  
  int return_value;
  int subband_origin_row;
  int subband_origin_col;
  int subband_num_rows;
  int subband_num_cols;
  int row, col;
  int current_row, current_col;
  double p1, p3;
  QccVector p2 = NULL;
  char *p_char;
  int v;  
  double filter_coef;
  double alpha_v, alpha_h;
  
  if (subband % 3==1)
    { 
      //LH horizental more important?
      alpha_h = QCCWAVTCE_ALPHA_HIGH;
      alpha_v = QCCWAVTCE_ALPHA_LOW;
    }
  else
    {
      if (subband % 3==2)
        {
          alpha_h = QCCWAVTCE_ALPHA_LOW;
          alpha_v = QCCWAVTCE_ALPHA_HIGH;   
        }
      else
        {
          alpha_h = QCCWAVTCE_ALPHA;
          alpha_v = QCCWAVTCE_ALPHA;
        }
    }
  
  filter_coef = (1 - alpha_h) * (1 - alpha_v) / (2*alpha_h + 2*alpha_v);
  
  subband_significance[subband] = 0.0;
  
  if (QccWAVSubbandPyramidSubbandSize(coefficients,
                                      subband,
                                      &subband_num_rows,
                                      &subband_num_cols))
    {
      QccErrorAddMessage("(QccWAVtceRevEst): Error calling QccWAVSubbandPyramidSubbandSize()");
      goto Error;
    }
  if (QccWAVSubbandPyramidSubbandOffsets(coefficients,
                                         subband,
                                         &subband_origin_row,
                                         &subband_origin_col))
    {
      QccErrorAddMessage("(QccWAVtceRevEst): Error calling QccWAVSubbandPyramidSubbandOffsets()");
      goto Error;
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久香蕉的特点| 91视频com| 久久综合资源网| 国产激情偷乱视频一区二区三区| 国产三级一区二区三区| va亚洲va日韩不卡在线观看| 亚洲免费观看高清完整版在线| 在线观看中文字幕不卡| 日本美女视频一区二区| 久久这里只有精品6| 成人网在线播放| 亚洲一卡二卡三卡四卡五卡| 欧美一区日本一区韩国一区| 久久激情五月婷婷| 欧美videofree性高清杂交| 美女视频免费一区| 国产日韩成人精品| 91麻豆精品秘密| 日韩精品午夜视频| 国产亚洲精品免费| 色婷婷久久久综合中文字幕| 日韩国产精品久久久| 国产女人18水真多18精品一级做| 色94色欧美sute亚洲线路一ni| 日韩成人精品在线| 国产亚洲午夜高清国产拍精品| 色猫猫国产区一区二在线视频| 免费人成黄页网站在线一区二区| 久久久精品天堂| 欧美性猛交xxxx黑人交| 国产精品一区二区在线观看不卡 | 欧美色涩在线第一页| 久久www免费人成看片高清| 日本一二三四高清不卡| 欧美日韩久久久久久| 国产毛片精品一区| 亚洲国产日日夜夜| 欧美国产一区二区| 91麻豆精品国产91久久久久 | 日韩精品一区二区三区swag| 成人黄色一级视频| 日本一不卡视频| 最新不卡av在线| 久久亚洲二区三区| 欧美日韩国产a| 99麻豆久久久国产精品免费优播| 久久99最新地址| 天天操天天色综合| 亚洲人一二三区| 国产亚洲欧美日韩俺去了| 欧美日韩国产在线播放网站| 东方aⅴ免费观看久久av| 美女任你摸久久| 亚洲精品菠萝久久久久久久| 国产亚洲欧洲997久久综合 | 欧美激情自拍偷拍| 日韩欧美一级特黄在线播放| 欧美主播一区二区三区美女| 99vv1com这只有精品| 国产盗摄精品一区二区三区在线 | 波多野结衣视频一区| 黑人巨大精品欧美黑白配亚洲| 青娱乐精品视频在线| 国产精品久久久久久久裸模 | 国产亚洲制服色| 日韩一区二区电影| 欧美精品18+| 欧美疯狂性受xxxxx喷水图片| 色av综合在线| 欧美伊人久久大香线蕉综合69| 97成人超碰视| 99精品视频在线免费观看| 波多野结衣在线aⅴ中文字幕不卡| 国产91综合网| 成人综合婷婷国产精品久久蜜臀| 国产米奇在线777精品观看| 国内外成人在线| 国内精品写真在线观看| 国产精品一区二区久久不卡| 国产伦精品一区二区三区免费迷 | 亚洲天堂中文字幕| 国产精品国产三级国产三级人妇 | 久久精品网站免费观看| 久久久久久久久99精品| 国产午夜亚洲精品不卡| 中文在线一区二区| 亚洲人被黑人高潮完整版| 亚洲视频网在线直播| 亚洲午夜久久久久久久久电影院 | 色欧美片视频在线观看 | 制服.丝袜.亚洲.中文.综合| 4438x成人网最大色成网站| 欧美大片免费久久精品三p| 欧美变态凌虐bdsm| 国产亚洲欧美日韩日本| 中文字幕在线不卡| 亚洲制服丝袜av| 日本中文字幕一区| 国内精品久久久久影院一蜜桃| 国产成人欧美日韩在线电影| www.欧美精品一二区| 欧美日韩卡一卡二| 久久夜色精品国产噜噜av| 国产欧美一区二区三区鸳鸯浴| 亚洲男女毛片无遮挡| 亚洲r级在线视频| 韩国一区二区在线观看| 成人精品鲁一区一区二区| 色88888久久久久久影院野外| 欧美精品色综合| 欧美mv日韩mv| 亚洲免费成人av| 麻豆视频观看网址久久| 成人黄页在线观看| 制服丝袜国产精品| 国产精品妹子av| 免费高清视频精品| av毛片久久久久**hd| 91精品国产综合久久精品app| 国产亚洲欧洲一区高清在线观看| 一区二区三区在线观看视频| 久久国产精品免费| 色狠狠综合天天综合综合| 欧美成人官网二区| 亚洲久本草在线中文字幕| 久久99精品久久久| 色狠狠色狠狠综合| 国产亚洲一区字幕| 婷婷夜色潮精品综合在线| 成人激情午夜影院| 精品国产一二三| 亚洲精品美腿丝袜| 国产成人午夜高潮毛片| 欧美日韩一区视频| 中文字幕日韩一区| 久久不见久久见免费视频7| 欧美中文字幕不卡| 国产精品狼人久久影院观看方式| 蜜桃一区二区三区在线| 99精品国产热久久91蜜凸| 久久理论电影网| 久久国产精品色婷婷| 欧美三级乱人伦电影| 1区2区3区欧美| 成人免费高清在线观看| 精品理论电影在线| 日本大胆欧美人术艺术动态| 欧美自拍丝袜亚洲| 17c精品麻豆一区二区免费| 国内不卡的二区三区中文字幕| 欧美日韩一卡二卡| 亚洲午夜激情网页| 色999日韩国产欧美一区二区| 国产精品美女久久久久久久久久久 | 国产精品一品视频| 欧美成人性战久久| 日本不卡视频一二三区| 欧美日韩成人综合天天影院 | 日韩av在线发布| 欧美美女bb生活片| 亚洲高清在线视频| 欧美性大战久久久| 亚洲一区在线视频观看| 色综合网站在线| 一级精品视频在线观看宜春院 | 成人网男人的天堂| 国产色一区二区| 成人天堂资源www在线| 久久久亚洲精品石原莉奈| 国产乱国产乱300精品| 精品99一区二区三区| 精品夜夜嗨av一区二区三区| 日韩欧美亚洲一区二区| 蜜臀a∨国产成人精品| 精品久久久久久久久久久院品网 | 国产日韩欧美麻豆| 大白屁股一区二区视频| 成人欧美一区二区三区视频网页| 99九九99九九九视频精品| 亚洲黄色录像片| 欧美性猛片aaaaaaa做受| 午夜影院久久久| 欧美电视剧在线观看完整版| 国产精品白丝av| 亚洲欧洲成人av每日更新| 欧美在线免费观看亚洲| 日本亚洲视频在线| 精品福利一区二区三区免费视频| 床上的激情91.| 亚洲第一二三四区| 欧美xxxxxxxxx| 粉嫩久久99精品久久久久久夜| 亚洲美女淫视频| 欧美高清精品3d| 国产成人在线观看免费网站| 亚洲精品videosex极品| 欧美一区欧美二区| 北岛玲一区二区三区四区| 午夜久久福利影院| 国产人伦精品一区二区|