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

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

?? fvscanny.cpp

?? 經典的C語言指紋識別程序
?? 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一区二区三区免费野_久草精品视频
欧美一二三四在线| 亚洲精品成人a在线观看| 国产精品沙发午睡系列990531| 亚洲欧洲制服丝袜| 免费视频最近日韩| 色综合色综合色综合| 精品国产成人系列| 亚洲国产成人精品视频| 99视频精品全部免费在线| 26uuu久久天堂性欧美| 午夜激情久久久| 色欧美片视频在线观看| 久久夜色精品一区| 美女网站在线免费欧美精品| 91免费视频网| 中文字幕制服丝袜一区二区三区 | 久久99国产精品免费网站| 91麻豆swag| 亚洲欧洲另类国产综合| 精品一区二区免费视频| 欧美军同video69gay| 亚洲视频你懂的| 成人a免费在线看| 久久久久97国产精华液好用吗| 水蜜桃久久夜色精品一区的特点| 9i看片成人免费高清| 欧美激情综合在线| 国产酒店精品激情| 久久免费精品国产久精品久久久久| 日韩国产欧美在线播放| 欧美日韩三级视频| 亚洲成a人v欧美综合天堂 | 色欧美88888久久久久久影院| 国产精品久久夜| av激情成人网| 成人免费一区二区三区在线观看| 成人毛片在线观看| 日韩一区欧美一区| 色综合久久88色综合天天6 | 一区二区三区在线不卡| 色综合天天综合网天天狠天天| 国产精品精品国产色婷婷| 成人丝袜18视频在线观看| 亚洲国产精品二十页| 成人禁用看黄a在线| 亚洲欧洲99久久| 色欧美乱欧美15图片| 婷婷夜色潮精品综合在线| 制服丝袜激情欧洲亚洲| 精品亚洲porn| 中文字幕av资源一区| 91丨九色porny丨蝌蚪| 亚洲宅男天堂在线观看无病毒| 色综合一区二区| 天天色天天爱天天射综合| 欧美一区二区三区在线看| 黑人巨大精品欧美黑白配亚洲| 久久久久国产精品麻豆ai换脸| 91免费视频网址| 轻轻草成人在线| 国产精品传媒视频| 7799精品视频| 国产91精品免费| 亚洲成a人片在线观看中文| 欧美tickling挠脚心丨vk| 丁香六月综合激情| 亚洲不卡在线观看| 欧美国产一区在线| 欧美少妇一区二区| 国产乱子伦一区二区三区国色天香| 中文字幕视频一区二区三区久| 欧美人动与zoxxxx乱| 国产成人综合精品三级| 亚洲视频在线一区| 2023国产精品视频| 色就色 综合激情| 国产一区二区三区在线观看精品| **欧美大码日韩| 精品国产乱码久久久久久闺蜜| 色综合天天视频在线观看| 激情欧美一区二区三区在线观看| 亚洲天堂网中文字| 亚洲精品在线三区| 在线观看一区日韩| 成人天堂资源www在线| 人人狠狠综合久久亚洲| 亚洲男人的天堂一区二区| 精品福利一区二区三区| 欧美专区日韩专区| 成人永久看片免费视频天堂| 六月丁香综合在线视频| 一区二区欧美精品| 综合欧美亚洲日本| 国产天堂亚洲国产碰碰| 欧美videos中文字幕| 欧美日韩一区二区电影| 99精品欧美一区| 丰满白嫩尤物一区二区| 九色porny丨国产精品| 视频在线观看91| 依依成人精品视频| 综合av第一页| 自拍偷拍亚洲综合| 中文久久乱码一区二区| 国产视频911| 久久你懂得1024| 精品粉嫩超白一线天av| 日韩美一区二区三区| 日韩一级免费观看| 欧美久久久久中文字幕| 在线观看亚洲a| 色综合视频一区二区三区高清| 不卡一区二区三区四区| 成人黄色电影在线| 成人黄色在线视频| 高清国产一区二区| 成人avav影音| 99久久久无码国产精品| 99精品久久久久久| av一区二区三区四区| 播五月开心婷婷综合| av爱爱亚洲一区| 91网页版在线| 欧美日韩一卡二卡三卡| 欧美精品九九99久久| 欧美一区二区在线免费播放| 91精品国产色综合久久ai换脸 | 欧美久久久久久久久| 精品视频全国免费看| 6080yy午夜一二三区久久| 91麻豆精品91久久久久同性| 91.com在线观看| 久久综合九色综合97_久久久| 精品国产乱码久久久久久蜜臀| www日韩大片| 中国色在线观看另类| 亚洲天堂福利av| 亚洲国产cao| 久久99国产精品免费网站| 成人免费看视频| 91久久国产最好的精华液| 欧美久久婷婷综合色| 久久久噜噜噜久久人人看 | 26uuu亚洲综合色欧美| 国产天堂亚洲国产碰碰| 一区二区三区在线看| 日韩精品免费视频人成| 国产精品2024| 欧美午夜理伦三级在线观看| 欧美成人vps| 综合色中文字幕| 麻豆免费看一区二区三区| 成人毛片老司机大片| 欧美精品vⅰdeose4hd| 国产色产综合色产在线视频| 亚洲国产综合色| 国产精品白丝jk白祙喷水网站| 一本在线高清不卡dvd| 欧美一区日韩一区| 成人欧美一区二区三区白人| 日本一区中文字幕| 91麻豆.com| 久久久亚洲精品一区二区三区| 亚洲精品免费在线| 国产真实乱对白精彩久久| 欧美性猛交xxxx乱大交退制版| 精品电影一区二区| 性做久久久久久免费观看欧美| 国产suv精品一区二区6| 日韩一区二区三区视频在线| 中文字幕在线一区| 国产一区91精品张津瑜| 欧美人与性动xxxx| 亚洲裸体xxx| av在线不卡网| 国产人久久人人人人爽| 青青草国产精品97视觉盛宴| 在线免费亚洲电影| 日本一区二区三区国色天香| 蜜桃在线一区二区三区| 欧美日韩国产三级| 亚洲人午夜精品天堂一二香蕉| 国产剧情一区在线| 精品剧情在线观看| 美女视频黄久久| 欧美日韩不卡一区二区| 一区二区三区在线免费播放| 成人av先锋影音| 亚洲国产成人一区二区三区| 久久99最新地址| 精品欧美一区二区久久| 日韩成人免费电影| 91精品国产色综合久久不卡蜜臀 | 青青草国产成人av片免费| 欧美专区亚洲专区| 一区二区三区久久久| 在线观看免费亚洲| 亚洲一区欧美一区| 欧美色视频一区| 日韩精品亚洲专区|