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

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

?? ilabel.c

?? Machine Vision Toolbox 機器視覺工具箱
?? C
字號:
/* ilabel.c * * Fast image labelling funciton. * *	L = ILABEL(IM [,OPT]) *	[L,LMAX] = ILABEL(IM) *	[L,LMAX,PARENTS] = ILABEL(IM) * *	$Header: /home/autom/pic/cvsroot/image-toolbox/ilabel.c,v 1.4 2005/10/30 02:52:33 pic Exp $ * *	$Log: ilabel.c,v $ *	Revision 1.4  2005/10/30 02:52:33  pic *	Use old style comments, tidyup error message. * *	Revision 1.3  2005/07/03 10:47:52  pic *	Add support for 4 and 8-way connectivity. * *	Revision 1.2  2004/12/03 07:30:38  pic *	Removed debug. *	 *	Revision 1.1  2002/08/28 04:53:06  pic *	Initial CVS version. *	 *	Revision 1.2  2000/03/10 07:04:11  pic *	Added region hierarchy and return of region parent vector. * * * Copyright (c) Peter Corke, 1995  Machine Vision Toolbox for Matlab *		pic 3/95 */#include "mex.h"#include <math.h>/*#define	DEBUG*//* Input Arguments */#define	IM_IN		prhs[0]#define	OPT_IN		prhs[1]/* Output Arguments */#define	IM_OUT	plhs[0]#define	MAX_OUT	plhs[1]#define	PARENT_OUT	plhs[2]int	nrows, ncols;#define	MAXLABEL	10000#define	UNKNOWN		-1#define	PIX(v,r,c)	v[(r)+(c)*nrows]int lresolve(int label);static int	*lmap;int		connectivityWays;/* * actual labelling code: * *	im	double prec. input image (input) *	dlim	double prec. label image (output) */static int ilabel(double *im, double *dlim, int **Parents){	int	*lim, *lmap2, row, col, i, j, k, nlabels;	int	prevlab, curlab, curpix, prevpix;	int	newlabel;	int	*parents;	/* allocate label map and initialize to zero */	lmap = mxCalloc(MAXLABEL, sizeof(int));	lmap2 = mxCalloc(MAXLABEL, sizeof(int));	parents = mxCalloc(MAXLABEL, sizeof(int));	/* tempory integer labelled image (for speed) */	lim = mxCalloc(nrows*ncols, sizeof(int));	/*	 * first pass labelling loop.  Only does 4-way connectivity	 */	newlabel = 0;	for (row=0; row<nrows; row++) {		prevlab = UNKNOWN;		for (col=0; col<ncols; col++) {			curpix = PIX(im,row,col);			/* if no change in pixel value then inherit label from left */			curlab = UNKNOWN;			if ((col > 0) && (curpix == prevpix))				curlab = prevlab;						/*			 * check whether a label merge should happen, adjacent			 * pixels with the same value but different labels			 * means that one should change.			 *			 * merge can only happen on second row onwards 			 */			if (row > 0) {				if (	(PIX(im,row-1,col) == curpix) &&					(lresolve(PIX(lim,row-1,col)) != curlab)				) {					/* we have a merge to N */					int	newlabel;										newlabel = lresolve(PIX(lim,row-1,col));					/*					newlabel = PIX(lim,row-1,col);					*/#ifdef	DEBUG					printf("mergeN(%d,%d): %d becomes %d\n",						row, col, curlab, newlabel);#endif					if (curlab != UNKNOWN)						lmap[curlab] = newlabel;					curlab = newlabel;				} else if (					connectivityWays == 8 &&					(col > 0) &&					(PIX(im,row-1,col-1) == curpix) &&					(lresolve(PIX(lim,row-1,col-1)) != curlab)				) {					/* we have a merge to NW */					int	newlabel;										newlabel = lresolve(PIX(lim,row-1,col-1));					/*					newlabel = PIX(lim,row-1,col);					*/#ifdef	DEBUG					printf("mergeNW(%d,%d): %d becomes %d\n",						row, col, curlab, newlabel);#endif					if (curlab != UNKNOWN)						lmap[curlab] = newlabel;					curlab = newlabel;				} else if (					connectivityWays == 8 &&					(col < (ncols-1)) &&					(PIX(im,row-1,col+1) == curpix) &&					(lresolve(PIX(lim,row-1,col+1)) != curlab)				) {					/* we have a merge to NE */					int	newlabel;										newlabel = lresolve(PIX(lim,row-1,col+1));					/*					newlabel = PIX(lim,row-1,col);					*/#ifdef	DEBUG					printf("mergeNE(%d,%d): %d becomes %d\n",						row, col, curlab, newlabel);#endif					if (curlab != UNKNOWN)						lmap[curlab] = newlabel;					curlab = newlabel;				}			}			if ((row > 0) && (col > 0)) {				/*				 * check for enclosure				 */				int	left, above, diag;				left = prevlab;				above = lresolve( PIX(lim,row-1,col) );				diag = lresolve( PIX(lim,row-1,col-1) );				if (	(left == curlab) &&					(above == curlab) &&					(diag != curlab)				) {#ifdef	DEBUG					printf("label %d encloses %d\n",						curlab, i);#endif					/* we have an enclosure */					parents[diag] = curlab;				}			}			/* if label still not known, assign new */			if (curlab == UNKNOWN) {				curlab = ++newlabel;				if (newlabel >= MAXLABEL)					mexErrMsgTxt("ilabel: too many regions");#ifdef	DEBUG				printf("new label(%d,%d): %d\n", 					row, col, curlab);#endif			}			PIX(lim,row,col) = curlab;			prevlab = curlab;			prevpix = curpix;		}	}#ifdef	DEBUG	printf("max lim is %d\n", newlabel);#endif	/*	 * now eliminate redirections from the label map	 *	 *	lmap[pass1 label] -> pass 2 label	 *	lmap2[pass 2 label] -> final label	 */#ifdef	DEBUG	printf("----------------------\nlmap:\n");#endif	for (i=1,nlabels=0; i<=newlabel; i++) {#ifdef	DEBUG		printf("(%d) = %d\n", i, lmap[i]);#endif		if (lmap[i] == 0)			lmap2[i] = ++nlabels;	/* assign new sequential label */	}	/*	 * now adjust the label map so that consecutive labels appear in the	 * labelled image, ie. no missing labels.	 */	for (i=0; i<=newlabel; i++)		if (lmap[i] != 0) {			j = lresolve(i);			lmap2[i] = lmap2[j];		}#ifdef	DEBUG	printf("----------------------\nlmap2:\n");	for (i=1; i<=newlabel; i++)		printf("(%d) = %d\n", i, lmap2[i]);#endif#ifdef	DEBUG	printf("----------------------\nparents:\n");	for (i=1; i<=newlabel; i++)		printf("parent[%d] = %d\n", i, parents[i]);#endif	/*	 * resolve the labels in the parent array and assign to double proc	 * output array	 */	*Parents = mxCalloc(nlabels, sizeof(int));	for (i=0; i<=newlabel; i++) {		int	par = parents[i], child;		if (par) {			child = lmap2[i];			par = lmap2[par];			(*Parents)[child-1] = par;		}	}	mxFree(parents);	/*	 * resolve the labels in the integer labelled image and assign	 * to the double prec. output image	 */	for (row=0; row<nrows; row++)		for (col=0; col<ncols; col++)			PIX(dlim,row,col) = lmap2[ PIX(lim,row,col) ];	mxFree(lmap);	mxFree(lmap2);	mxFree(lim);	return(nlabels);}/* * resolve a label to it's true value via the label map */intlresolve(int l){	int	i;	for (i=l; lmap[i] > 0; )		i = lmap[i];#ifdef	DEBUG	printf("resolved %d to %d\n", l, i);#endif	return i;}/* * MATLAB interface function, check arguments, then call ilabel() above */voidmexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){	mxArray	*Mlabel, *Mmax;	double	*im, *label;	int	maxlabel, *parents;	/* Check for proper number of arguments */	connectivityWays = 4;	switch (nrhs) {	case 2: {		double	opt = mxGetScalar(OPT_IN);		if (opt == 8)			connectivityWays = 8;		else if (opt != 4)			mexErrMsgTxt("ILABEL connectivity must be 4 or 8.");		}	case 1:		nrows = mxGetM(IM_IN);		ncols = mxGetN(IM_IN);		/*		printf("size %d x %d\n", nrows, ncols);		*/		if (!mxIsNumeric(IM_IN) || mxIsComplex(IM_IN) || 			!mxIsDouble(IM_IN)) {			mexErrMsgTxt("ILABEL requires a real matrix.");		}		break;	default:		mexErrMsgTxt("ILABEL requires one or more input arguments");		break;	}	/* Create a matrix for the return argument */	Mlabel = mxCreateDoubleMatrix(nrows, ncols, mxREAL);	im = mxGetPr(IM_IN);	label = mxGetPr(Mlabel);	/* Do the actual computations in a subroutine */	maxlabel = ilabel(im, label, &parents);	switch (nlhs) {	case 3: {		double	*p;		int	i;		PARENT_OUT = mxCreateDoubleMatrix(maxlabel, 1, mxREAL);		p = mxGetPr(PARENT_OUT);		for (i=0; i<maxlabel; i++)			p[i] = parents[i];	    }		/* fall through */	case 2: {		double	*p;		Mmax = mxCreateDoubleMatrix(1, 1, mxREAL);		p = mxGetPr(Mmax);		*p = maxlabel;		MAX_OUT = Mmax;		}		/* fall through */	case 1:		IM_OUT = Mlabel;		break;	}	return;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品久久久久久蜜臀| 国产午夜精品理论片a级大结局| 99国产精品久久久久| 国产精品资源网| 久久精品国产秦先生| 青草国产精品久久久久久| 视频一区二区中文字幕| 日韩黄色一级片| 秋霞午夜鲁丝一区二区老狼| 日韩中文字幕亚洲一区二区va在线| 亚洲一区欧美一区| 一区二区欧美视频| 亚洲无线码一区二区三区| 丝袜亚洲另类丝袜在线| 蜜臀av在线播放一区二区三区| 免费欧美在线视频| 激情综合五月婷婷| 国产成人一区二区精品非洲| 国产盗摄视频一区二区三区| www.激情成人| 91国产福利在线| 欧美高清视频www夜色资源网| 91麻豆精品国产| 精品久久久久久无| 国产欧美精品国产国产专区| 亚洲免费视频中文字幕| 日韩精品电影一区亚洲| 国产九九视频一区二区三区| 成人免费毛片aaaaa**| 91行情网站电视在线观看高清版| 欧美绝品在线观看成人午夜影视| 日韩欧美国产三级| 国产精品午夜在线| 亚洲电影视频在线| 国精产品一区一区三区mba桃花| 成人福利视频网站| 777色狠狠一区二区三区| 久久免费电影网| 一区二区三区久久| 久久精品国产精品青草| 成人黄色一级视频| 欧美精品在线视频| 久久精品人人做人人爽人人| 一区二区三区日韩| 狠狠狠色丁香婷婷综合激情| 99久久99久久精品免费看蜜桃| 欧美日韩dvd在线观看| 国产三区在线成人av| 亚洲一区二区欧美日韩 | 高清不卡一区二区| 欧美三级视频在线观看| 精品国产1区二区| 亚洲人成网站影音先锋播放| 久久综合综合久久综合| 91视频国产资源| 日韩一区二区三区高清免费看看 | 一区二区三区中文在线观看| 麻豆国产欧美日韩综合精品二区| jlzzjlzz国产精品久久| 5566中文字幕一区二区电影| 国产精品久久看| 奇米精品一区二区三区四区 | 粉嫩av亚洲一区二区图片| 欧美午夜一区二区三区免费大片| 国产三级三级三级精品8ⅰ区| 亚洲精品久久7777| 国产成人av福利| 日韩一区和二区| 亚洲已满18点击进入久久| 国产 欧美在线| 精品久久五月天| 日韩黄色小视频| 91国产免费看| 专区另类欧美日韩| 国产精品正在播放| 欧美一级高清片在线观看| 9l国产精品久久久久麻豆| 日韩精品一区二区三区swag | 不卡av电影在线播放| 精品黑人一区二区三区久久| 亚洲成人动漫精品| 色综合久久久久综合| 国产亚洲欧美激情| 久久国产夜色精品鲁鲁99| 欧美精品一二三四| 亚洲一卡二卡三卡四卡五卡| 91在线国内视频| 一区二区中文字幕在线| 国产精品一卡二卡| wwwwxxxxx欧美| 久久精品免费观看| 欧美精品自拍偷拍| 石原莉奈在线亚洲三区| 欧美日韩一级黄| 亚洲曰韩产成在线| 91成人免费电影| 夜夜爽夜夜爽精品视频| 色综合久久88色综合天天| 日韩伦理av电影| 99久久免费视频.com| 国产精品久久久久久久久免费桃花 | 欧美日韩高清影院| 一区二区成人在线观看| 日本二三区不卡| 伊人开心综合网| 欧美视频在线不卡| 亚洲国产毛片aaaaa无费看| 在线看不卡av| 亚洲一区中文在线| 欧美三级视频在线播放| 午夜欧美大尺度福利影院在线看| 欧洲精品一区二区三区在线观看| 亚洲美女视频在线| 在线观看精品一区| 天使萌一区二区三区免费观看| 欧美嫩在线观看| 免费成人美女在线观看| 亚洲精品一线二线三线无人区| 久久99久久精品| 久久精品亚洲麻豆av一区二区 | 久久久久久久久久久久久夜| 国产一区二区不卡在线| 中文字幕精品—区二区四季| 9l国产精品久久久久麻豆| 一区二区三区在线观看网站| 欧美午夜精品一区二区三区| 七七婷婷婷婷精品国产| 久久久精品欧美丰满| 99国内精品久久| 亚洲午夜av在线| 26uuu久久天堂性欧美| 大胆欧美人体老妇| 亚洲一二三四久久| 精品免费国产二区三区| 成人免费高清视频在线观看| 夜夜嗨av一区二区三区| 6080yy午夜一二三区久久| 国产精品影视网| 亚洲综合在线免费观看| 欧美一级高清片| av一区二区不卡| 日本成人中文字幕| 日本一区二区三级电影在线观看| 色94色欧美sute亚洲线路一ni| 日韩激情一区二区| 国产精品成人免费| 欧美一区二区三区在线观看视频| 国产一区美女在线| 一区二区三区毛片| 久久精品在线观看| 欧美午夜片在线观看| 国产91丝袜在线播放0| 亚洲国产毛片aaaaa无费看| 国产日韩欧美精品一区| 欧美三区在线观看| 成人一区二区在线观看| 日日夜夜精品视频免费| 中文字幕+乱码+中文字幕一区| 欧美日韩国产经典色站一区二区三区| 国产中文字幕精品| 亚洲成人一区二区在线观看| 国产亚洲精品资源在线26u| 欧美色视频在线观看| 粉嫩av一区二区三区| 奇米亚洲午夜久久精品| 一区二区欧美视频| 日本一区二区不卡视频| 欧美一区二区福利在线| 色国产精品一区在线观看| 国产一区二区三区最好精华液| 亚洲自拍与偷拍| 国产精品乱子久久久久| 欧美r级电影在线观看| 91搞黄在线观看| 成人福利在线看| 国产伦精一区二区三区| 亚洲h在线观看| 亚洲精品高清在线观看| 亚洲国产精品精华液ab| 精品国产1区二区| 日韩欧美电影一区| 精品视频123区在线观看| 91丨porny丨最新| 成人午夜视频福利| 国产一区二区在线观看免费| 另类调教123区| 视频一区视频二区中文字幕| 亚洲一区在线视频| 一区二区三区在线观看动漫| 国产精品国产a级| 欧美国产日本韩| 国产亚洲精品久| 精品国产乱码久久久久久影片| 欧美日韩国产精品自在自线| 在线观看亚洲a| 色8久久人人97超碰香蕉987| 91网页版在线| 99精品国产99久久久久久白柏| 成人福利视频网站| 成人av在线一区二区|