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

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

?? kernels.cpp

?? JPEG2000的C++實現代碼
?? CPP
字號:
/*****************************************************************************/// File: kernels.cpp [scope = CORESYS/DWT-KERNELS]// Version: Kakadu, V2.2// Author: David Taubman// Last Revised: 20 June, 2001/*****************************************************************************/// Copyright 2001, David Taubman, The University of New South Wales (UNSW)// The copyright owner is Unisearch Ltd, Australia (commercial arm of UNSW)// Neither this copyright statement, nor the licensing details below// may be removed from this file or dissociated from its contents./*****************************************************************************/// Licensee: Book Owner// License number: 99999// The Licensee has been granted a NON-COMMERCIAL license to the contents of// this source file, said Licensee being the owner of a copy of the book,// "JPEG2000: Image Compression Fundamentals, Standards and Practice," by// Taubman and Marcellin (Kluwer Academic Publishers, 2001).  A brief summary// of the license appears below.  This summary is not to be relied upon in// preference to the full text of the license agreement, which was accepted// upon breaking the seal of the compact disc accompanying the above-mentioned// book.// 1. The Licensee has the right to Non-Commercial Use of the Kakadu software,//    Version 2.2, including distribution of one or more Applications built//    using the software, provided such distribution is not for financial//    return.// 2. The Licensee has the right to personal use of the Kakadu software,//    Version 2.2.// 3. The Licensee has the right to distribute Reusable Code (including//    source code and dynamically or statically linked libraries) to a Third//    Party, provided the Third Party possesses a license to use the Kakadu//    software, Version 2.2, and provided such distribution is not for//    financial return./******************************************************************************Description:   Implements the services defined by "kdu_kernels.h"******************************************************************************/#include <assert.h>#include <math.h>#include "kdu_elementary.h"#include "kdu_messaging.h"#include "kdu_params.h"#include "kdu_kernels.h"/* ========================================================================= *//*                                kdu_kernels                                *//* ========================================================================= *//*****************************************************************************//*                          kdu_kernels::kdu_kernels                         *//*****************************************************************************/kdu_kernels::kdu_kernels(int kernel_id, bool reversible){  this->kernel_id = kernel_id;  this->downshifts = NULL;  if (kernel_id == Ckernels_W5X3)    {      num_steps = 2;      lifting_factors = new float[num_steps];      lifting_factors[0] = -0.5F;      lifting_factors[1] = 0.25F;      if (reversible)        {          downshifts = new int[num_steps];          downshifts[0] = 1;          downshifts[1] = 2;        }    }  else if (kernel_id == Ckernels_W9X7)    {      num_steps = 4;      lifting_factors = new float[num_steps];      if (reversible)        { kdu_error e; e << "The W9X7 kernel may not be used for reversible "          "compression!"; }      lifting_factors[0] = (float) -1.586134342;      lifting_factors[1] = (float) -0.052980118;      lifting_factors[2] = (float) 0.882911075;      lifting_factors[3] = (float)  0.443506852;    }  else    { kdu_error e; e << "Illegal DWT kernel ID used to construct a "      "`kdu_kernels' object."; }  // Now let's derive all the remaining quantities.  low_analysis_L   = num_steps;   // These lengths may be pessimistic  high_analysis_L  = num_steps-1; // if one or more of the lifting factors  low_synthesis_L  = num_steps-1; // is equal to 0.  high_synthesis_L = num_steps;    low_analysis_taps = (new float[2*low_analysis_L+1])+low_analysis_L;  high_analysis_taps = (new float[2*high_analysis_L+1])+high_analysis_L;  low_synthesis_taps = (new float[2*low_synthesis_L+1])+low_synthesis_L;  high_synthesis_taps = (new float[2*high_synthesis_L+1])+high_synthesis_L;  // Initialize the vector expansion buffers.  max_expansion_levels = 4;  work_L = num_steps+1; // Allow for placing the input impulse at n=1 or n=0.  for (int d=1; d < max_expansion_levels; d++)    work_L = work_L*2 + num_steps;  work1 = (new float[2*work_L+1]) + work_L;  work2 = (new float[2*work_L+1]) + work_L;  bibo_step_gains = new double[num_steps];  // Deduce synthesis impulse responses, without scaling factors.  int n, k;  for (n=0; n <= work_L; n++)    work1[n] = work1[-n] = 0.0F;  work1[0]=1.0F; // Simulate an impulse in the low-pass subband.  for (k=num_steps-1; k >= 0; k--)    {      if (k&1)        n = -(num_steps & (~1)); // Smallest even integer >= -num_steps.      else        n = ((-num_steps) & (~1)) + 1; // Smallest odd integer >= -num_steps.      for (; n <= num_steps; n+=2)        work1[n] -= lifting_factors[k]*(work1[n-1]+work1[n+1]);    }  for (n=0; n <= low_synthesis_L; n++)    low_synthesis_taps[n] = low_synthesis_taps[-n] = work1[n];  for (n=0; n <= work_L; n++)    work1[n] = work1[-n] = 0.0F;  work1[1]=1.0F; // Simulate an impulse in the high-pass subband.  for (k=num_steps-1; k >= 0; k--)    {      if (k&1)        n = -(num_steps & (~1)); // Smallest even integer >= -num_steps.      else        n = ((-num_steps) & (~1)) + 1; // Smallest odd integer >= -num_steps.      for (; n <= (num_steps+1); n+=2)        work1[n] -= lifting_factors[k]*(work1[n-1]+work1[n+1]);    }  for (n=0; n <= high_synthesis_L; n++)    high_synthesis_taps[n] = high_synthesis_taps[-n] = work1[n+1];  // Deduce analysis kernels from synthesis kernels.  float sign_flip;  for (sign_flip=1.0F, n=0; n <= low_analysis_L; n++, sign_flip=-sign_flip)    low_analysis_taps[n] = low_analysis_taps[-n] =      sign_flip*high_synthesis_taps[n];  for (sign_flip=1.0F, n=0; n <= high_analysis_L; n++, sign_flip=-sign_flip)    high_analysis_taps[n] = high_analysis_taps[-n] =      sign_flip*low_synthesis_taps[n];  // Deduce scaling factors and normalize filter taps.  if (reversible)    { low_scale = high_scale = 1.0F; return; }  float gain;  gain=low_analysis_taps[0];  for (n=1; n <= low_analysis_L; n++)    gain += 2*low_analysis_taps[n];  low_scale = 1.0F / gain;  for (n=-low_analysis_L; n <= low_analysis_L; n++)    low_analysis_taps[n] *= low_scale;  for (n=-low_synthesis_L; n <= low_synthesis_L; n++)    low_synthesis_taps[n] *= gain;  gain = high_analysis_taps[0];  for (sign_flip=-1.0F, n=1; n <= high_analysis_L; n++, sign_flip=-sign_flip)    gain += 2*sign_flip*high_analysis_taps[n];  high_scale = 1.0F / gain;  for (n=-high_analysis_L; n <= high_analysis_L; n++)    high_analysis_taps[n] *= high_scale;  for (n=-high_synthesis_L; n <= high_synthesis_L; n++)    high_synthesis_taps[n] *= gain;}/*****************************************************************************//*                          kdu_kernels::~kdu_kernels                        *//*****************************************************************************/kdu_kernels::~kdu_kernels(){  if (downshifts != NULL)    delete[] downshifts;  delete[] lifting_factors;  delete[] (low_analysis_taps-low_analysis_L);  delete[] (high_analysis_taps-high_analysis_L);  delete[] (low_synthesis_taps-low_synthesis_L);  delete[] (high_synthesis_taps-high_synthesis_L);  delete[] (work1-work_L);  delete[] (work2-work_L);  delete[] bibo_step_gains;}/*****************************************************************************//*                      kdu_kernels::get_lifting_factors                     *//*****************************************************************************/float *  kdu_kernels::get_lifting_factors(int &num_steps,                                   float &low_scale, float &high_scale){  num_steps = this->num_steps;  low_scale = this->low_scale;  high_scale = this->high_scale;  return lifting_factors;}/*****************************************************************************//*                     kdu_kernels::get_impulse_response                     *//*****************************************************************************/float *  kdu_kernels::get_impulse_response(kdu_kernel_type which, int &half_length){  switch (which) {    case KDU_ANALYSIS_LOW:      half_length = low_analysis_L;      return low_analysis_taps;    case KDU_ANALYSIS_HIGH:      half_length = high_analysis_L;      return high_analysis_taps;    case KDU_SYNTHESIS_LOW:      half_length = low_synthesis_L;      return low_synthesis_taps;    case KDU_SYNTHESIS_HIGH:      half_length = high_synthesis_L;      return high_synthesis_taps;    default:      assert(0);    }  return NULL;}/*****************************************************************************//*                        kdu_kernels::get_energy_gain                       *//*****************************************************************************/double  kdu_kernels::get_energy_gain(kdu_kernel_type which, int level_idx){  if (level_idx == 0)    return (which==KDU_SYNTHESIS_LOW)?1.0:0.0;  int extra_levels = level_idx - max_expansion_levels;  if (extra_levels < 0)    extra_levels = 0;   else    level_idx -= extra_levels;  int L, n, k;  if (which == KDU_SYNTHESIS_LOW)    {      L = low_synthesis_L;      for (n=-L; n <= L; n++)        work1[n] = low_synthesis_taps[n];    }  else if (which == KDU_SYNTHESIS_HIGH)    {      L = high_synthesis_L;      for (n=-L; n <= L; n++)        work1[n] = high_synthesis_taps[n];    }  else    assert(0); // Function only computes synthesis energy gains.  for (level_idx--; level_idx > 0; level_idx--)    {      float *tbuf=work1; work1=work2; work2=tbuf;      int new_L = 2*L + low_synthesis_L;      assert(new_L <= work_L);      for (n=-new_L; n <= new_L; n++)        work1[n] = 0.0F;      for (n=-L; n <= L; n++)        for (k=-low_synthesis_L; k <= low_synthesis_L; k++)          work1[2*n+k] += work2[n]*low_synthesis_taps[k];      L = new_L;    }  double val, energy = 0.0;  for (n=-L; n <= L; n++)    {      val = work1[n];      energy += val*val;    }  while (extra_levels--)    energy *= 2.0;  return energy;}/*****************************************************************************//*                         kdu_kernels::get_bibo_gains                       *//*****************************************************************************/double *  kdu_kernels::get_bibo_gains(int level_idx,                              double &low_gain, double &high_gain){  if (level_idx == 0)    {      low_gain = 1.0;      high_gain = 0.0;      return NULL;    }  if (level_idx > max_expansion_levels)    level_idx = max_expansion_levels;  float *work_low=work1, *work_high=work2;  // In the seqel, `work_low' will hold the analysis kernel used to compute  // the even sub-sequence entry at location 0, while `work_high' will hold the  // analysis kernels used to compute the odd sub-sequence entry at location  // 1.  The lifting procedure is followed to alternately update these  // analysis kernels.  int k, lev, low_L, high_L, gap;  // Initialize analysis vectors and gains for a 1 level lazy wavelet  for (k=-work_L; k <= work_L; k++)    work_low[k] = work_high[k] = 0.0F;  work_low[0] = 1.0F;  low_L = high_L = 0;  low_gain = high_gain = 1.0;  for (gap=1, lev=1; lev <= level_idx; lev++, gap<<=1)    { // Work through the levels      /* Copy the low analysis vector from the last level to the high analysis         vector for the current level. */      for (k=0; k <= low_L; k++)        work_high[k] = work_high[-k] = work_low[k];      for (; k <= high_L; k++)        work_high[k] = work_high[-k] = 0.0F;      high_L = low_L;      high_gain = low_gain;      for (int step=0; step < num_steps; step+=2)        { // Work through the lifting steps in this level          float factor;          // Start by updating the odd sub-sequence analysis kernel          factor = lifting_factors[step];          assert((low_L+gap) <= work_L);          for (k=-low_L; k <= low_L; k++)            {              work_high[k-gap] += work_low[k]*factor;              work_high[k+gap] += work_low[k]*factor;            }          high_L = ((low_L+gap) > high_L)?(low_L+gap):high_L;          for (high_gain=0.0, k=-high_L; k <= high_L; k++)            high_gain += fabs(work_high[k]);          bibo_step_gains[step] = high_gain;                    // Now update the even sub-sequence analysis kernel          if ((step+1) < num_steps)            {              factor = lifting_factors[step+1];              assert((high_L+gap) <= work_L);              for (k=-high_L; k <= high_L; k++)                {                  work_low[k-gap] += work_high[k]*factor;                  work_low[k+gap] += work_high[k]*factor;                }              low_L = ((high_L+gap) > low_L)?(high_L+gap):low_L;              for (low_gain=0.0, k=-low_L; k <= low_L; k++)                low_gain += fabs(work_low[k]);              bibo_step_gains[step+1] = low_gain;            }        }      // Now incorporate the subband scaling factors      for (k=-high_L; k <= high_L; k++)        work_high[k] *= high_scale;      high_gain *= high_scale;      for (k=-low_L; k <= low_L; k++)        work_low[k] *= low_scale;      low_gain *= low_scale;    }  return bibo_step_gains;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本一道久久a久久精品综合蜜臀| 国产精品每日更新| 国产婷婷一区二区| 久久精品久久久精品美女| 欧美日韩性生活| 日韩国产欧美在线观看| 欧美日韩三级视频| 老司机精品视频在线| 91精品国产91综合久久蜜臀| 视频一区二区欧美| 精品国产一区二区国模嫣然| 亚洲一区二区免费视频| 国产呦精品一区二区三区网站| 精品国产露脸精彩对白| 极品美女销魂一区二区三区| 亚洲女人小视频在线观看| 91麻豆高清视频| 亚洲欧美欧美一区二区三区| 国产精选一区二区三区| 欧美三级电影精品| 亚洲福中文字幕伊人影院| 欧美日韩国产精品成人| 在线观看中文字幕不卡| 国产午夜精品一区二区| 国产精品99久久久| 337p亚洲精品色噜噜| 亚洲视频 欧洲视频| 国产麻豆午夜三级精品| 日韩一级高清毛片| 青椒成人免费视频| 69p69国产精品| 天堂成人国产精品一区| 欧美美女视频在线观看| 亚洲一区在线观看视频| 欧美性猛交xxxxxx富婆| 亚洲大片免费看| 欧美日韩精品综合在线| 日韩国产成人精品| 欧美一级在线视频| 免费的国产精品| 精品剧情在线观看| 韩国v欧美v亚洲v日本v| 国产欧美日韩不卡| www.av亚洲| 一区二区三区中文字幕精品精品| 色婷婷激情一区二区三区| 亚洲国产精品自拍| 日韩一区二区在线看片| 亚洲va在线va天堂| 日韩免费看的电影| 国产一区二区三区美女| 中文在线一区二区| 91老师片黄在线观看| 亚洲在线中文字幕| 欧美r级在线观看| 福利电影一区二区三区| 亚洲天堂免费在线观看视频| 欧美日韩在线播放一区| 美女一区二区三区在线观看| 久久综合色之久久综合| 91影院在线观看| 日韩在线一二三区| 国产午夜亚洲精品不卡| 色综合久久综合网欧美综合网| 亚洲国产日产av| 精品国产乱码久久久久久1区2区| 成人天堂资源www在线| 夜夜嗨av一区二区三区网页| 精品久久久久久久久久久久久久久久久| 精品一区二区三区视频在线观看| 国产精品国产三级国产普通话三级 | 精品亚洲国内自在自线福利| 欧美激情在线免费观看| 欧美日韩国产精选| 成人免费高清视频在线观看| 亚洲图片自拍偷拍| 久久久99精品久久| 欧美日韩aaaaaa| 成人成人成人在线视频| 伦理电影国产精品| 一区二区在线免费观看| 337p粉嫩大胆色噜噜噜噜亚洲| 色综合久久综合网| 成人在线综合网站| 极品瑜伽女神91| 夜色激情一区二区| 中文字幕亚洲精品在线观看| 精品少妇一区二区三区在线视频 | 久热成人在线视频| 亚洲丝袜美腿综合| 久久精品综合网| 欧美成人艳星乳罩| 欧美日韩国产精品自在自线| 97se亚洲国产综合自在线不卡| 另类小说视频一区二区| 亚洲午夜精品网| 亚洲欧洲日韩综合一区二区| wwwwww.欧美系列| 91精品国产高清一区二区三区蜜臀| 9久草视频在线视频精品| 久久99国产精品尤物| 亚洲综合清纯丝袜自拍| 亚洲乱码日产精品bd| 欧美国产精品一区二区三区| 久久影视一区二区| 精品国产91洋老外米糕| 欧美一区二区三区免费大片| 欧美视频日韩视频在线观看| 91在线观看高清| 成人h动漫精品一区二| 国产一区二区电影| 久久国产精品一区二区| 丝袜美腿亚洲一区二区图片| 精品久久久久一区二区国产| 欧美高清hd18日本| 欧美在线免费视屏| 色哟哟欧美精品| av电影在线观看完整版一区二区| 国产v综合v亚洲欧| 亚洲国产成人精品视频| 亚洲国产wwwccc36天堂| 亚洲视频中文字幕| 国产精品免费av| 亚洲欧洲成人精品av97| 亚洲欧洲av在线| 亚洲一二三区不卡| 亚洲人成影院在线观看| 亚洲第一电影网| 亚洲观看高清完整版在线观看 | 久久婷婷国产综合国色天香| 欧美一卡二卡在线观看| 国产拍揄自揄精品视频麻豆| 国产精品毛片a∨一区二区三区 | 91蜜桃免费观看视频| 高清成人在线观看| jlzzjlzz国产精品久久| 91福利资源站| 欧美日韩国产小视频| 日韩免费一区二区| 国产精品天天看| 久久中文字幕电影| 久久精品人人做| 亚洲欧洲无码一区二区三区| 亚洲柠檬福利资源导航| 亚洲综合区在线| 久久69国产一区二区蜜臀 | 午夜在线成人av| 日韩国产欧美三级| 丁香六月久久综合狠狠色| 国产中文字幕一区| 福利一区二区在线观看| 欧美日韩亚洲综合一区二区三区| 91精品久久久久久久91蜜桃| 久久精品综合网| 亚洲精品写真福利| 美女脱光内衣内裤视频久久网站 | 在线观看国产一区二区| 日韩亚洲欧美在线| 国产亚洲欧洲一区高清在线观看| 亚洲美女淫视频| 蜜臀av一区二区| 色综合久久久久| 91精品国产综合久久香蕉麻豆| 日韩午夜激情视频| 日韩理论电影院| 蜜桃视频在线观看一区| 色先锋资源久久综合| 日韩久久精品一区| 亚洲一二三四久久| 国产精品一色哟哟哟| 欧美日韩在线一区二区| 精品免费日韩av| 亚洲成av人综合在线观看| 丁香啪啪综合成人亚洲小说 | 国产九色sp调教91| 色婷婷一区二区| 国产午夜精品一区二区三区视频 | 成人aaaa免费全部观看| 一道本成人在线| 久久久久久久综合日本| 夜夜揉揉日日人人青青一国产精品| 免费的成人av| 欧美日韩一本到| 国产三级精品在线| 国内精品国产三级国产a久久| 欧美日韩国产综合久久 | 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲一区二区三区自拍| 日本精品视频一区二区| www久久精品| 国产福利一区在线观看| 精品国产麻豆免费人成网站| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲一区二区av在线| caoporn国产精品| 国产精品嫩草影院av蜜臀| 成年人网站91| 亚洲人成在线播放网站岛国 | 欧美三级日本三级少妇99| 国产免费观看久久|