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

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

?? sfq.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. *  */#include "libQccPack.h"int QccWAVsfqWaveletAnalysis(const QccIMGImageComponent *input_image,                             QccWAVSubbandPyramid *subband_pyramid,                             QccWAVZerotree *zerotree,                             const QccSQScalarQuantizer *mean_quantizer,                             const QccWAVWavelet *wavelet,                             const QccWAVPerceptualWeights *perceptual_weights,                             double lambda){  int return_value;  int num_levels;  if ((subband_pyramid == NULL) ||      (mean_quantizer == NULL) ||      (wavelet == NULL))    return(0);  num_levels = zerotree->num_levels;  if (QccMatrixCopy(subband_pyramid->matrix,                    input_image->image,                    input_image->num_rows,                    input_image->num_cols))    {      QccErrorAddMessage("(QccWAVsfqWaveletAnalysis): Error calling QccMatrixCopy()");      goto QccError;    }    if (QccWAVSubbandPyramidSubtractMean(subband_pyramid,                                       &(zerotree->image_mean),                                       mean_quantizer))    {      QccErrorAddMessage("(QccWAVsfqWaveletAnalysis): Error calling QccWAVSubbandPyramidSubtractMean()");      goto QccError;    }    if (num_levels)    if (QccWAVSubbandPyramidDWT(subband_pyramid,                                num_levels,                                wavelet))      {        QccErrorAddMessage("(QccWAVsfqWaveletAnalysis): Error calling QccWAVSubbandPyramidDWT()");        goto QccError;      }  if (perceptual_weights != NULL)    if (QccWAVPerceptualWeightsApply(subband_pyramid,                                     perceptual_weights))      {        QccErrorAddMessage("(QccWAVsfqWaveletAnalysis): Error calling QccWAVPerceptualWeightsApply()");        QccErrorExit();      }  return_value = 0;  goto QccReturn; QccError:  return_value = 1; QccReturn:  return(return_value);}static int QccWAVsfqBasebandEncodeProcess(QccIMGImageComponent *baseband_image,                                          QccSQScalarQuantizer                                           *baseband_quantizer,                                          QccChannel *channels,                                          QccIMGImageComponent                                           *reconstructed_baseband,                                          double *distortion,                                           double *rate){  int return_value;  QccVector distortion_vector = NULL;  if ((baseband_image == NULL) ||      (baseband_quantizer == NULL) ||      (channels == NULL))    return(0);  if ((distortion_vector = QccVectorAlloc(baseband_image->num_rows *                                          baseband_image->num_cols)) ==       NULL)    {      QccErrorAddMessage("(QccWAVsfqBasebandEncodeProcess): Error calling QccVectorAlloc()");      goto QccError;    }  if (QccIMGImageComponentScalarQuantize(baseband_image,                                         baseband_quantizer,                                         distortion_vector,                                         &(channels[0])))    {      QccErrorAddMessage("(QccWAVsfqBasebandEncodeProcess): Error calling QccIMGImageComponentScalarQuantize()");      goto QccError;    }  if (QccIMGImageComponentInverseScalarQuantize(&(channels[0]),                                                baseband_quantizer,                                                reconstructed_baseband))    {      QccErrorAddMessage("(QccWAVsfqBasebandEncodeProcess): Error calling QccIMGImageComponentInverseScalarQuantize()");      goto QccError;    }  if (QccChannelNormalize(&(channels[0])))    {      QccErrorAddMessage("(QccWAVsfqBasebandEncodeProcess): Error calling QccChannelNormalize()");      goto QccError;    }  if (distortion != NULL)    *distortion =       QccVectorMean(distortion_vector,                    baseband_image->num_rows *                    baseband_image->num_cols);  if (rate != NULL)    *rate = QccChannelEntropy(&(channels[0]), 1);  return_value = 0;  goto QccReturn; QccError:  return_value = 1; QccReturn:  QccVectorFree(distortion_vector);  return(return_value);}int QccWAVsfqBasebandEncode(const QccWAVSubbandPyramid *subband_pyramid,                            QccWAVZerotree *zerotree,                            QccSQScalarQuantizer *baseband_quantizer,                            QccChannel *channels,                            double lambda,                            QccIMGImageComponent *reconstructed_baseband){  int return_value;  QccIMGImageComponent baseband_image;  double distortion;  double rate;  double baseband_quantizer_start_stepsize;  double baseband_quantizer_end_stepsize;  int done = 0;  int last_time = 0;  QccVector J = NULL;  int pass;  int num_passes;  double min_J = MAXDOUBLE;  double winner = 0;  double max_coefficient = -MAXDOUBLE;  int row, col;  if ((subband_pyramid == NULL) ||      (zerotree == NULL) ||      (baseband_quantizer == NULL) ||      (channels == NULL))    return(0);  if (baseband_quantizer->stepsize <= 0.0)    {      baseband_quantizer_start_stepsize =        QCCWAVSFQ_BASEBANDQUANTIZER_START_STEPSIZE;      baseband_quantizer_end_stepsize =        QCCWAVSFQ_BASEBANDQUANTIZER_END_STEPSIZE;    }  else    {      baseband_quantizer_start_stepsize =        baseband_quantizer_end_stepsize =        baseband_quantizer->stepsize;      last_time = 1;    }    num_passes =    ceil((baseband_quantizer_end_stepsize -          baseband_quantizer_start_stepsize) /         QCCWAVSFQ_BASEBANDQUANTIZER_INCREMENT) + 1;  baseband_image.num_rows = zerotree->num_rows[0];  baseband_image.num_cols = zerotree->num_cols[0];  baseband_image.image = subband_pyramid->matrix;  for (row = 0; row < baseband_image.num_rows; row++)    for (col = 0; col < baseband_image.num_cols; col++)      if (fabs(baseband_image.image[row][col]) > max_coefficient)        max_coefficient = fabs(baseband_image.image[row][col]);  if ((J = QccVectorAlloc(num_passes)) == NULL)    {      QccErrorAddMessage("(QccWAVsfqBasebandEncode): Error calling QccVectorAlloc()");      goto QccError;    }  for (pass = 0; pass < num_passes; pass++)    J[pass] = MAXDOUBLE;  baseband_quantizer->stepsize =     baseband_quantizer_start_stepsize;    pass = 0;  do    {      if (last_time)        done = 1;            if (QccSQScalarQuantization(max_coefficient,                                  baseband_quantizer,                                  NULL,                                  &(channels[0].alphabet_size)))        {          QccErrorAddMessage("(QccWAVsfqBasebandEncode): Error calling QccSQScalarQuantization()");          goto QccError;        }      channels[0].alphabet_size =        channels[0].alphabet_size * 2 + 1;      baseband_quantizer->num_levels = channels[0].alphabet_size;      if (QccWAVsfqBasebandEncodeProcess(&baseband_image,                                         baseband_quantizer,                                         channels,                                         reconstructed_baseband,                                         &distortion, &rate))        {          QccErrorAddMessage("(QccWAVsfqBasebandEncode): Error calling QccWAVsfqBasebandEncodeProcess()");          goto QccError;        }      if (!done)        {          J[pass] =            distortion + lambda * rate;          /****/          /*            printf("    step: %f\n", baseband_quantizer->stepsize);            printf("     MSE: %f\n", distortion);            printf("    rate: %f\n", rate);            printf("       J: %f\n\n", J[pass]);          */          if (pass == num_passes - 1)            {              for (pass = 0;                   pass < num_passes;                   pass++)                if (J[pass] < min_J)                  {                    min_J = J[pass];                    winner = baseband_quantizer_start_stepsize +                      QCCWAVSFQ_BASEBANDQUANTIZER_INCREMENT * pass;                  }                            baseband_quantizer->stepsize = winner;              last_time = 1;            }          else            {              baseband_quantizer->stepsize +=                QCCWAVSFQ_BASEBANDQUANTIZER_INCREMENT;              pass++;            }        }    }  while (!done);  return_value = 0;  goto QccReturn; QccError:  return_value = 1; QccReturn:  QccVectorFree(J);  return(return_value);}static int QccWAVsfqCalcCodewordLengths(QccVector codeword_lengths,                                        int num_symbols,                                        QccChannel *channels,                                        QccWAVZerotree *zerotree){  int subband, row, col;  int symbol;  int channel_index;  int num_nonnull_symbols = 0;    for (symbol = 0; symbol < num_symbols; symbol++)    codeword_lengths[symbol] = 0;    for (subband = 1;       subband < zerotree->num_subbands; subband++)    for (row = 0, channel_index = 0;          row < zerotree->num_rows[subband]; row++)      for (col = 0; col < zerotree->num_cols[subband];            col++, channel_index++)        if (!QccWAVZerotreeNullSymbol(zerotree->zerotree[subband][row][col]))          {            codeword_lengths[channels[subband].channel_symbols                            [channel_index]]++;            num_nonnull_symbols++;          }    for (symbol = 0; symbol < num_symbols; symbol++)    codeword_lengths[symbol] =      -QccMathLog2(codeword_lengths[symbol] / num_nonnull_symbols);    return(0);}static double QccWAVsfqCalcChildrenCost(QccVector *costs,                                        int child_subband,                                        int parent_row,                                        int parent_col,                                        int num_child_cols){  int child_row, child_col;  int num_children;  double cost = 0;    num_children = (child_subband < 4) ? 1 : 2;    for (child_row = num_children*parent_row;       child_row < num_children*(parent_row + 1);       child_row++)    for (child_col = num_children*parent_col;         child_col < num_children*(parent_col + 1);         child_col++)      cost +=        costs[child_subband][child_row*num_child_cols + child_col];    return(cost);  }static double QccWAVsfqSelectMinimumCost(QccWAVZerotree *zerotree,                                          int subband,                                          int row, int col, int cost_index,                                         QccVector *J,                                          QccVector *residue_tree_J,                                         QccVector *delta_J,                                         QccVector *squared_subband_images,                                         int *zerotree_pruned){  int level;  double cost1, cost2;  double minimum_cost;  int child_subband;  int child_subband_start, child_subband_end;    level = QccWAVSubbandPyramidCalcLevelFromSubband(subband, zerotree->num_levels);    if (subband)    child_subband_start = child_subband_end =      subband + 3;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩福利视频网| 91丝袜高跟美女视频| 成人免费的视频| 欧美日韩www| 亚洲欧美国产毛片在线| 久久99精品国产麻豆婷婷| 99麻豆久久久国产精品免费 | 久久品道一品道久久精品| 亚洲欧美成aⅴ人在线观看| 麻豆视频一区二区| 在线精品亚洲一区二区不卡| 久久久久久久一区| 麻豆精品视频在线观看| 欧美日韩综合在线| 中文字幕在线一区| 国产一区二区伦理| 精品久久久久一区二区国产| 亚洲国产精品尤物yw在线观看| 成人精品免费看| 久久综合九色欧美综合狠狠| 另类欧美日韩国产在线| 欧美日本精品一区二区三区| 依依成人精品视频| 99re这里只有精品首页| 中文字幕免费观看一区| 国产一区视频网站| 久久新电视剧免费观看| 蜜臀av国产精品久久久久| 欧美日韩1区2区| 午夜精品久久久久久久久久| 欧美性大战久久久久久久蜜臀| 亚洲色图制服丝袜| 91一区二区三区在线观看| 国产精品天美传媒沈樵| 国产成人自拍网| 国产女人18毛片水真多成人如厕| 激情国产一区二区| 久久久噜噜噜久久人人看 | 夜夜精品视频一区二区| fc2成人免费人成在线观看播放| 久久亚洲捆绑美女| 狠狠色狠狠色综合| 久久久一区二区三区| 国产精品亚洲午夜一区二区三区 | 欧美在线看片a免费观看| 亚洲女同ⅹxx女同tv| 在线观看一区二区视频| 亚洲成人资源在线| 制服丝袜中文字幕亚洲| 麻豆成人av在线| 久久这里只精品最新地址| 福利电影一区二区三区| 综合久久久久久| 欧美日韩精品高清| 久久99久国产精品黄毛片色诱| 精品三级在线观看| 成人午夜在线播放| 亚洲综合在线观看视频| 欧美一区二区三区四区久久| 国产精品一品二品| 一区二区三区不卡在线观看| 3atv一区二区三区| 国产成人av自拍| 亚洲国产综合91精品麻豆| 欧美一区二区三区视频免费| 国产麻豆精品在线观看| 亚洲人被黑人高潮完整版| 宅男在线国产精品| www.欧美.com| 日本美女视频一区二区| 久久精品亚洲精品国产欧美kt∨| eeuss鲁一区二区三区| 日韩影院精彩在线| 国产精品国产三级国产有无不卡| 色婷婷综合久久久中文字幕| 久久精工是国产品牌吗| 亚洲天天做日日做天天谢日日欢| 欧美日韩国产美| 国产99精品在线观看| 日韩精品电影一区亚洲| 国产精品久久久久久久久久免费看| 欧美综合色免费| 国产999精品久久| 美女视频一区二区三区| 亚洲欧美另类久久久精品2019| 欧美大白屁股肥臀xxxxxx| 91浏览器在线视频| 国产不卡视频在线观看| 免费在线观看精品| 亚洲123区在线观看| 亚洲图片你懂的| 久久亚区不卡日本| 日韩一区二区三区四区| 欧美在线观看视频在线| 91在线你懂得| 国产福利一区二区三区视频| 爽爽淫人综合网网站| 亚洲另类一区二区| 国产精品视频免费| 久久久久久久久久久久久久久99 | 欧美高清视频一二三区| 99久久免费精品| 国产成人精品综合在线观看 | 成人av在线播放网址| 蜜桃在线一区二区三区| 午夜伦理一区二区| 亚洲一区视频在线| 一区二区三区小说| 自拍偷自拍亚洲精品播放| 国产精品私房写真福利视频| 久久综合九色综合欧美98| 2023国产精华国产精品| 欧美成人一区二区三区| 欧美一区二区三区免费观看视频| 欧美日韩亚洲综合一区二区三区| 91丨porny丨蝌蚪视频| 成人一二三区视频| 成人黄色国产精品网站大全在线免费观看| 九一九一国产精品| 国产在线一区观看| 国产精品一区二区在线观看不卡| 国产一区二区成人久久免费影院 | 国产亚洲成av人在线观看导航| 日韩一区二区三区高清免费看看| 欧美精品丝袜中出| 在线播放亚洲一区| 日韩三级在线免费观看| 精品国产3级a| 国产亚洲精品免费| 国产精品美女久久久久久久久久久 | 国产成人午夜电影网| 成人性生交大片免费看中文网站| 成人午夜碰碰视频| 91黄视频在线| 欧美一区二区在线播放| 欧美大片国产精品| 国产精品毛片高清在线完整版 | 久久久国产精品午夜一区ai换脸| 中文字幕精品在线不卡| 亚洲少妇30p| 免费观看日韩电影| 国产精品99久久久久久久女警| 成人免费高清在线观看| 色94色欧美sute亚洲线路一ni| 欧美精品日韩精品| 久久精品视频一区二区| 亚洲美女在线一区| 日韩精品三区四区| 国产一区二区在线视频| 色狠狠色噜噜噜综合网| 日韩一区二区在线看片| 中文字幕成人网| 午夜精品福利在线| 成人午夜电影网站| 欧美日韩国产高清一区二区三区| 欧美sm美女调教| 亚洲色图制服丝袜| 精品一区二区三区不卡| av网站免费线看精品| 欧美一级专区免费大片| 国产精品水嫩水嫩| 蜜桃视频一区二区三区| 成人福利视频网站| 欧美一级高清片| 亚洲欧美在线aaa| 美女视频黄a大片欧美| 99久久久精品| 久久综合色综合88| 亚洲va韩国va欧美va| 99麻豆久久久国产精品免费优播| 欧美一区二区私人影院日本| 中文字幕一区av| 国产一区欧美一区| 欧美精品第一页| 一区二区三区在线免费观看| 狠狠久久亚洲欧美| 欧美日韩免费一区二区三区视频| 欧美国产97人人爽人人喊| 久久精品国产免费看久久精品| 色综合天天综合网天天狠天天 | 91精品国产aⅴ一区二区| 亚洲欧洲av一区二区三区久久| 日本免费在线视频不卡一不卡二| 色婷婷综合久久| 国产精品第五页| 国产一本一道久久香蕉| 欧美www视频| 午夜成人在线视频| 日本韩国视频一区二区| 国产精品不卡在线| 国产成人av网站| 精品1区2区在线观看| 轻轻草成人在线| 欧美精品自拍偷拍动漫精品| 亚洲午夜精品一区二区三区他趣| 91麻豆产精品久久久久久| 亚洲色图欧美激情| 99久久综合狠狠综合久久| 欧美激情一区二区三区不卡 | 国产酒店精品激情|