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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? blobdetection.java

?? 自已用MATLAB寫的一個(gè)blob Detection
?? JAVA
字號(hào):
package blobDetection;

import java.lang.reflect.*;

//==================================================
//class BlobDetection
//==================================================
public class BlobDetection extends EdgeDetection
{
	// Temp
	Object	parent;
	Method 	filterBlobMethod;
	// Temp
	
	public static int        	blobMaxNumber = 1000;
	public int        			blobNumber;
	public Blob[]     			blob;
	public boolean[]  			gridVisited;

	public int					blobWidthMin, blobHeightMin;
	
//	--------------------------------------------
// Constructor
//	--------------------------------------------
public BlobDetection(int imgWidth, int imgHeight)
{
  super(imgWidth, imgHeight);
  
  gridVisited   = new boolean[nbGridValue];
  blob         	= new Blob[blobMaxNumber];
  blobNumber   	= 0;
  for (int i=0 ; i<blobMaxNumber;i++) 
  		blob[i] = new Blob(this); 

  blobWidthMin	= 0;
  blobHeightMin	= 0;
  
  filterBlobMethod = null;
}

//--------------------------------------------
// setBlobDimensionMin()
//--------------------------------------------
/*
public void setBlobDimensionMin(int w, int h)
{
  if (w<0) w=0;
  if (h<0) h=0;
  if (w>imgWidth) w=imgWidth;
  if (h>imgHeight) h=imgHeight;
  
  blobWidthMin	= w;
  blobHeightMin	= h;
}
*/
//--------------------------------------------
// setNumberBlobMax()
//--------------------------------------------
public void setBlobMaxNumber(int nb)
{
	blobMaxNumber = nb;
}

//--------------------------------------------
// getBlob()
//--------------------------------------------
public Blob getBlob(int n)
{
	Blob b=null;
	if (n<blobNumber)
		return blob[n];
	return b;
}

//--------------------------------------------
// getBlobNb()
//--------------------------------------------
public int getBlobNb()
{
	return blobNumber;
}

//--------------------------------------------
// computeBlobs()
//--------------------------------------------
public void computeBlobs(int[] pixels)
{
	// Image
	setImage(pixels);
	
     // Clear gridVisited
     for (int i=0 ; i<nbGridValue; i++) 
     	gridVisited[i]=false;
	
     // Compute Isovalue
	computeIsovalue();
	
     // Get Lines indices
	int		x,y,squareIndex,n;
	int		iEdge;
	int		offx, offy, offAB;
	int		toCompute;
	int		offset;
	float	t;
	float	vx,vy;

	nbLineToDraw 	= 0;
	vx	     		= 0.0f;
    blobNumber   	= 0;
	for (x=0 ; x<resx-1 ; x++)
	{
		vy = 0.0f;
		for (y=0 ; y<resy-1 ; y++)
		{
			 // > offset in the grid
			offset		= x + resx*y;

	         // > if we were already there, just go the next square!
            if (gridVisited[offset] == true) continue;
                     
             // > squareIndex
			squareIndex     = getSquareIndex(x,y);

             // >Found something
			 if (squareIndex > 0 && squareIndex < 15)
			 {
			 	if (blobNumber < blobMaxNumber)
			 	{
					   findBlob(blobNumber,x,y);
						 blobNumber++;
			 		
			 	}
			 }
			vy += stepy;
		}	// for y
		vx += stepx;
	}	// for x
	nbLineToDraw /= 2;
	//blobNumber+=1;
}

//--------------------------------------------
// findBlob()
//--------------------------------------------
public void findBlob(int iBlob, int x, int y)
{
	 // Reset Blob values

	blob[iBlob].id     = iBlob; 
	 blob[iBlob].xMin   =  1000.0f;
	 blob[iBlob].xMax   =  -1000.0f;
	 blob[iBlob].yMin   =  1000.0f;
	 blob[iBlob].yMax   =  -1000.0f;
	 blob[iBlob].nbLine = 0; 

	
	 // Find it !!    
	computeEdgeVertex(iBlob, x,y);
	{
	
	 // > This is just a temp patch (somtimes 'big' blobs are detected on the grid edges)

	 if (blob[iBlob].xMin>=1000.0f || blob[iBlob].xMax<=-1000.0f || blob[iBlob].yMin>=1000.0f || blob[iBlob].yMax<=-1000.0f)
	   blobNumber--;    
	 else  
	 {
		blob[iBlob].update();
        // User Filter
		if (filterBlobMethod != null)
        {
        	try 
			{
        		Boolean returnObj = (Boolean)(filterBlobMethod.invoke(parent, new Object[]{ blob[iBlob] } ));
        		boolean returnValue = returnObj.booleanValue();
        		if (returnValue == false) blobNumber--;    
			} 
        	catch (Exception e) 
			{
				System.out.println("Disabling filterBlobMethod() because of an error.");
				filterBlobMethod = null;
			}
        }
	  }

	}


}

//--------------------------------------------
// computeEdgeVertex()
//--------------------------------------------
void computeEdgeVertex(int iBlob, int x, int y)
{
	 // offset
	 int offset = x+resx*y;
	 
	 // Mark voxel as visited
	 if (gridVisited[offset] == true) return;
	 gridVisited[offset]=true;    
	
	 // 
	 int   iEdge, offx, offy, offAB;
	 int[] edgeOffsetInfo;
	 int   squareIndex     = getSquareIndex(x,y);
	 float vx = (float)x*stepx;
	 float vy = (float)y*stepy;
	 
	 int   n = 0;
	 while ( (iEdge = MetaballsTable.edgeCut[squareIndex][n++]) != -1)
	 {
		edgeOffsetInfo  = MetaballsTable.edgeOffsetInfo[iEdge];
		offx			= edgeOffsetInfo[0];
		offy			= edgeOffsetInfo[1];
		offAB			= edgeOffsetInfo[2];
	
	    if (blob[iBlob].nbLine < Blob.MAX_NBLINE) 
	    	lineToDraw[nbLineToDraw++] = blob[iBlob].line[blob[iBlob].nbLine++] = voxel[(x+offx) + resx*(y+offy)] + offAB;
	    else
	    	return;
	 }
	 
	 int   toCompute = MetaballsTable.edgeToCompute[squareIndex];
	 float t = 0.0f;
	 float value = 0.0f;
	 if (toCompute>0)
	 {
	   if ( (toCompute & 1) > 0) // Edge 0
	   {
	   		t	= (isovalue - gridValue[offset]) / (gridValue[offset+1] - gridValue[offset]); 
			value   = vx*(1.0f-t) + t*(vx+stepx); 
			edgeVrt[voxel[offset]].x = value;
	     
			if (value < blob[iBlob].xMin ) blob[iBlob].xMin = value;
			if (value > blob[iBlob].xMax ) blob[iBlob].xMax = value;
	      
	   }
	   if ( (toCompute & 2) > 0) // Edge 3
	   {
	   		t	= (isovalue - gridValue[offset]) / (gridValue[offset+resx] - gridValue[offset]); 
	   		value   = vy*(1.0f-t) + t*(vy+stepy);
	   		edgeVrt[voxel[offset]+1].y = value;
	     
	   		if (value < blob[iBlob].yMin ) blob[iBlob].yMin = value;
	   		if (value > blob[iBlob].yMax ) blob[iBlob].yMax = value;
	
	   }
				
	 } // toCompute
	
	 // Propagate to neightbors : use of Metaballs.neighborsTable 
	 byte neighborVoxel = MetaballsTable.neightborVoxel[squareIndex];    
	 if (x<resx-2   && (neighborVoxel & (1<<0))>0)        computeEdgeVertex(iBlob, x+1,y);
	 if (x>0        && (neighborVoxel & (1<<1))>0)        computeEdgeVertex(iBlob, x-1,y);
	 if (y<resy-2   && (neighborVoxel & (1<<2))>0)        computeEdgeVertex(iBlob, x,y+1);
	 if (y>0        && (neighborVoxel & (1<<3))>0)        computeEdgeVertex(iBlob, x,y-1);
 
}

//--------------------------------------------
// filterBlob()
//--------------------------------------------
/*
public boolean acceptBlob(Blob b)
{
	if ( (b.w*imgWidth>=blobWidthMin) || (b.h*imgHeight>=blobHeightMin) )
		return true;
	return false;
}
*/
//--------------------------------------------
// activeCustomFilter
//--------------------------------------------
public void activeCustomFilter(Object parent)
{
	this.parent = parent;
	  try 
	  {
	  	filterBlobMethod = parent.getClass().getMethod("newBlobDetectedEvent", new Class[] { Blob.class });
      	//System.out.println("newBlobDetectedEvent found!");
      } catch (Exception e) 
	  {
      	//System.out.println("no such metho or error");
        // no such method, or an error.. which is fine, just ignore
      }
}

};

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.欧美亚洲| 免费一级欧美片在线观看| 日韩欧美国产一区二区在线播放 | 中文字幕在线一区免费| 精品国产乱码久久久久久图片| 欧美精品一卡二卡| 欧美日韩另类一区| 日韩欧美综合一区| 久久久亚洲高清| 国产日产亚洲精品系列| 中文字幕在线观看一区| 一区二区三区四区精品在线视频| 一区二区三区国产| 奇米亚洲午夜久久精品| 国产精品影音先锋| 色综合一区二区三区| 欧美色手机在线观看| 9191久久久久久久久久久| 欧美大黄免费观看| 国产精品国产三级国产| 亚洲chinese男男1069| 免费成人美女在线观看.| 国产精品亚洲专一区二区三区| 成人动漫中文字幕| 欧美午夜片在线观看| 日韩写真欧美这视频| 国产精品伦理一区二区| 亚洲国产日韩一区二区| 久久99久久久久| 色综合一区二区| 日韩精品中午字幕| 亚洲人亚洲人成电影网站色| 日韩成人av影视| www.在线欧美| 欧美成人精品福利| 综合久久给合久久狠狠狠97色 | 亚洲激情五月婷婷| 丝瓜av网站精品一区二区| 国产精品一区在线观看乱码| 在线一区二区三区| 亚洲国产精品黑人久久久 | 精品国产乱子伦一区| 一区二区三区中文免费| 韩国成人福利片在线播放| 色狠狠桃花综合| 久久久久久电影| 免费一级片91| 欧美日韩在线播放三区| 国产精品电影院| 国产精品自产自拍| 欧美麻豆精品久久久久久| 欧美韩国日本不卡| 韩国视频一区二区| 91精品国产免费久久综合| 亚洲另类色综合网站| 成人午夜在线播放| 国产三级欧美三级| 麻豆国产精品官网| 日韩欧美一区二区久久婷婷| 亚洲成人综合网站| 欧美在线999| 亚洲码国产岛国毛片在线| 懂色av一区二区三区免费观看| 精品国产一区二区三区忘忧草| 亚洲.国产.中文慕字在线| 色综合天天做天天爱| 亚洲欧洲制服丝袜| 99久久国产综合精品色伊| 国产日韩欧美在线一区| 国产精品一区二区视频| 久久久久久久久久久久久久久99| 精品综合免费视频观看| 精品久久国产老人久久综合| 麻豆精品一区二区av白丝在线| 欧美一级黄色大片| 精品影视av免费| 欧美不卡在线视频| 国内外成人在线视频| 2024国产精品| 风间由美一区二区av101| 国产精品久久久久久久久久久免费看| 国产黄人亚洲片| 中文字幕一区二区在线播放| 色老头久久综合| 亚洲高清一区二区三区| 日韩精品一区二区三区三区免费| 麻豆精品新av中文字幕| 国产亚洲一本大道中文在线| 成人a区在线观看| 一区二区在线观看免费 | 国产精品一二三区| 亚洲欧洲无码一区二区三区| 91久久国产综合久久| 日韩在线一区二区三区| 精品久久久久久久久久久久久久久 | 日韩女同互慰一区二区| 国产黄色精品视频| 亚洲午夜影视影院在线观看| 欧美高清激情brazzers| 国产尤物一区二区在线| 国产精品久久久一本精品| 欧美日韩成人综合天天影院| 九九国产精品视频| 自拍偷拍欧美精品| 欧美一级一区二区| 成人爽a毛片一区二区免费| 亚洲一二三四区不卡| 久久这里只有精品视频网| 色婷婷综合久色| 精品在线亚洲视频| 亚洲一区自拍偷拍| 欧美国产精品专区| 欧美日韩成人综合天天影院| 成人网在线播放| 日本视频免费一区| 亚洲男同1069视频| 久久影院视频免费| 精品视频全国免费看| 99国内精品久久| 国产一区二区三区在线观看免费视频 | 成人av在线网站| 免费在线看一区| 亚洲综合av网| 中文字幕亚洲成人| 精品成人私密视频| 欧美一区二区不卡视频| 日本精品一区二区三区四区的功能| 国内外成人在线| 日本成人在线电影网| 一区二区三区欧美日| 欧美国产国产综合| 精品国产在天天线2019| 欧美精品vⅰdeose4hd| 欧美在线|欧美| 99国产精品久久久| 波多野结衣91| 国产福利不卡视频| 麻豆91在线看| 秋霞av亚洲一区二区三| 午夜精品久久久| 亚洲成人资源在线| 五月婷婷欧美视频| 婷婷综合另类小说色区| 天涯成人国产亚洲精品一区av| 亚洲精品视频观看| 亚洲麻豆国产自偷在线| 亚洲视频免费观看| 亚洲三级在线看| 亚洲美女偷拍久久| 亚洲黄色小说网站| 一区2区3区在线看| 一区二区三区 在线观看视频| 亚洲同性gay激情无套| 成人欧美一区二区三区白人| 国产精品福利影院| 一区二区三区在线观看国产| 综合色天天鬼久久鬼色| 亚洲综合图片区| 亚洲国产精品一区二区www在线| 蜜桃一区二区三区在线| 蜜臀a∨国产成人精品| 国产精品资源在线看| 成人的网站免费观看| 91福利视频网站| 欧美一区二区三区视频| 日韩久久久久久| 国产精品三级av在线播放| 亚洲少妇屁股交4| 亚洲成人免费在线观看| 美女视频一区二区三区| 粉嫩aⅴ一区二区三区四区| 在线中文字幕一区| 日韩免费观看高清完整版 | 丰满白嫩尤物一区二区| 99精品久久99久久久久| 337p亚洲精品色噜噜狠狠| 日韩欧美视频一区| 中文字幕一区二区视频| 视频一区二区三区中文字幕| 国产资源在线一区| 色婷婷亚洲一区二区三区| 日韩三级中文字幕| 中文字幕一区日韩精品欧美| 日韩av一区二区在线影视| 成人综合在线观看| 欧美精品久久久久久久多人混战| 久久这里都是精品| 亚洲地区一二三色| 成人性视频网站| 欧美一区二区在线视频| 国产欧美久久久精品影院| 五月综合激情婷婷六月色窝| 国产成人午夜精品影院观看视频| 欧美视频第二页| 亚洲国产成人自拍| 经典三级一区二区| 欧美中文字幕亚洲一区二区va在线 | 午夜国产不卡在线观看视频| 成人在线综合网| 26uuu国产电影一区二区|