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

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

?? image_3c.c

?? SPIHT 源代碼
?? C
字號:
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =//                     I M A G E   C L A S S// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =//           > > > >    C++ version  1.04 -  06/25/95   < < < <// Amir Said - amir@densis.fee.unicamp.br// University of Campinas (UNICAMP)// Campinas, SP 13081, Brazil// William A. Pearlman - pearlman@ecse.rpi.edu// Rensselaer Polytechnic Institute// Troy, NY 12180, USA// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Copyright (c) 1995 Amir Said & William A. Pearlman// This program is Copyright (c) by Amir Said & William A. Pearlman.// It may be freely redistributed in its entirety provided that this// copyright notice is not removed. It may not be sold for profit or// incorporated in commercial programs without the written permission// of the copyright holders. This program is provided as is, without any// express or implied warranty, without even the warranty of fitness// for a particular purpose.// - - Inclusion - - - - - - - - - - - - - - - - - - - - - - - - - - - -#include "general.h"#include "image_3c.h"#include <string.h>// - - Constants - - - - - - - - - - - - - - - - - - - - - - - - - - - -static char * M_MSG = "< Image_3C >";static char * R_MSG = "< Image_3C > cannot read from file";static char * W_MSG = "< Image_3C > cannot write to file";static char * L_MSG = "< Image_3C > larger than specified dimension";static const int NumbTap = 4;static const float T_LowPass[5] =  { 0.852699,  0.377403, -0.110624, -0.023849, 0.037829 };static const float T_HighPass[5] =  { 0.788485, -0.418092, -0.040690,  0.064539, 0.0 };static const float R_LowPass[5] =  { 0.852699,  0.418092, -0.110624, -0.064539, 0.037829 };static const float R_HighPass[5] =  { 0.788485, -0.377403, -0.040690,  0.023849, 0.0 };// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =//  Auxiliary functions// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =inline float Filter_L(const float * f, float * v){  return f[0] * v[0] +    f[1] * (v[1] + v[-1]) + f[2] * (v[2] + v[-2]) +    f[3] * (v[3] + v[-3]) + f[4] * (v[4] + v[-4]);}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -inline float Filter_H(const float * f, float * v){  return f[0] * v[0] +    f[1] * (v[1] + v[-1]) + f[2] * (v[2] + v[-2]) +    f[3] * (v[3] + v[-3]);}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -static void Reflection(float * h, float * t){    for (int i = 1; i <= NumbTap; i++) {    h[-i] = h[i];  t[i] = t[-i]; }}// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =//  Functions of the class  < Image_3C >// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =// - - Private functions - - - - - - - - - - - - - - - - - - - - - - - -int Image_3C::max_levels(int n){  int l1, l2;  for (l1 = 0; !(n & 1); l1++) n >>= 1;  for (l2 = l1 - 4; n; l2++) n >>= 1;  return (l1 < l2 ? l1 : l2);}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::assign_mem(Image_Coord d){  if ((levels >= 0) && (dim.x == d.x) && (dim.y == d.y)) return;  free_mem();  if ((d.x < 8) || (d.y < 8))    Error("< Image_3C > dimension is too small or negative");  dim = d;  pdim.x = (d.x < 200 ? (d.x + 7) & 0x3FF8 : (d.x + 15) & 0x3FF0);  pdim.y = (d.y < 200 ? (d.y + 7) & 0x3FF8 : (d.y + 15) & 0x3FF0);  int c, i = NumbTap + NumbTap + Max(pdim.x, pdim.y);  NEW_VECTOR(r_line, i, float, M_MSG);  t_line = r_line + NumbTap;  for (c = 0; c < 3; c++) {    NEW_VECTOR(coeff, pdim.x, float *, M_MSG);    for (i = 0; i < pdim.x; i++) {      NEW_VECTOR(coeff[i], pdim.y, float, M_MSG); }    cor[c] = coeff; }}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::free_mem(void){  if (levels >= 0) {    int c, i;    for (c = 2; c >= 0; c--) {      coeff = cor[c];      for (i = pdim.x - 1; i >= 0; i--) delete [] coeff[i];      delete [] coeff; }    delete [] r_line; }  dim.x = dim.y = 0;  levels = -1;}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::extend_image(int c){  coeff = cor[c];  int i, j;  for (j = dim.y - 1; j < pdim.y - 1; j++) {    coeff[0][j+1] = (coeff[0][j] + coeff[1][j]) / 2;    coeff[dim.x-1][j+1] = (coeff[dim.x-1][j] + coeff[dim.x-2][j]) / 2;    for (i = dim.x - 2; i > 0; i--)      coeff[i][j+1] = (coeff[i-1][j] + coeff[i][j] + coeff[i+1][j]) / 3; }  for (i = dim.x - 1; i < pdim.x - 1; i++) {    coeff[i+1][0] = (coeff[i][0] + coeff[i][1]) / 2;    coeff[i+1][pdim.y-1] = (coeff[i][pdim.y-1] + coeff[i][pdim.y-2]) / 2;    for (j = pdim.y - 2; j > 0; j--)      coeff[i+1][j] = (coeff[i][j-1] + coeff[i][j] + coeff[i][j+1]) / 3; }}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#define ROTATION(M,i,j,k,l) g = M[i][j];  h = M[k][l];\         M[i][j] = g-s*(h+g*tau);  M[k][l] = h+s*(g-h*tau)// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::Jacobi(double m[3], double A[3][3]){  int i, j, k, p, q, itr = 0;  double t = 1.0 / (double(dim.x) * double(dim.y));  double v, tau, s, h, g, c;  double b[3], d[3], X[3][3];  for (i = 0; i < 3; i++) m[i] *= t;  for (i = 0; i < 3; i++) {    for (j = i; j < 3; j++) {      X[i][j] = X[j][i] = 0;      A[i][j] = A[j][i] = t * A[i][j] - m[i] * m[j]; }    mean[i] = int(0.5 + m[i]);  m[i] = 0;    b[i] = d[i] = A[i][i];  X[i][i] = 1; }  for (;;) {    for (s = i = 0; i < 2; i++)      for (j = i + 1; j < 3; j++)        if (s < (t = fabs(A[i][j]))) {          s = t;  p = i;  q = j; }    if (s == 0) break;    if (++itr > 50)      Error("Too many iterations in function < Image_3C::Jacobi >");    g = 100 * s;  h = d[q] - d[p];    if (g + fabs(h) == fabs(h))      t = A[p][q] / h;    else {      v = 0.5 * h / A[p][q];  t = 1 / (fabs(v) + sqrt(1 + v * v));      if (v < 0) t = -t; }    c = 1 / sqrt(1 + t * t);  s = t * c;    tau = s / (1 + c);  h = t * A[p][q];  A[p][q] = 0;    m[p] -= h;  m[q] += h;  d[p] -= h;  d[q] += h;    for (k = 0; k < p; k++)     { ROTATION(A,k,p,k,q); }    for (k = p + 1; k < q; k++) { ROTATION(A,p,k,k,q); }    for (k = q + 1; k < 3; k++) { ROTATION(A,p,k,q,k); }    for (k = 0; k < 3; k++)     { ROTATION(X,k,p,k,q); }    for (k = 0; k < 3; k++) {      b[k] += m[k];  d[k] = b[k];  m[k] = 0; }  }  for (i = 0; i < 3; i++) {    for (s = k = -1, j = 0; j < 3; j++)      if (d[j] > s) s = d[k=j];    if (k < 0) Error("Incorrect decomposition");    for (d[k] = -2, j = 0; j < 3;j++)       R[i][j] = 1e-4 * Round(1e4 * X[j][k]); }}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// - - Public functions  - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::averages(int M[3]){  for (int i = 0; i < 3; i++) M[i] = mean[i];}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::color_transform(int T[3][3]){  int i, j;  for (i = 0; i < 3; i++)    for (j = 0; j < 3; j++)      T[i][j] = int(Round(1e4 * (R[i][j] + 1)));}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::set_color(int c){  if ((c < 0) || (c > 3)) Error("invalid < Image_3C > color number");  coeff = cor[c];}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::read_pic(Image_Coord d, char * file_name){  assign_mem(d);  levels = 0;  int i, j, k, l, v, p[3];  double m[3], S[3][3];  FILE * in_file = fopen(file_name, "rb");  if (in_file == NULL) Error(R_MSG);  for (k = 0; k < 3; k++)    for (m[k] = l = 0; l < 3; l++) S[k][l] = 0;  for (i = 0; i < dim.x; i++)    for (j = 0; j < dim.y; j++) {      for (k = 0; k < 3; k++) {        if ((v = getc(in_file)) == EOF) Error(R_MSG);        cor[k][i][j] = p[k] = v;  m[k] += v; }      for (k = 0; k < 3; k++)        for (l = k; l < 3; l++) S[k][l] += p[k] * p[l]; }  if (getc(in_file) != EOF) Error(L_MSG);  fclose(in_file);  Jacobi(m, S);  for (k = 0; k < 3; k++) extend_image(k);}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -float Image_3C::compare(char * file_name){  if (levels) Error("cannot compare < Image_3C >");  FILE * in_file = fopen(file_name, "rb");  if (in_file == NULL) Error(R_MSG);  double mse = 0.0;  int i, j, k, c;  for (i = 0; i < dim.x; i++)    for (j = 0; j < dim.y; j++)      for (k = 0; k < 3; k++) {        if ((c = getc(in_file)) == EOF) Error(R_MSG);        mse += Sqr(c - int(0.499 + cor[k][i][j])); }  if (getc(in_file) != EOF) Error(L_MSG);  fclose(in_file);  return 0.333333 * (mse / dim.x) / dim.y;}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::write_pic(char * file_name){  if (levels) Error("cannot write < Image_3C >");  FILE * out_file = fopen(file_name, "wb");  if (out_file == NULL) Error(W_MSG);  int i, j, k;  for (i = 0; i < dim.x; i++)    for (j = 0; j < dim.y; j++)      for (k = 0; k < 3; k++) {      if (putc(int(0.499 + cor[k][i][j]), out_file) == EOF)        Error(W_MSG); }  fclose(out_file);}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::reset(Image_Coord d){  assign_mem(d);  int i, k, j = pdim.y * sizeof(float);  for (i = 0; i < 3; i++)    for (mean[i] = j = 0; j < 3; j++) R[i][j] = 0;  levels = Min(max_levels(pdim.x), max_levels(pdim.y));//  for (k = 0; k < 3; k++)//    for (i = 0; i < pdim.x; i++) memset(cor[k][i], 0, j);  for (k = 0; k < 3; k++)    for (i = 0; i < pdim.x; i++)      for (j = 0; j < pdim.y; j++) cor[k][i][j] = 0;}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::reset(Image_Coord d, int m[3], int T[3][3]){  reset(d);  int i, j;  for (i = 0; i < 3; i++) {    mean[i] = m[i];    for (j = 0; j < 3; j++) R[i][j] = 1e-4 * T[i][j] - 1.0; }}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::transform(void){  if (levels) Error("cannot transform < Image_3C >");  if ((dim.x < 32) || (dim.y < 32))    Error("< Image_3C > is too small to transform");  Chronometer cpu_time;  cpu_time.start("\n  Starting image transformation...");  levels = Min(max_levels(pdim.x), max_levels(pdim.y));  if (levels < 2) Error("invalid < Image_3C > dimension");  int i, j, k, l;  float s, p[3];  for (i = 0; i < pdim.x; i++)    for (j = 0; j < pdim.y; j++) {      for (k = 0; k < 3; k++) p[k] = cor[k][i][j] - mean[k];      for (k = 0; k < 3; k++) {        for (s = l = 0; l < 3; l++) s += R[k][l] * p[l];        cor[k][i][j] = s; } }  for (k = 0; k < 3; k++) w_transform(cor[k]);  cpu_time.display(" Image transformed in");}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::w_transform(float ** tcf){  int i, j, nx, ny, mx = pdim.x, my = pdim.y;  float * t;  for (int lv = 0; lv < levels; lv++) {    nx = mx;  mx >>= 1;  ny = my;  my >>= 1;    for (j = 0; j < ny; j++) {      for (i = 0; i < nx; i++) t_line[i] = tcf[i][j];      Reflection(t_line, t_line + nx - 1);      for (i = 0, t = t_line; i < mx; i++) {        tcf[i][j] = Filter_L(T_LowPass, t++);        tcf[i+mx][j] = Filter_H(T_HighPass, t++); } }    for (i = 0; i < nx; i++) {      memcpy(t_line, tcf[i], ny * sizeof(float));      Reflection(t_line, t_line + ny - 1);      for (j = 0, t = t_line; j < my; j++) {        tcf[i][j] = Filter_L(T_LowPass, t++);        tcf[i][j+my] = Filter_H(T_HighPass, t++); } } }}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::recover(void){  if (levels <= 0) Error("cannot recover < Image_3C >");  Chronometer cpu_time;  cpu_time.start("\n  Starting inverse transformation...");  int i, j, k, l;  float s, p[3];  for (k = 0; k < 3; k++) w_recover(cor[k]);  for (i = 0; i < pdim.x; i++)    for (j = 0; j < pdim.y; j++) {      for (k = 0; k < 3; k++) p[k] = cor[k][i][j];      for (k = 0; k < 3; k++) {        for (s = l = 0; l < 3; l++) s += R[l][k] * p[l];        l = int(0.499 + s + mean[k]);        if (l < 0) l = 0;        if (l > 255) l = 255;        cor[k][i][j] = l; } }  levels = 0;  cpu_time.display(" Image transformed in");}// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Image_3C::w_recover(float ** tcf){  float * t;  int i, j, mx, my, nx = pdim.x >> levels, ny = pdim.y >> levels;  for (int lv = 0; lv < levels; lv++) {    mx = nx;  nx <<= 1;  my = ny;  ny <<= 1;    for (i = 0; i < nx; i++) {      for (j = 0, t = t_line; j < my; j++) {        *(t++) = tcf[i][j];  *(t++) = tcf[i][j+my]; }      Reflection(t_line, t_line + ny - 1);      for (j = 0, t = t_line; j < ny;) {        tcf[i][j++] = Filter_H(R_HighPass, t++);        tcf[i][j++] = Filter_L(R_LowPass, t++); } }    for (j = 0; j < ny; j++) {      for (i = 0, t = t_line; i < mx; i++) {        *(t++) = tcf[i][j];  *(t++) = tcf[i+mx][j]; }      Reflection(t_line, t_line + nx - 1);      for (i = 0, t = t_line; i < nx;) {        tcf[i++][j] = Filter_H(R_HighPass, t++);        tcf[i++][j] = Filter_L(R_LowPass, t++); } } }}// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =// end of file  < Image_3C.C >

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品亚洲aⅴ乱码一区二区三区| 亚洲免费在线视频| 懂色中文一区二区在线播放| 日韩伦理免费电影| 日韩一区二区三区免费观看| 国产高清精品网站| 美女视频一区二区| 亚洲视频在线一区观看| 欧美不卡在线视频| 欧美性猛片aaaaaaa做受| av激情亚洲男人天堂| 狠狠色丁香久久婷婷综| 亚洲国产日韩av| 亚洲狠狠丁香婷婷综合久久久| 国产欧美视频一区二区三区| 精品国产乱码久久久久久蜜臀| 欧美日韩国产综合草草| 91成人网在线| 色综合久久久久久久| 色哟哟欧美精品| 在线区一区二视频| 91精品办公室少妇高潮对白| 在线免费观看日本欧美| 色先锋aa成人| 欧美丝袜丝交足nylons图片| 99视频在线观看一区三区| 国产凹凸在线观看一区二区| caoporm超碰国产精品| 91小视频在线免费看| 在线亚洲欧美专区二区| 欧美二区三区91| 国产三级精品视频| 中文久久乱码一区二区| 自拍偷自拍亚洲精品播放| 亚洲毛片av在线| 三级在线观看一区二区| 久久av中文字幕片| 成人免费av网站| 欧美一区二区在线看| 国产偷v国产偷v亚洲高清| 亚洲人123区| 国产一区二区三区四| 欧美综合在线视频| 日韩美女天天操| 亚洲猫色日本管| 蜜桃av噜噜一区二区三区小说| 成人综合婷婷国产精品久久| 欧美猛男超大videosgay| 国产欧美一区二区精品性| 亚洲精品成人悠悠色影视| 国内成+人亚洲+欧美+综合在线| 欧美色网一区二区| 国产精品久久久久毛片软件| 丝袜亚洲另类欧美| 99re这里只有精品首页| 久久综合九色综合97婷婷女人| 亚洲国产一区二区三区青草影视| 国产麻豆9l精品三级站| 91精品一区二区三区在线观看| 亚洲欧美在线视频| 国产精品一区一区| 欧美不卡一二三| 乱一区二区av| 欧美成人精品高清在线播放| 亚洲成av人片| 欧美伦理电影网| 日韩一区欧美二区| 欧美一区二区三区在| 美女视频第一区二区三区免费观看网站 | 亚洲女人的天堂| 国产成人啪午夜精品网站男同| 久久影院午夜片一区| 免费成人结看片| 日韩欧美精品三级| 麻豆国产精品777777在线| 在线电影国产精品| 免费观看在线综合色| 日韩欧美精品在线| 国产99精品国产| 一区二区三区在线视频观看| 色综合一个色综合| 亚洲mv大片欧洲mv大片精品| 91麻豆精品国产91久久久久久| 麻豆精品国产91久久久久久| 久久久久久久久蜜桃| 99re热这里只有精品免费视频| 有码一区二区三区| 欧美一区二区三区四区在线观看| 极品美女销魂一区二区三区| 国产精品视频九色porn| 欧美在线免费播放| 3d成人h动漫网站入口| 国产成人午夜电影网| 亚洲黄色小说网站| 精品88久久久久88久久久| 91黄色免费观看| 国产一区 二区| 亚洲国产美女搞黄色| 日本一区二区三区dvd视频在线| 99久久国产综合精品女不卡| 美女免费视频一区二区| 一区二区在线观看视频| 国产日产精品1区| 国产午夜精品久久久久久久| heyzo一本久久综合| 国产真实精品久久二三区| 亚洲欧美一区二区不卡| 久久久99精品久久| 欧美精品99久久久**| 日本韩国一区二区| 成人精品视频一区| 韩国女主播一区二区三区| 日本美女一区二区| 一区二区久久久久久| 国产精品国产三级国产| 亚洲国产精品v| 中文字幕精品一区 | 日韩精品一区二区三区在线播放| 在线亚洲高清视频| 在线欧美日韩国产| 91高清在线观看| 91国产免费看| 欧美精品视频www在线观看 | 色94色欧美sute亚洲13| 91传媒视频在线播放| 色国产精品一区在线观看| 成人精品gif动图一区| 99国产精品国产精品久久| 欧洲一区二区三区免费视频| 欧美女孩性生活视频| 日韩午夜在线观看视频| 久久一夜天堂av一区二区三区| 久久久久久麻豆| 亚洲欧美日韩久久| 亚洲va欧美va人人爽午夜 | 成人黄色a**站在线观看| 99九九99九九九视频精品| 欧美日韩一区二区三区在线看| 51精品视频一区二区三区| 国产午夜精品美女毛片视频| 一区二区日韩av| 99久久久精品免费观看国产蜜| 91麻豆国产自产在线观看| 91精品国产乱| 亚洲天堂成人在线观看| 青椒成人免费视频| 99久久国产综合色|国产精品| 欧美区在线观看| 日韩美女精品在线| 久久97超碰色| 欧美日韩视频第一区| 国产精品欧美一级免费| 免费高清在线一区| 91精品91久久久中77777| 久久久久久99精品| 久久精品国产亚洲a| 色偷偷久久一区二区三区| 久久影院视频免费| 久久成人免费网| 91精品黄色片免费大全| 亚洲一区二区三区三| 色婷婷激情久久| 综合激情网...| 一本一道综合狠狠老| 国产精品久线在线观看| av在线免费不卡| 国产欧美日韩中文久久| 激情综合色丁香一区二区| 欧美一区二区三区四区久久| 亚洲国产一区视频| 欧洲精品一区二区| 午夜亚洲国产au精品一区二区| 欧美日韩视频在线观看一区二区三区 | 精品福利一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美丰满高潮xxxx喷水动漫| 亚瑟在线精品视频| 4438x亚洲最大成人网| 成人午夜看片网址| 欧美高清在线精品一区| 色综合一区二区| 蜜桃视频在线观看一区| 欧美成人高清电影在线| 国产成人日日夜夜| 亚洲视频免费在线| 欧美日韩一区二区三区在线看| 日韩高清一区二区| 欧美激情在线一区二区| 日本韩国视频一区二区| 久国产精品韩国三级视频| 最新不卡av在线| 精品福利一二区| 99精品在线观看视频| 免费成人结看片| 日韩美女久久久| 日韩美女主播在线视频一区二区三区| 国产精品综合一区二区三区| 亚洲国产综合色| 国产精品日韩成人| 欧美日韩日日夜夜|