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

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

?? ami_snake.h

?? ami_snake算法源代碼
?? H
?? 第 1 頁 / 共 2 頁
字號:
	     l2=uy2+uy2-ux2+uxuy;	     l2+=l2;	     l3=uxuy+ux2;	     l4=ux2-uxuy-uxuy-uxuy;	   }       }       /* CALCULAMOS EL INCREMENTO PARA PASAR DE UNA ITERACION A LA SIGUIENTE */       paso=l0*imagen_level_set[m] + 0.25*((imagen_level_set[m+width2]+imagen_level_set[m-width2])*l1 +             (imagen_level_set[m+1]+imagen_level_set[m-1])*l2 + (imagen_level_set[m+width2+1]+imagen_level_set[m-width2-1])*l3 +             (imagen_level_set[m+width2-1]+imagen_level_set[m-width2+1])*l4);       paso/=(ux2+uy2);      /* DISCRETIZAMOS EL TERMINO DE REACCION. TOMAMOS EL GRADIENTE DE u SIGUIENDO LA         DIRECCION DEL FLUJO */      if(imagen_g_x[m]<0) uxg=imagen_level_set[m+1]-imagen_level_set[m];      else uxg=imagen_level_set[m]-imagen_level_set[m-1];      if(imagen_g_y[m]>0) uyg=imagen_level_set[m+width2]-imagen_level_set[m];      else uyg=imagen_level_set[m]-imagen_level_set[m-width2];      /* ACTUALIZAMOS EL VALOR DEL PIXEL */      paso=imagen_g[m]*paso-lambda*(imagen_g_x[m]*uxg-imagen_g_y[m]*uyg);      imagen_paso[m]=imagen_level_set[m]+paso*dt;      /* ACTUALIZAMOS EL ERROR */      if(ami_abs(paso)>error_max) error_max=ami_abs(paso);     }   }  }  /* ASIGNAMOS EL ERROR ANTES DE SALIR */  *error=error_max;  /* ACTUALIZAMOS LA IMAGEN DEL CONJUNTO DE NIVEL */  for(m=0;m<size2;m++) imagen_level_set[m]=imagen_paso[m];  /* LIBERAMOS MEMORIA Y SALIMOS */  free(imagen_paso);}/*********************************************************************//* FUNCION QUE CALCULA LOS SNAKES GEODESICOS A PARTIR DE UN POLIGONO *//*********************************************************************/int ami_snake(  unsigned char *imagen, /* IMAGEN DONDE SE ENCUENTRA EL SNAKE */  int width,int height,  /* DIMENSIONES DE LA IMAGEN */  int *x,int *y,         /* COORDENADAS DEL POLIGONO */  int Np,                /* NUMERO DE PUNTOS DEL POLIGONO */  int borde,             /* BORDE DE SEPARACION DEL POLIGONO PARA CONSTRUIR LA IMAGEN DE CONJUNTO DE NIVEL */  int *xd,int *yd,       /* DESPLAZAMIENTO DE LAS COORDENADAS DEL POLIGONO EN LA IMAGEN CONJUNTO DE NIVEL */  float alfa,            /* PARAMETRO FUNCION g = 1/sqrt(1+alfa*grad(I)^2) */  float lambda,          /* PARAMETRO DE BALANCE ENTRE TERMINOS DE REGULARIDAD Y ATRACCION */  float sigma,           /* DESVIACION ESTANDARD DE LA GAUSSIANA PARA CALCULAR IMAGEN g */  int Nescalas,          /* NUMERO DE ESCALAS DIFERENTES UTILIZADAS EN TODO EL PROCESO */  float **imagen_level_set_r, /* IMAGEN DE CONJUNTO DE NIVEL RESULTADO (SU FRONTERA CORRESPONDE AL SNAKE) */  int *width_g,int *height_g, /* DIMENSIONES IMAGEN CONJUNTO DE NIVEL */  int Niter)                 /* NUMERO DE ITERACIONES MAXIMO EN CADA ESCALA */{  int i,j,k,width2,height2,xd2,yd2,iter;  long m,size2;  float *imagen_zoom,*imagen_level_set,*imagen_zoom_x,*imagen_zoom_y,*imagen_level_set_x,*imagen_level_set_y;  float *imagen_g,*imagen_g_x,*imagen_g_y,**imagen_zoom2;  float nivel1=200.; /* NIVEL EXTERIOR PARA LA IMAGEN DE LEVEL SET */  float nivel2=50.; /* NIVEL INTERIOR PARA LA IMAGEN DE LEVEL SET */  int cont1,cont2;  float error,max_grad_g,sigma_0=sigma;  if (Np<2){    printf("ERROR funcion ami_snake: No puntos del poligono = %d muy bajo\n",Np);    return(-1);  }  if (borde<2){    printf("ERROR funcion ami_snake: Borde exterior de la imagen= %d muy bajo\n",borde);    return(-1);  }  /* CREAMOS UNA NUEVA IMAGEN DONDE INCLUIR EL POLIGONO */  if(ami_rellenar_poligono(&imagen_level_set,x,y,Np,nivel1,nivel2,borde,&width2,&height2,&xd2,&yd2)!=0)   return(-1);  size2=width2*height2; *xd=xd2; *yd=yd2;  /* COMPROBAMOS QUE LA IMAGEN DEL POLIGONO NO SE SALE DE LA IMAGEN ORIGINAL */  if ((xd2+width2)>width || xd2<0 || (yd2+height2)>height || yd2<0 ){    printf("ERROR funcion ami_snake: La subventana del poligono se sale de la imagen\n");    return(-1);  }  /* COGEMOS MEMORIA PARA EL RESTO DE IMAGENES INVOLUCRADAS */  ami_malloc1d(imagen_zoom,float,size2); ami_malloc1d(imagen_zoom_x,float,size2);  ami_malloc1d(imagen_zoom_y,float,size2);  ami_malloc1d(imagen_level_set_x,float,size2); ami_malloc1d(imagen_level_set_y,float,size2);  ami_malloc1d(imagen_g,float,size2); ami_malloc1d(imagen_g_x,float,size2);  ami_malloc1d(imagen_g_y,float,size2);  ami_malloc2d(imagen_zoom2,float,width2,height2);  /* RELLENAMOS LA IMAGEN imagen_zoom */  for(i=0;i<height2;i++)    for(j=0;j<width2;j++)      imagen_zoom[i*width2+j]=imagen[(i+yd2)*width+xd2+j];/* INICIO CODIGO XMW *//*  level_set=CreateImage("level_set_image",RIM,width2,height2,"");  zoom=CreateImage("snake_image",RIM,width2,height2,"");  zoom_2=CreateImage("Gaussian_Image_convolution",RIM,width2,height2,"");  g=CreateImage("image_g",RIM,width2,height2,"");  for(m=0;m<size2;m++){     level_set->RIMdata[m]=imagen_level_set[m];     zoom->RIMdata[m]=imagen_zoom[m];   }   ShowImage(level_set);   ShowImage(zoom); *//* FIN CODIGO XMW */  /* INICIAMOS EL PROCESO DE EVOLUCION DEL CONJUNTO DE NIVEL */  for(k=0;k<Nescalas;k++){    /* AJUSTAMOS DESVIACION TIPICA DE LA GAUSSIANA */    sigma=sigma_0*(Nescalas-k);    for(m=0;m<size2;m++) imagen_zoom2[0][m]=imagen_zoom[m];/* INICIO CODIGO XMW */ //  for(m=0;m<size2;m++){zoom_2->RIMdata[m]=imagen_zoom2[0][m];} //  ShowImage(zoom_2);/* FIN CODIGO XMW */    /* APLICAMOS LA CONVOLUCION CON UNA GAUSSIANA Y CALCULAMOS imagen_g*/    ami_gauss_conv_alma(imagen_zoom2[0],sigma,sigma,10.,width2,height2);    ami_grad(imagen_zoom2[0],width2,height2,imagen_zoom_x,imagen_zoom_y);    for(m=0;m<size2;m++){      double paso;      paso=imagen_zoom_x[m]*imagen_zoom_x[m]+imagen_zoom_y[m]*imagen_zoom_y[m];      imagen_g[m]=1./sqrt((double) 1. +alfa*paso);    }/* INICIO CODIGO XMW */   /*for(m=0;m<size2;m++){g->RIMdata[m]=255*imagen_g[m];}   ShowImage(g);   for(m=0;m<size2;m++){zoom_2->RIMdata[m]=imagen_zoom2[0][m];}   ShowImage(zoom_2); *//* FIN CODIGO XMW */    /* CALCULAMOS EL GRADIENTE DE g */    ami_grad(imagen_g,width2,height2,imagen_g_x,imagen_g_y);    /* CALCULAMOS EL MAXIMO DEL GRADIENTE DE g PARA LUEGO AJUSTAR el dt */    for(m=0;m<size2;m++) imagen_level_set_x[m]=imagen_g_x[m]*imagen_g_x[m]+imagen_g_y[m]*imagen_g_y[m];    ami_max_vector(imagen_level_set_x,m,max_grad_g,size2);    max_grad_g=sqrt(max_grad_g);    /* INICIALIZAMOS EL ERROR Y COMENZAMOS ITERACIONES */    error=ami_snake_tol_error+1; iter=0;    while(error>ami_snake_tol_error && Niter > iter){      iter++;      printf("iter=%d\n",iter);      ami_snake_iteracion(imagen_level_set,imagen_level_set_x,imagen_level_set_y,                          imagen_g,imagen_g_x,imagen_g_y,width2,height2,lambda,&error,max_grad_g);/* INICIO CODIGO XMW */ /*  for(m=0;m<size2;m++){level_set->RIMdata[m]=imagen_level_set[m];}   ShowImage(level_set);   for(m=0;m<size2;m++) zoom->RIMdata[m]=imagen_zoom[m];   for(i=1;i<(height2-1);i++){     for(j=1;j<(width2-1);j++){       m=i*width2+j;       if(imagen_level_set[m]<125.){         cont1=cont2=0;         if(imagen_level_set[m+1]>125.) cont1++;	 else cont2++;	 if(imagen_level_set[m-1]>125.) cont1++;	 else cont2++;	 if(imagen_level_set[m+width2]>125.) cont1++;	 else cont2++;	 if(imagen_level_set[m-width2]>125.) cont1++;	 else cont2++;	 if(cont1>0 && cont2>0) zoom->RIMdata[m]=255.;      }    }  }   ShowImage(zoom); *//* FIN CODIGO XMW */    }  }  /* AJUSTAMOS LA IMAGEN Y LAS DIMENSIONES DE LA IMAGEN DE CONJUNTO DE NIVEL */  *width_g=width2; *height_g=height2;  *imagen_level_set_r=imagen_level_set;  /* LIBERAMOS MEMORIA */  free(imagen_zoom); free(imagen_zoom_x); free(imagen_zoom_y); ami_free2d(imagen_zoom2);  free(imagen_level_set_x); free(imagen_level_set_y);  free(imagen_g); free(imagen_g_x); free(imagen_g_y);  return(0);}/*******************************************************//* FUNCION CONSTRUYE UNA IMAGEN RELLENANDO UN POLIGONO *//*******************************************************//* DEVUELVE -1 SI ALGO VA MAL y 0 SI TERMINA BIEN */int ami_rellenar_poligono(   float **imagen,  /* IMAGEN QUE SE VA A RELLENAR */   int *x,int *y,   /* COORDENADAS POLIGONO */   int Np,          /* NUMERO DE PUNTOS DEL POLIGONO */   float nivel1,     /* NIVEL EXTERIOR CON EL QUE SE RELLENA */   float nivel2,    /* NIVEL INTERIOR CON EL QUE SE RELLENA */   int borde,       /* MARGEN QUE SE DEJA DE LA IMAGEN AL POLIGONO */   int *width,int *height, /* DIMENSIONES DE LA IMAGEN CREADA */   int *xd,int *yd)  /* DESPLAZAMIENTO REALIZADO DE LAS COORDENADAS DE LOS POLIGONOS */{  int i,j,xmin,xmax,ymin,ymax,width2,height2,xd2,yd2;  long m,size;  float *imagen2;  if (Np<2){    printf("ERROR funcion ami_rellenar_poligono: No puntos del poligono = %d muy bajo\n",Np);    return(-1);  }  if (borde<2){    printf("ERROR funcion ami_rellenar_poligono: Borde exterior de la imagen= %d muy bajo\n",borde);    return(-1);  }  /* CALCULAMOS LOS MAXIMOS Y MINIMOS DE LAS COORDENADAS DE LOS POLIGONOS */  ami_max_vector(x,i,xmax,Np); ami_max_vector(y,i,ymax,Np);  ami_min_vector(x,i,xmin,Np); ami_min_vector(y,i,ymin,Np);  /* DEFINIMOS DIMENSIONES DE LA IMAGEN A CREAR */  *width=width2=xmax-xmin+2*borde+1; *height=height2=ymax-ymin+2*borde+1; size=width2*height2;  /* DEFINIMOS DESPLAZAMIENTOS A REALIZAR EN LAS COORDENADAS DE LOS POLIGONOS */  *yd=yd2=ymin-borde; *xd=xd2=xmin-borde;  if(yd2<0 || xd2<0){   printf("ERROR funcion ami_rellenar_poligono: Borde exterior de la imagen= %d muy alto\n",borde);   printf("La imagen del poligono + el borde se salen de la imagen \n",borde);   return(-1);  }  /* RESERVAMOS MEMORIA PARA LA IMAGEN Y LA RELLENAMOS CON EL NIVEL INTERIOR */  ami_malloc1d(imagen2,float,size); *imagen=imagen2;  for(m=0;m<size;m++) imagen2[m]=nivel1;  /* DIBUJAMOS EL POLIGONO EN LA IMAGEN */  for(i=0;i<(Np-1);i++){    /* DIBUJAR SEGMENTO COLOR nivel1 (x[i]-xd2,y[i]-yd2) - (x[i+1]-xd2,y[i+1]-yd2) */    ami_dibujar_segmento(imagen2,width2,height2,x[i]-xd2,y[i]-yd2,x[i+1]-xd2,y[i+1]-yd2,nivel2);  }  /* DIBUJAR SEGMENTO COLOR nivel1 (x[Np-1]-xd2,y[Np-1]-yd2) - (x[0]-xd2,y[0]-yd2) */  ami_dibujar_segmento(imagen2,width2,height2,x[Np-1]-xd2,y[Np-1]-yd2,x[0]-xd2,y[0]-yd2,nivel2);  /* RELLENAMOS EL EXTERIOR DEL POLIGONO CON EL NIVEL EXTERIOR nivel1 */  ami_semilla((long) 0,imagen2,(unsigned short) width2,size,nivel1,nivel2);  return(0);}/************************************************************************************//* ALGORITMO DE SEMILLA PARA RELLENAR LA IMAGEN A PARTIR DE UN NIVEL CON OTRO NIVEL *//************************************************************************************/void ami_semilla(   long m /* POSICION DEL PUNTO ACTUAL */,   float *imagen /* IMAGEN DE ENTRADA */ ,   unsigned short width /* ANCHO DE LA IMAGEN*/ ,   long size/* TAMANO DE LA IMAGEN */ ,   float nivel1 /* NIVEL QUE SE VA MODIFICAR */,   float nivel2 /* NIVEL CON EL QUE SE RELLENA*/){   imagen[m]=nivel2;   if((m-1)>=0){   	if(imagen[m-1]==nivel1 )   	    ami_semilla(m-1,imagen,width,size,nivel1,nivel2);   }   if((m+1)<size){   	if(imagen[m+1]==nivel1)   	    ami_semilla(m+1,imagen,width,size,nivel1,nivel2);   }   if((m-width)>=0){   	if(imagen[m-width]==nivel1)   	    ami_semilla(m-width,imagen,width,size,nivel1,nivel2);   }   if((m+width)<size){   	if(imagen[m+width]==nivel1)   	    ami_semilla(m+width,imagen,width,size,nivel1,nivel2);   }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性大战久久久久久久| av在线这里只有精品| 日韩美一区二区三区| 日韩欧美成人激情| 久久99精品久久久久久| 国产美女主播视频一区| 色天使色偷偷av一区二区| 日韩视频一区二区三区| 中文字幕中文字幕在线一区| 亚洲成人av电影在线| 国产一区二区调教| 欧美色涩在线第一页| 国产亚洲成aⅴ人片在线观看| 一区二区三区精品久久久| 久草这里只有精品视频| 欧美色图一区二区三区| 国产日产亚洲精品系列| 美女诱惑一区二区| 欧美三级午夜理伦三级中视频| 国产喷白浆一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 99久久精品国产一区| 久久免费的精品国产v∧| 五月综合激情婷婷六月色窝| 色婷婷久久久亚洲一区二区三区| 久久久久国色av免费看影院| 日韩中文字幕91| 欧美色综合久久| 亚洲最新在线观看| 99九九99九九九视频精品| 国产日韩欧美精品一区| 国产永久精品大片wwwapp| 日韩欧美一区在线观看| 日韩福利视频网| 欧美精品亚洲二区| 一区二区三区欧美亚洲| 色婷婷国产精品综合在线观看| 久久久不卡网国产精品一区| 韩国v欧美v亚洲v日本v| 欧美电影免费观看高清完整版在线| 午夜精品久久久久久| 欧美日韩一二三| 亚洲成av人片| 欧美日韩精品一区二区三区蜜桃 | 国产精品久久久久婷婷| 国产成人精品www牛牛影视| 久久久国产一区二区三区四区小说 | 亚洲va中文字幕| 欧美日韩不卡视频| 视频一区欧美精品| 日韩欧美在线1卡| 国产一区二区三区香蕉| 国产拍揄自揄精品视频麻豆| 成人国产电影网| 亚洲精品少妇30p| 在线免费不卡电影| 五月综合激情婷婷六月色窝| 日韩欧美国产精品一区| 国精品**一区二区三区在线蜜桃| 欧美精品一区二区三区很污很色的 | 色偷偷88欧美精品久久久 | 中文字幕不卡三区| 95精品视频在线| 亚洲电影第三页| 日韩欧美你懂的| 国产盗摄女厕一区二区三区| 亚洲欧洲成人精品av97| 欧美三级视频在线| 国产原创一区二区| 一区二区三区成人在线视频| 欧美一区在线视频| 丁香桃色午夜亚洲一区二区三区| 综合电影一区二区三区| 在线播放欧美女士性生活| 国产一区二区美女| 亚洲精品乱码久久久久久黑人 | 欧美在线不卡一区| 久久狠狠亚洲综合| 亚洲视频一区在线观看| 欧美一级二级三级蜜桃| 99亚偷拍自图区亚洲| 男女男精品网站| 国产精品乱码一区二区三区软件 | 久久嫩草精品久久久久| 99麻豆久久久国产精品免费| 欧美一区中文字幕| 不卡av电影在线播放| 视频在线观看一区| 国产福利一区在线观看| 国产精品乱人伦一区二区| 欧美日韩一区精品| 亚洲欧美日韩在线| 亚洲精品日韩专区silk| 亚洲另类在线视频| 亚洲国产一区二区在线播放| 亚洲成av人影院| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩高清在线观看| 精品在线播放免费| 国产精品1区2区| av中文字幕亚洲| 欧美亚洲国产一区二区三区va| 欧美亚洲丝袜传媒另类| 5566中文字幕一区二区电影| 日韩精品专区在线| 国产欧美日韩卡一| 国产精品美女久久久久aⅴ| 亚洲综合色婷婷| 美女脱光内衣内裤视频久久网站 | 成人黄动漫网站免费app| 91尤物视频在线观看| 欧美日韩一区 二区 三区 久久精品| 精品污污网站免费看| 欧美一区2区视频在线观看| 26uuu精品一区二区三区四区在线| 日本一二三四高清不卡| 亚洲一区二区不卡免费| 久久99九九99精品| 成人av集中营| 制服丝袜国产精品| 国产午夜精品一区二区| 亚洲午夜激情av| 国产真实精品久久二三区| 色综合天天做天天爱| 欧美一级午夜免费电影| 国产精品久久久久久亚洲毛片| 亚洲国产一区二区三区| 国产剧情一区在线| 欧美日韩视频在线第一区 | 精品视频一区三区九区| 欧美精品一区二区三区视频| 亚洲免费在线电影| 韩国女主播成人在线观看| 欧美性猛交xxxx乱大交退制版| 精品国产一二三| 亚洲国产一区在线观看| 不卡影院免费观看| 欧美成人福利视频| 亚洲午夜电影网| 成人爱爱电影网址| 精品国产一区二区精华| 亚洲444eee在线观看| www.亚洲人| 久久久噜噜噜久久人人看 | 亚洲国产精品一区二区www| 国产精品一卡二卡在线观看| 欧美精品三级在线观看| 综合婷婷亚洲小说| 国产不卡一区视频| 日韩欧美在线观看一区二区三区| 亚洲一区二区三区美女| av动漫一区二区| 亚洲国产精品精华液2区45| 蜜臀av在线播放一区二区三区| 在线免费av一区| 一区二区三区四区在线| 成人av在线影院| 欧美极品少妇xxxxⅹ高跟鞋| 麻豆精品视频在线观看视频| 欧美天堂一区二区三区| 亚洲免费观看高清完整版在线观看熊| 国产激情精品久久久第一区二区| 日韩欧美国产综合| 蜜桃av噜噜一区| 欧美一区二区三区视频免费播放 | 国产精品一区二区久久精品爱涩| 日韩女优毛片在线| 日本一区中文字幕| 欧美久久久久久久久久| 午夜成人在线视频| 日韩丝袜美女视频| 精品一区精品二区高清| 久久亚洲一区二区三区明星换脸 | 精品一区二区成人精品| 国产99久久久久| 日本一区二区不卡视频| 国产成人免费网站| 欧美色倩网站大全免费| 亚洲人成网站精品片在线观看| 国产精品亚洲一区二区三区妖精| 日韩一级黄色片| 国产真实乱对白精彩久久| 精品国产乱码久久久久久1区2区 | 精品国产乱码久久久久久影片| 麻豆中文一区二区| 欧美日韩视频在线观看一区二区三区| 亚洲一本大道在线| 91精品国产欧美日韩| 日韩精品一区第一页| 欧美大片在线观看一区二区| 天天做天天摸天天爽国产一区| 在线播放亚洲一区| 美日韩一区二区| 久久亚洲精品小早川怜子| 成人午夜伦理影院| 国产女主播视频一区二区| 国产精品91xxx| 欧美激情在线看| 91同城在线观看| 一级精品视频在线观看宜春院|