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

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

?? fvscanny.cpp

?? 指紋識別的程序
?? CPP
字號:
// Taken from the canny.c file// Robot Vision Group// Dept. of Artifical Intelligence// University of Edinburgh//// Authors: Bob Fisher, Dave Craft, A Fitzgibbion// orginal date September 86// program: canny.c//// purpose: to apply a simple symmetric canny operator to any size image// // Revised September 2002// By Shivang Patel// Revisions made to work with Fingerprint Verification System (FVS)#include <math.h>#include <stdio.h>#include <stdlib.h>#include "fvsimage.h"#include "vector.h"#include "fvstypes.h"/*double hypotenuse(double x, double y);double gaussian(double x, double s);FvsError_t canny_core(double stddev, FvsImage<FVS_IMAGE_TYPE> & img, Vector<unsigned char> & derivative_mag, 					  Vector<unsigned char> & magnitude, Vector <unsigned char> & orientation);int follow(int i, int j, int low, FvsImage<FVS_IMAGE_TYPE> & img, Vector<unsigned char> & magnitude, Vector<unsigned char> & orientation);*/// Scales angles in radians to fit within the 0-255 range of unsigned// char variables#define ORIENT_SCALE 40.0// hypot can't cope when both it's arguments are zero, hence this hack...double hypotenuse(double x, double y){	if (x == 0.0 && y == 0.0) return 0.0;	else return hypot(x,y);}// gaussian function (centered at the origin and ignoring the factor of // 1/(s * sqrt(2 *PI))) double gaussian (double x, double s){	return (exp((-x*x)/(2*s*s)));}FvsError_t canny_core(double stddev, FvsImage<FVS_IMAGE_TYPE> & img, Vector<unsigned char> & derivative_mag, 					  Vector<unsigned char> & magnitude, Vector <unsigned char> & orientation){	int filter_width; // length of 1-D gaussian mask	Vector<float> gsmooth_x, gsmooth_y;	Vector<float> derivative_x, derivative_y;	int i, j, k, n; // counter	int t; // temp grad magnitude variable	double a, b, c, d, g0; // mask generation intermediate vars	double ux, uy;	double t1, t2;	double G[20], dG[20], D2G[20]; // gaussian & derivative filter masks	double gc, gn, gs, gw, ge, gnw, gne, gsw, gse; 	int jlimit, jstart;	int ilimit;	int jfactor;	int kfactor1, kfactor2;	int kfactor;	int cindex, nindex, sindex, windex, eindex, nwindex, neindex, swindex, seindex;	int low = 1, high = 255; // tracker hysteresis parameters	int col_plus, col_minus; // col + 1 and col-1 respectiably	int picsize;	int mag_overflow_count = 0; // used to measure how often mag array overflows	int man_underflow_count = 0; // used to measure how often mag array underflow	picsize = img.width() * img.height();	// calculate coefficents for 1-dimensional G, dG/dn and delta squared G filters	for (n = 0; n < 20; n++)	{		a = gaussian(((double)n), stddev);		if (a > 0.005 || n<2)		{			b = gaussian((double)n-0.5, stddev);			c = gaussian((double)n+0.5, stddev);			d = gaussian((double)n, stddev);			G[n] = (a + b + c)/3/(6.283185*stddev*stddev);			dG[n] = c - b;			D2G[n] = 1.6 * d - a; // DOG		}		else break;	} // for n	filter_width = n;		// allocate space for gaussian smoothing arrays	gsmooth_x.resize(picsize);	gsmooth_y.resize(picsize);	// produce x and y convolutions with gaussian	ilimit = img.width() - (filter_width - 1);	jstart = img.width() - (filter_width - 1);	jlimit = img.width() - (img.height() - (filter_width - 1));	for (i = filter_width - 1; i < ilimit; ++i)	{		for (jfactor = jstart; jstart < jlimit; jfactor += img.width())		{			cindex = i + jfactor;			t1 = img[i][cindex] * G[0];			t2 = t1;			for (k = 1, kfactor = cindex - img.width(), kfactor2 = cindex + img.width();			k < filter_width; k++, kfactor1 -= img.width(), kfactor2 += img.width())			{				t1 += G[k] * (img[kfactor1 - (kfactor1/img.width())][kfactor1/img.width()] +					img[kfactor2 - (kfactor2/img.width())][kfactor2/img.width()]);				t2 += G[k] * (img[(cindex - k) - ((cindex - k)/img.width())][((cindex - k)/					img.width())] + img[(cindex + k) - ((cindex + k)/img.width())][((cindex +k)/img.width())]);			} // for k			gsmooth_x[cindex] = t1;			gsmooth_y[cindex] = t2;		} // for jfactor	} // for i	// allocate space for gradient arrays 	derivative_x.resize(picsize);	derivative_y.resize(picsize);	// produce x and y convolutions with derivative of gaussian	for (i = filter_width - 1; i < ilimit; ++i)	{		for (jfactor = jstart; jfactor < jlimit; jfactor += img.width())		{			t1 = 0;			cindex = i + jfactor;			for (k = 1; k < filter_width; ++k)				t1 += dG[k] * (gsmooth_x[cindex - k] - gsmooth_x[cindex + k]);			derivative_x[cindex] = t1;		} // for jfactor	} // for i	for (i = n; i < img.width() - n; ++i)	{		for (jfactor = jstart; jfactor < jlimit; jfactor += img.width())		{			t2 = 0; 			cindex = i + jfactor;			for (k = 1, kfactor = img.width(); k < filter_width; k++, kfactor += img.width())				t2 += dG[k] * (gsmooth_y[cindex - kfactor] - gsmooth_y[cindex + kfactor]);			derivative_y[cindex] = t2;		} // for jfactor 	} // for i	// non-maximum suppression (4 cases for orientation of line of max slope)	ilimit = img.width() - filter_width;	jstart = img.width() - filter_width;	jlimit = img.width() * (img.height() - filter_width);		for (i = filter_width; i < ilimit; ++i)	{		for (jfactor = jstart; jfactor < jlimit; jfactor += img.width())		{			// calculate current indeces			cindex = i + jfactor;			nindex = cindex - img.width();			sindex = cindex + img.width();			windex = cindex - 1;			eindex = cindex + 1;			nwindex = nindex - 1;			neindex = nindex + 1;			swindex = sindex - 1;			seindex = sindex + 1;			ux = derivative_x[cindex];			uy = derivative_y[cindex];			gc = hypotenuse(ux, uy);						nwindex = (nwindex<0)?0:nwindex;			// scale fv to fit into an unsighed change arry			t = gc * 20.0;						derivative_mag[cindex] = (t < 256?t:255);			gn = hypotenuse(derivative_x[nindex], derivative_y[nindex]);			gs = hypotenuse(derivative_x[sindex], derivative_y[sindex]);			gw = hypotenuse(derivative_x[windex], derivative_y[windex]);			ge = hypotenuse(derivative_x[eindex], derivative_y[eindex]);			gne = hypotenuse(derivative_x[neindex], derivative_y[neindex]);			gnw = hypotenuse(derivative_x[nwindex], derivative_y[nwindex]);			gsw = hypotenuse(derivative_x[swindex], derivative_y[swindex]);			gse = hypotenuse(derivative_x[seindex], derivative_y[seindex]);			if (ux * uy > 0)			{				if (fabs(ux) < fabs(uy))				{					if ((g0 = fabs(uy * gc)) < fabs(ux * gse + (uy - ux) * gs) || 						g0 <= fabs(ux * gnw + (uy - ux)*gn))						continue;				} else {					if ((g0 = fabs(ux * gc)) < fabs(uy * gse + (ux - uy) * gc) || 						g0 <= fabs(uy * gnw + (ux - uy) * gw))						continue;				} 			} else {				if (fabs(ux) < fabs(uy))				{					if ((g0 = fabs(uy * gc)) < fabs(ux * gne - (uy + ux) * gn) || 						g0 <= fabs(ux * gsw - (uy + ux) * gs))						continue;				} else {					if ((g0 = fabs(ux * gc)) < fabs(uy * gne - (ux + uy) * gc) ||						g0 <= fabs(uy * gsw - (ux + uy) * gw))						continue;				}			}			// seems to be a good scale factor			magnitude [cindex] = derivative_mag[cindex];			// pi * 40 ~= 128 - direction is (thought of as ) a sign byte			orientation[cindex] = atan2(ux, uy) * ORIENT_SCALE;		}	}		//SP: vector class destructor will free all memory when function ends	return FvsOk;}// follow a connect edge int follow(int i, int j, int low, FvsImage<FVS_IMAGE_TYPE> & img, Vector<unsigned char> & magnitude, Vector<unsigned char> & orientation){	int k, l; // counters	int i_plus_1, i_minus_1, j_plus_1, j_minus_1;	long index, kindex;	char break_flag;	i_plus_1 = i + 1;	i_minus_1 = i - 1;	j_plus_1 = j + 1;	j_minus_1 = j - 1;	index = i + j * img.width();	if (j_plus_1 >= img.height()) j_plus_1 = img.height() - 1;	if (j_minus_1 < 0) j_minus_1 = 0;	if (i_plus_1 >= img.height()) i_plus_1 = img.height() - 1;	if (i_minus_1 < 0) i_minus_1 = 0;	if (!img[i][j])	{		// current point must be added to the list of tracked points		img[i][j] = magnitude[j * img.width() + i];		// now we check immediately adhacent points to see if they too 		// could be added to the track		break_flag = 0;		for (k = i_minus_1; k <= i_plus_1; k++)		{			for (l = j_minus_1; l <= j_plus_1; ++l)			{				kindex = k+l * img.width();				// SP: Threshold low value should be replaced by 1				if (!(l == j && k == i) && magnitude[kindex] >= 1) 				{					if (follow(k, l, low, img,magnitude,orientation)) 					{						break_flag = 1;						break;					} // if follow				} // if (!(l==j && k==i)			} // for l			if (break_flag) break;		} // for k		return 1;	} 	else return 0;}// Track the edges in the magnitude away, starting at points that exceed the "high"// threshold and continuing to track as long as point values don't duck below the "low"// threshold (yes it's hystercsis... I'm sure that hyster means "womb" (as in hysterical),// but I don't know what its doin in a common engineering term)void thresholding_tracker(int high, int low, FvsImage<FVS_IMAGE_TYPE> & img, Vector<unsigned char> & magnitude,						  Vector<unsigned char> & orientation){	int i, j, k; // counters	// clear data array before tracking/*	for (i = 0; i < img.height(); i++)	{		for (j = 0; j < img.width(); j++)		{			img[i][j] = 0;		}	}*/	// threshold image with hystersis: follow from each strong edge point	for (i = 0; i < img.width(); i++)	{		for (j = 0; j < img.height(); j++)		{			if (magnitude[i + img.width() * j] >= high)				follow(i, j, low, img, magnitude, orientation);		}	}}int FVSCannyEdgeDect(FvsImage<FVS_IMAGE_TYPE> & img, int low=1, int high=255){	double s = 1.0; // standard deviation of gaussian	Vector<unsigned char> derivative_mag; // mag of del G before non-maximum suppression	Vector<unsigned char> magnitude, orientation; // mag & orintation agter non-max suppression	// resize vectors	derivative_mag.resize(img.width() * img.height());	magnitude.resize(img.width() * img.height());	orientation.resize(img.width() * img.height());	// call canny core routines - these perform a gaussian smoothing, calculate a gradient	// array, and suppress non-maximal points in this array	canny_core(s, img, derivative_mag, magnitude, orientation);	// here write orientation and magnitude to a file to see how they look		// track edges 	thresholding_tracker(high, low, img, magnitude, orientation);	// to see the image output img to a file	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合婷婷久久| 成人欧美一区二区三区视频网页| 日韩精品一区二区三区视频| 国产精品萝li| 久久精品国产久精国产| 一本到一区二区三区| 久久亚洲二区三区| 首页国产欧美日韩丝袜| 91在线视频官网| 日本一区二区三区国色天香| 日韩精品欧美精品| 欧美午夜精品免费| 亚洲人成精品久久久久久| 国产91精品在线观看| 日韩手机在线导航| 亚洲a一区二区| 欧美综合亚洲图片综合区| 国产精品人人做人人爽人人添| 激情综合一区二区三区| 欧美一区二区三区免费视频| 一区二区在线观看免费视频播放| 大桥未久av一区二区三区中文| 日韩欧美一区中文| 亚洲国产精品一区二区www在线 | 日本不卡的三区四区五区| 9色porny自拍视频一区二区| 久久久国产精华| 国产一区二区三区最好精华液| 91精品国产麻豆国产自产在线| 亚洲午夜久久久久久久久久久| 色久优优欧美色久优优| 亚洲欧洲三级电影| av在线不卡电影| 综合久久久久综合| 91亚洲午夜精品久久久久久| 国产精品久久久久三级| 高清国产一区二区| 亚洲欧洲另类国产综合| 99re这里都是精品| 一区二区三区丝袜| 欧美精品乱码久久久久久按摩| 午夜精品久久久久影视| 欧美精品乱码久久久久久 | 亚洲精品一卡二卡| 色婷婷精品久久二区二区蜜臂av| 亚洲欧洲综合另类在线| 欧美综合一区二区三区| 日韩国产精品91| 亚洲精品一区二区三区影院| 国产一区二区三区综合| 国产精品麻豆一区二区| 欧美亚洲综合网| 蜜桃av一区二区三区电影| 久久综合色婷婷| 成人黄色软件下载| 亚洲成人高清在线| 亚洲精品在线三区| 色综合久久九月婷婷色综合| 天天综合色天天综合| 久久九九影视网| 91片黄在线观看| 美国毛片一区二区| 中文字幕一区二区在线观看 | 成人性生交大片免费看中文| 综合激情网...| 91精品午夜视频| 大美女一区二区三区| 亚洲福利一二三区| 国产欧美日韩三区| 欧美人体做爰大胆视频| 国产盗摄女厕一区二区三区| 夜色激情一区二区| 国产亚洲精品bt天堂精选| 日本韩国精品一区二区在线观看| 日韩av一二三| 亚洲欧美激情小说另类| 91精品国产色综合久久| 成人av电影在线播放| 免费在线观看视频一区| 亚洲欧美乱综合| 久久综合av免费| 在线视频观看一区| 成人激情文学综合网| 美国十次了思思久久精品导航| 亚洲精品免费在线| 久久久午夜精品理论片中文字幕| 欧美性生交片4| 99久久国产综合色|国产精品| 另类小说图片综合网| 一区二区三区四区在线免费观看| 26uuu国产在线精品一区二区| 在线看国产一区| a亚洲天堂av| 国产伦理精品不卡| 免播放器亚洲一区| 亚洲电影中文字幕在线观看| 国产精品久久久久一区二区三区共| 日韩视频一区在线观看| 精品视频一区 二区 三区| 一本色道综合亚洲| 99久久久精品| 不卡大黄网站免费看| 精品一区二区影视| 美脚の诱脚舐め脚责91 | 欧美日韩一区二区三区四区五区| 成人激情开心网| 粉嫩蜜臀av国产精品网站| 久久97超碰色| 久久99热国产| 韩国欧美国产1区| 另类小说图片综合网| 免费观看久久久4p| 精品无人码麻豆乱码1区2区| 免费成人在线影院| 青草av.久久免费一区| 青青国产91久久久久久| 蜜臀久久久99精品久久久久久| 午夜av一区二区三区| 亚洲sss视频在线视频| 亚洲国产精品一区二区久久恐怖片| 一区二区成人在线观看| 亚洲影视资源网| 日韩经典中文字幕一区| 麻豆精品久久久| 国产精品资源网| 99精品久久只有精品| 色婷婷综合在线| 欧美日韩大陆一区二区| 6080亚洲精品一区二区| 欧美sm极限捆绑bd| 久久精品在线免费观看| 中文字幕一区二区三区av| 亚洲精品国产一区二区精华液| 亚洲一区二区三区爽爽爽爽爽| 亚洲成a人片综合在线| 日韩和欧美一区二区| 国产在线精品一区二区三区不卡| 欧美精品一级二级| 欧美一区二区三区免费观看视频| 精品国产99国产精品| 亚洲国产岛国毛片在线| 一区二区三区在线视频免费| 日韩国产在线一| 国产电影一区在线| 色欧美乱欧美15图片| 在线成人免费观看| 亚洲国产精品黑人久久久| 一区二区三国产精华液| 麻豆精品久久久| 97国产精品videossex| 欧美精品日韩一本| 国产精品美女一区二区| 日韩高清在线观看| 成人午夜精品一区二区三区| 欧美色电影在线| 欧美国产禁国产网站cc| 五月婷婷综合网| 成人动漫一区二区| 欧美一区二区三区不卡| 国产精品国产三级国产a| 午夜成人免费视频| 99久久精品国产一区| 日韩一区二区精品| 一区二区日韩电影| 成人av动漫网站| 精品va天堂亚洲国产| 亚洲一区二区三区小说| 国产成a人亚洲| 日韩一区二区三区av| 亚洲色图一区二区三区| 国产精品羞羞答答xxdd| 日韩一二在线观看| 一区二区三区四区不卡在线 | 国产精品久久夜| 青青草精品视频| 欧美丝袜丝交足nylons| 亚洲国产高清在线观看视频| 麻豆久久久久久久| 在线不卡a资源高清| 亚洲精品大片www| thepron国产精品| 久久综合九色综合欧美就去吻| 性做久久久久久久免费看| 91在线观看视频| 国产精品三级av| 国产精品一卡二卡| 午夜伊人狠狠久久| 91丨porny丨户外露出| 久久蜜桃av一区精品变态类天堂 | 亚洲精品综合在线| 成人午夜av在线| 久久精品视频在线看| 精品在线免费观看| 精品伦理精品一区| 麻豆国产精品777777在线| 欧美一区二区三区成人| 男人的j进女人的j一区| 欧美精品色一区二区三区| 天天综合色天天| 欧美疯狂做受xxxx富婆|