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

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

?? image.c

?? 小波變換算法
?? C
?? 第 1 頁 / 共 2 頁
字號:

#define AVE_DEL_YUV	// turn U&V to (U+V) , (U-V)
/** works dandy; it visually works at compactifying magnitudes : U & V are very similar
* also compactifies noise into the third band
* <> needs more testing to make sure this isn't image-anomalous
**/

#include <stdio.h>
#include <math.h>
#include <crblib/inc.h>
#include <crblib/fileutil.h>
#include <crblib/imutil.h>

#include "image.h"
#include "quantim.h"

#include "haar.h"
#include "dwt.h"
#include "dct.h"
#include "spt.h"
#include "cdf22.h"
#include "cdf24.h"
#include "bcw3.h"
#include "d4.h"
#include "f97.h"
#include "b97.h"
#include "l97.h"

#if 1	// words are Intel

#define fgetuw fgetuwi
#define fputuw fputuwi

#endif	// intel words

image * newImage(int width, int height,int planes)
{
int p,y;
image * im;
int **rows;

	if ( (im = new(image)) == NULL ) return NULL;

	im->width = width;
	im->height = height;
	im->planes = planes;
	im->plane_size = width*height;
	im->plane_bytes = (im->plane_size)*sizeof(int);
	im->tot_bytes = im->plane_bytes * planes;
	im->tot_size = im->plane_size * planes;

	if ( (im->data = newarray(int **,planes)) == NULL ) {
		freeImage(im); return NULL;
	}

	for(p=0;p<planes;p++) {

		if ( (im->data[p] = newarray(int *,height+1)) == NULL ) {
			freeImage(im); return NULL;
		}
		rows = im->data[p];

		if ( (rows[0] = malloc(im->plane_bytes + height)) == NULL ) {
			freeImage(im); return NULL;
		}

		for (y = 1; y <= height; y++)
		    rows[y] = rows[y-1] + width;

  	}

return im;
}

imageFloat * newImageFloat(int width, int height,int planes)
{
int p,y;
imageFloat * im;
double **rows;

	if ( (im = new(image)) == NULL ) return NULL;

	im->width = width;
	im->height = height;
	im->planes = planes;
	im->plane_size = width*height;
	im->plane_bytes = (im->plane_size)*sizeof(double);
	im->tot_bytes = im->plane_bytes * planes;
	im->tot_size = im->plane_size * planes;

	if ( (im->data = newarray(double **,planes)) == NULL ) {
		freeImageFloat(im); return NULL;
	}

	for(p=0;p<planes;p++) {

		if ( (im->data[p] = newarray(double *,height+1)) == NULL ) {
			freeImageFloat(im); return NULL;
		}
		rows = im->data[p];

		if ( (rows[0] = malloc(im->plane_bytes + height)) == NULL ) {
			freeImageFloat(im); return NULL;
		}

		for (y = 1; y <= height; y++)
		    rows[y] = rows[y-1] + width;

  	}

return im;
}

image * copyImage(image *im)
{
image *new;
int p;

	if ( (new = newImage(im->width,im->height,im->planes)) == NULL )
		return NULL;

	for(p=0;p<im->planes;p++) {
		memcpy(new->data[p][0],im->data[p][0],im->plane_bytes);
	}

return new;
}

image * newImageFromFloat(imageFloat *im)
{
image *new;

	if ( (new = newImage(im->width,im->height,im->planes)) == NULL )
		return NULL;

return new;
}

imageFloat * newImageFloatFromFloat(imageFloat *im)
{
imageFloat *new;

	if ( (new = newImageFloat(im->width,im->height,im->planes)) == NULL )
		return NULL;

return new;
}

image * newImageFrom(image *im)
{
image *new;

	if ( (new = newImage(im->width,im->height,im->planes)) == NULL )
		return NULL;

return new;
}
imageFloat * newImageFloatFrom(image *im)
{
imageFloat *new;

	if ( (new = newImageFloat(im->width,im->height,im->planes)) == NULL )
		return NULL;

return new;
}


void freeImage(image *im) 
{
	if (im ) {
		if ( im->data ) {
			int p;
			for(p=0;p<im->planes;p++) {
				if ( im->data[p] ) {
					if (im->data[p][0] )
						free(im->data[p][0]);
					free(im->data[p]);
				}
			}
			free(im->data);
		}
		free(im);
	}
}

void freeImageFloat(imageFloat *im) 
{
	if (im ) {
		if ( im->data ) {
			int p;
			for(p=0;p<im->planes;p++) {
				if ( im->data[p] ) {
					if (im->data[p][0] )
						free(im->data[p][0]);
					free(im->data[p]);
				}
			}
			free(im->data);
		}
		free(im);
	}
}

void capBandByte(int *band,int width,int height,int fullw,int cap)
{
int x,y,v,minv,maxv;
int *dp;
int rowPad = fullw - width;
double scale;

	minv = 999; maxv = -999;
	dp = band;
	for(y=height;y--;) {
		for(x=width;x--;) {
			v = *dp++;
			if ( v < minv ) minv = v;
			if ( v > maxv ) maxv = v;
		}
		dp += rowPad;
	}

	maxv = abs(maxv);
	if ( abs(minv) > abs(maxv) ) maxv = abs(minv);
	if ( maxv < cap ) return;

	scale = (double)cap/maxv;
	dp = band;
	for(y=height;y--;) {
		for(x=width;x--;) {
			*dp = (*dp)*scale; dp++;
		}
		dp += rowPad;
	}
}

void capImageBands(image *im,int levels,int cap)
{
int p,l,sizeX,sizeY;
int **rows;

	for(p=0;p<im->planes;p++) {
		rows = im->data[p];
		for (l = levels; l > 0; l--) {
			sizeX = im->width >> l;
			sizeY = im->height >> l;

			if (l == levels) 
				capBandByte(rows[0], sizeX, sizeY, im->width,cap);

			capBandByte(rows[0] + sizeX, sizeX, sizeY, im->width,cap);
			capBandByte(rows[sizeY], sizeX, sizeY, im->width,cap);
			capBandByte(rows[sizeY]+sizeX, sizeX, sizeY, im->width,cap);
		}
	}
}

void subtractImage(image *im,image *by)
{
int p,r;
int *ptr,*bptr;
	for(p=0;p<im->planes;p++) {
		ptr = im->data[p][0];
		bptr =by->data[p][0];
		for(r=im->plane_size;r--;) {
			*ptr++ -= *bptr++;
		}
	}
}

void addImage(image *im,image *by)
{
int p,r;
int *ptr,*bptr;
	for(p=0;p<im->planes;p++) {
		ptr = im->data[p][0];
		bptr =by->data[p][0];
		for(r=im->plane_size;r--;) {
			*ptr++ += *bptr++;
		}
	}
}

void zeroImage(image *im)
{
int p;
	for(p=0;p<im->planes;p++)
		memclear(im->data[p][0],im->plane_bytes);
}

void patchImage(image *fm,image *to,int fmx,int fmy,int w,int h,int tox,int toy)
{
int x,y,p;
int **fmrows,**torows;
int *fmrow,*torow;
	for(p=0;p<fm->planes;p++) {
		fmrows = fm->data[p];
		torows = to->data[p];
		for(y=0;y<h;y++) {
			torow = (torows[y+toy])+tox;
			fmrow = (fmrows[y+fmy])+fmx;
			for(x=w;x--;) {
				*torow++ = *fmrow++;
			}
		}
	}
}

void patchImageFromFloat(imageFloat *fm,image *to)
{
int p,r;
int *rptr; double *fptr;

	for(p=0;p<to->planes;p++) {
		fptr = fm->data[p][0]; rptr = to->data[p][0];
		for(r=to->plane_size;r--;) *rptr++ = *fptr++;
	}
}

void patchImageFloatFrom(image *fm,imageFloat *to)
{
int p,r;
int *rptr; double *fptr;

	for(p=0;p<to->planes;p++) {
		fptr = to->data[p][0]; rptr = fm->data[p][0];
		for(r=to->plane_size;r--;) *fptr++ = *rptr++;
	}
}

void transposeLHs(image *im,int levels)
{
int p,x,y,l,w,h;
int **rows,z;

	/***
	*
	*	This is a beautiful free compression win!
	*
	*	<> the SPT and DWT do a transpose right before this
	*		instead of two transposes, do zero
	*	this should be absorbed into each transform in any case
	*
	***/

	assert( im->width == im->height );

	for(p=0;p<im->planes;p++) {
		for(l=1;l<=levels;l++) {
			w = (im->width) >> l;
			h = (im->height) >> l;
			rows = &(im->data[p][h]);
			for(y=0;y<h;y++) {
				for(x=y+1;x<w;x++) {
					z			= rows[x][y];
					rows[x][y]	= rows[y][x];
					rows[y][x]	= z;
				}
			}
		}
	}
}

void dwtImage(image *im,imageFloat *imf,int levels,bool inverse)
{
int p;

if ( im->width != imf->width || im->height != imf->height ) return;

for(p=0;p<im->planes;p++)
	waveletTransform2D(im->data[p],imf->data[p],im->width,im->height,levels,inverse);

}

void cdf22ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		cdf22_2D(im->data[p],im->width,im->height,levels,inverse);
}

void cdf22Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	cdf22ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}


void f97ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		f97_2D(im->data[p],im->width,im->height,levels,inverse);
}

void f97Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	f97ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}
void b97ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		b97_2D(im->data[p],im->width,im->height,levels,inverse);
}

void b97Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	b97ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}
void l97ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		l97_2D(im->data[p],im->width,im->height,levels,inverse);
}

void l97Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	l97ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}

void cdf24ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		cdf24_2D(im->data[p],im->width,im->height,levels,inverse);
}

void cdf24Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	cdf24ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}

void bcw3ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		bcw3_2D(im->data[p],im->width,im->height,levels,inverse);
}

void bcw3Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	bcw3ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}

void d4ImageInt(image *im,int levels,bool inverse)
{
int p;
	for(p=0;p<im->planes;p++)
		d4_2D(im->data[p],im->width,im->height,levels,inverse);
}

void d4Image(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	d4ImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}

void sptImageInt(image *im,int levels,bool inverse)
{
int p;

/** special-case for the situation where quantizer == 1
	instead of	:	spt -> float -> quantized ints
	we do		: 	spt -> ints
***/

	for(p=0;p<im->planes;p++)
		sp_Transform2D(im->data[p],im->width,im->height,levels,inverse);
}

void sptImage(image *im,imageFloat *imF,int levels,bool inverse)
{
/** it's unnatural to copy the results of the spt into
*	a float buffer, but we do it for similarity to the
*	other transforms
**/

	if ( inverse ) patchImageFromFloat(imF,im);

	sptImageInt(im,levels,inverse);

	if (!inverse ) patchImageFloatFrom(im,imF);
}

void dctImage(image *im,imageFloat * imf,bool inverse)
{
int p,x,y,i;
int block[64],*bptr,*line;
double blockf[64],*fptr,*fline;

	if ( inverse ) {
		idct_init();	
		/** imf -> im  **/

		for(p=0;p<im->planes;p++) {
			for(y=0;y<im->height;y+=8) {
				for(x=0;x<im->width;x+=8) {
					fptr = blockf;
					for(i=0;i<8;i++) {
						fline = imf->data[p][y+i] + x;
						*fptr++ = *fline++; *fptr++ = *fline++; *fptr++ = *fline++; *fptr++ = *fline++;
						*fptr++ = *fline++; *fptr++ = *fline++; *fptr++ = *fline++; *fptr++ = *fline++;
					}

					idct(blockf,block);
				
					bptr = block;
					for(i=0;i<8;i++) {
						line = im->data[p][y+i] + x;
						*line++ = *bptr++; *line++ = *bptr++; *line++ = *bptr++; *line++ = *bptr++;
						*line++ = *bptr++; *line++ = *bptr++; *line++ = *bptr++; *line++ = *bptr++;
					}
				}
			}
		}

	} else {
		dct_init();			
		/** im  -> imf **/

		for(p=0;p<im->planes;p++) {
			for(y=0;y<im->height;y+=8) {
				for(x=0;x<im->width;x+=8) {
					bptr = block;
					for(i=0;i<8;i++) {
						line = im->data[p][y+i] + x;
						*bptr++ = *line++; *bptr++ = *line++; *bptr++ = *line++; *bptr++ = *line++;
						*bptr++ = *line++; *bptr++ = *line++; *bptr++ = *line++; *bptr++ = *line++;
					}

					dct(block,blockf);

					fptr = blockf;
					for(i=0;i<8;i++) {
						fline = imf->data[p][y+i] + x;
						*fline++ = *fptr++; *fline++ = *fptr++; *fline++ = *fptr++; *fline++ = *fptr++;
						*fline++ = *fptr++; *fline++ = *fptr++; *fline++ = *fptr++; *fline++ = *fptr++;
					}				
				}
			}
		}
	}

}

void haarImageInt(image *im,int levels,bool inverse)
{
int p;

	/** <>
	*	by far the slowest part of the Haar transform is
	*	the copy & shuffle.  This could be eliminated entirely
	*	if we adapted our coders to work on the tree-type data
	**/

	if ( inverse ) {
		image * temp;
		temp = copyImage(im);
		deshuffleImage(im,temp,levels);
		freeImage(temp);
	}

	for(p=0;p<im->planes;p++) {
		haar_Transform2D(im->data[p],im->width,im->height,levels,inverse);
	}

	if ( !inverse ) {
		image * temp;
		temp = copyImage(im);
		shuffleImage(temp,im,levels);
		freeImage(temp);
	}

}
void haarImage(image *im,imageFloat *imF,int levels,bool inverse)
{
	if ( inverse ) patchImageFromFloat(imF,im);
	haarImageInt(im,levels,inverse);
	if (!inverse ) patchImageFloatFrom(im,imF);
}

void transformImage(image *raw,imageFloat *trans,int levels,bool inverse,int transformN)
{
	switch(transformN) {
		case TRANS_SPT :
			sptImage(raw,trans,levels,inverse);
			break;
		case TRANS_HAAR :

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久一| 色综合久久中文字幕| 日韩亚洲欧美一区二区三区| 午夜欧美视频在线观看| 91精品国产综合久久精品app| 亚欧色一区w666天堂| 亚洲欧美二区三区| 欧美影视一区在线| 丝袜美腿高跟呻吟高潮一区| 日韩天堂在线观看| 国产精品18久久久| 亚洲精品国产精华液| 欧美日韩大陆在线| 激情综合网激情| 国产精品麻豆一区二区| 欧美色老头old∨ideo| 日本视频一区二区三区| 久久久蜜臀国产一区二区| 成人短视频下载| 亚洲精品国久久99热| 91精品国产一区二区三区香蕉| 久久成人免费电影| 日韩理论在线观看| 在线电影国产精品| 国产精品一线二线三线精华| 亚洲天堂精品视频| 欧美一区永久视频免费观看| 国产精品99精品久久免费| 一区二区在线观看视频 | 国产麻豆成人传媒免费观看| 国产色综合一区| 欧美性受xxxx黑人xyx| 精品一区二区三区免费视频| 亚洲青青青在线视频| 日韩一级片在线观看| 色婷婷香蕉在线一区二区| 麻豆91精品91久久久的内涵| 中文字幕五月欧美| 欧美精品一级二级| 国产一区三区三区| 午夜精品福利一区二区三区av | av电影在线观看完整版一区二区| 亚洲一区二区三区小说| 久久久久久99精品| 欧美性大战xxxxx久久久| 国产成人综合在线播放| 丝袜国产日韩另类美女| 中文字幕一区二区三区乱码在线| 日韩欧美电影一区| 欧美日韩国产在线播放网站| 成人深夜在线观看| 卡一卡二国产精品| 偷窥少妇高潮呻吟av久久免费| 国产女同互慰高潮91漫画| 日韩三级视频中文字幕| 欧美在线综合视频| 91在线观看地址| 成人免费精品视频| 国内久久精品视频| 欧美aaaaa成人免费观看视频| 亚洲自拍偷拍综合| 亚洲日本一区二区三区| 中文字幕乱码亚洲精品一区| 精品av久久707| 欧美哺乳videos| 717成人午夜免费福利电影| 欧美综合在线视频| 一本久道久久综合中文字幕 | 亚洲美女免费视频| 国产日韩欧美高清| 国产午夜精品在线观看| 欧美精品一区二| 精品电影一区二区三区| 精品国产免费一区二区三区四区 | 欧美精品一区二区三区很污很色的| 欧美日韩国产高清一区二区| 欧美日韩午夜影院| 欧美日韩午夜精品| 7777精品伊人久久久大香线蕉经典版下载| 欧美怡红院视频| 欧美精品一二三区| 日韩一级高清毛片| 精品日韩99亚洲| 久久只精品国产| 国产午夜精品久久久久久久 | 99久久精品国产毛片| aaa欧美大片| 色综合天天综合网天天看片| 色爱区综合激月婷婷| 精品污污网站免费看| 欧美日韩在线三区| 日韩欧美国产综合一区| 久久午夜老司机| 国产精品久久久久影院| 亚洲欧美日韩一区二区三区在线观看| 亚洲免费在线视频一区 二区| 一区二区三区免费| 青娱乐精品视频| 国产盗摄精品一区二区三区在线 | 亚洲色图制服诱惑| 亚洲大片在线观看| 卡一卡二国产精品 | 国产精品免费视频网站| 亚洲欧美日韩国产综合| 天天av天天翘天天综合网色鬼国产 | 国产99一区视频免费| zzijzzij亚洲日本少妇熟睡| 在线免费观看一区| 日韩欧美另类在线| 国产精品丝袜久久久久久app| 一区二区三区欧美日| 久久激情五月婷婷| www.亚洲在线| 欧美一激情一区二区三区| 国产欧美综合色| 亚洲成精国产精品女| 国产一区欧美一区| 欧美综合久久久| 久久久综合网站| 亚洲国产日韩一级| 国产精品一二三区| 欧美巨大另类极品videosbest | 亚洲人精品午夜| 毛片av中文字幕一区二区| 不卡的电影网站| 日韩免费性生活视频播放| 亚洲欧美激情视频在线观看一区二区三区| 香蕉乱码成人久久天堂爱免费| 国产成人av资源| 欧美日本一区二区在线观看| 国产精品毛片久久久久久| 蜜臀av亚洲一区中文字幕| 色综合色狠狠天天综合色| 精品成人a区在线观看| 亚洲图片欧美视频| 白白色 亚洲乱淫| 久久久久久久久一| 天天影视网天天综合色在线播放| av在线不卡免费看| 久久尤物电影视频在线观看| 丝袜亚洲另类欧美| 91美女在线视频| 中文字幕va一区二区三区| 久久精品国内一区二区三区| 欧美日韩国产成人在线免费| 亚洲欧美色综合| 成人aaaa免费全部观看| www精品美女久久久tv| 日本成人在线网站| 欧美日韩成人综合| 亚洲一区二区三区小说| 99久久夜色精品国产网站| 久久人人爽人人爽| 精品一区二区在线播放| 91精品国产综合久久久久久漫画| 亚洲国产欧美另类丝袜| 91精品福利在线| 亚洲天堂成人网| 99久久99久久综合| 国产精品卡一卡二| 高清不卡一区二区| 国产清纯在线一区二区www| 国产精品自拍三区| 久久理论电影网| 国产成人8x视频一区二区| 久久久久国色av免费看影院| 久久69国产一区二区蜜臀| 欧美tickle裸体挠脚心vk| 麻豆精品在线播放| 欧美精品一区二区三区久久久| 另类调教123区| 337p日本欧洲亚洲大胆精品 | 欧美一区二区三区免费在线看| 亚洲国产你懂的| 91精品国产综合久久福利软件| 日本不卡视频在线| 欧美tickling网站挠脚心| 激情六月婷婷久久| 久久嫩草精品久久久久| 粉嫩av亚洲一区二区图片| 中文一区一区三区高中清不卡| 不卡av免费在线观看| ...av二区三区久久精品| 91官网在线免费观看| 亚洲高清免费在线| 日韩欧美在线观看一区二区三区| 国产又粗又猛又爽又黄91精品| 日本一区二区三区国色天香 | 亚洲大型综合色站| 欧美人体做爰大胆视频| 九九**精品视频免费播放| 久久久九九九九| 91浏览器入口在线观看| 午夜视频在线观看一区二区| 日韩欧美激情一区| 成人免费三级在线| 亚洲一区二区免费视频| 精品人在线二区三区| av男人天堂一区| 日本中文字幕一区|