Ejemplo n.º 1
0
bool gvVisionTask_black::gvTask_inspect( Hobject image_src, Hobject *outRegion_defects )
{
	// Local iconic variables
	Hobject  TMP_Region, Region1, RegionErosion1,ImageReduced;
	Hobject  Image_meanSmall, Image_meanLarge, RegionDynThresh;
	Hobject  ConnectedRegions, RegionFillUp, RegionErosion, ConnectedRegions1;
	Hobject  SelectedRegions, RegionDilation1, RegionDilation;
	Hobject  RegionDifference, obj_selected;


	// Local control variables
	HTuple  Meancenter, Deviation, Meanouter, Deviation1;
	HTuple  Index, Number;

//	reduce_domain(image_src, gvTask_GetROI()->gvROI_GetROI(), &ImageReduced);
	reduce_domain(image_src, gvTask_GetROI()->gvROI_GetROI(), &ImageReduced);
	threshold(ImageReduced, &Region1, 100, 255);
	fill_up(Region1, &Region1);
	erosion_circle(Region1, &RegionErosion1, 20);
	mean_image(ImageReduced, &Image_meanSmall, 2, 2);
	mean_image(ImageReduced, &Image_meanLarge, 20, 20);
	dyn_threshold(Image_meanSmall, Image_meanLarge, &RegionDynThresh, 5, "dark");
	connection(RegionDynThresh, &ConnectedRegions);
	fill_up(ConnectedRegions, &RegionFillUp);


	erosion_circle(RegionFillUp, &RegionErosion, 1.5);
	connection(RegionErosion, &ConnectedRegions1);

	select_shape(ConnectedRegions1, &SelectedRegions, "area", "and", m_minBlackSpotArea, 5000);
	dilation_circle(SelectedRegions, &RegionDilation1, 2.5);
	intensity(RegionDilation1, Image_meanSmall, &Meancenter, &Deviation);
	dilation_circle(SelectedRegions, &RegionDilation, 5);
	difference(RegionDilation, SelectedRegions, &RegionDifference);
	intensity(RegionDifference, Image_meanSmall, &Meanouter, &Deviation1);
	gen_empty_obj(&(*outRegion_defects));
	for (Index=0; Index<=(Meancenter.Num())-1; Index+=1)
	{
		select_obj(SelectedRegions, &obj_selected, Index+1);
		if (0 != ((HTuple(Meancenter[Index])-HTuple(Meanouter[Index]))<-30))
		{
		  concat_obj((*outRegion_defects), obj_selected, &(*outRegion_defects));

		}
	}
	count_obj((*outRegion_defects), &Number);
	if(Number>m_maxBlackSpotCnt||Number<m_minBlackSpotCnt )
	{
		return FALSE;
	}
	return TRUE;
}
Ejemplo n.º 2
0
bool CDetectLine::RunSelectTarget()
{
	if(RunThreshold())
	{
		try
		{
			select_shape(m_ConnectedRegions, &m_SelectedRegions, 
				(((((HTuple("area").Append("roundness")).Append("row")).Append("column")).Append("ra")).Append("rb")), "and", 
				(((((HTuple(m_minArea).Append(m_minRectangularity)).Append(m_minRow)).Append(m_minColumn)).Append(m_minRA)).Append(m_minRB)), 
				(((((HTuple(m_maxArea).Append(m_maxRectangularity)).Append(m_maxRow)).Append(m_maxColumn)).Append(m_maxRA)).Append(m_maxRB)));

			fill_up(m_SelectedRegions, &m_RegionFillUp);
			gen_contour_region_xld(m_RegionFillUp, &m_RectangleContours, "border");
			distance_pc(m_RectangleContours, m_ImageHeight/2, m_ImageWidth/2, &m_DistanceMin, &m_DistanceMax);

			if (HDevWindowStack::IsOpen())
			{
				clear_window(HDevWindowStack::GetActive());
				set_color(HDevWindowStack::GetActive(),"red");
				disp_obj(m_RectangleContours, HDevWindowStack::GetActive());

				set_color(HDevWindowStack::GetActive(),"green");
				disp_cross(HDevWindowStack::GetActive(), m_ImageHeight/2, m_ImageWidth/2, 20, 0);
				//disp_cross(HDevWindowStack::GetActive(), m_ImageHeight/2 + m_DistanceMin, m_ImageWidth/2, 20, 0);
			}
			return true;
		}
		catch(...)
		{
			AfxMessageBox("检测直线失败!");
		}
	}

	return false;
}
Ejemplo n.º 3
0
bool gvVisionImage_botcap_front::_insp_loc( Hobject image_src, Hobject *outRegion_loc)
{
	// Local iconic variables
	Hobject  ImageMean, region_thre, region_fillup;
	Hobject  region_erosion, region_dilation, region_conn, region_sel;

	// Local control variables
	Hlong  numRegions;

	gen_empty_obj(&(*outRegion_loc));

	mean_image(image_src, &ImageMean, 31, 31);
	dyn_threshold(image_src, ImageMean, &region_thre, 5, "light");
	fill_up(region_thre, &region_fillup);
	erosion_circle(region_fillup, &region_erosion, 5.5);
	dilation_circle(region_erosion, &region_dilation, 5.5);
	connection(region_dilation, &region_conn);
	select_shape(region_conn, &region_sel, "area", "and", m_minarea, 999999);
	count_obj(region_sel, &numRegions);

	if ( 1 == numRegions )
	{
		disp_obj(ho_Image,hl_WindowID);
		disp_obj(region_sel,hl_WindowID);
		copy_obj(region_sel, &(*outRegion_loc), 1, 1);
		return true;
	}

	return false;
}
Ejemplo n.º 4
0
void	main()
{
  int	plateau[4][7];
  int	tab[4][2];
  
  fill_up(plateau);
  display(plateau);
  start(plateau,tab);
}
Ejemplo n.º 5
0
int main()
{
    int i;
    char **mpt;
    char *pt = "vitor";

    fill_up(&mpt);

    for (i = 0; i < SIZET; i++) {
        printf("%d\n", i);
        mpt[i] = pt;
    }

    free(mpt);

    return 0;
}
void CDoProcess::DoProcess(CMData* pData,SubTestResult *testItem)
{	 
	// Local iconic variables 
	Hobject Image=pData->m_Image;
	Hlong m_thred_low1=m_Parameters.m_thred_low1;
	Hlong m_thred_high1=m_Parameters.m_thred_high1;
	Hlong m_thred_low2=m_Parameters.m_thred_low2;
	Hlong m_thred_high2=m_Parameters.m_thred_high2;

	Hlong m_thred;
	/////////
	if (m_thred_low1>m_thred_high1)
	{
		m_thred=m_thred_low1;
		m_thred_low1=m_thred_high1;
		m_thred_high1=m_thred;
	}
	if (m_thred_low2>m_thred_high2)
	{
		m_thred=m_thred_low2;
		m_thred_low2=m_thred_high2;
		m_thred_high2=m_thred;
	}

	///////////////////////////////////////////////////////
	// Local iconic variables 
	Hobject  Region, ConnectedRegions, SelectedRegions;
	Hobject  RegionUnion, RegionFillUp, Contours, Rectangle1;
	Hobject  Rectangle2, ImageReduced1, ImageReduced2, Region1;
	Hobject  Region2, RegionDilation1, RegionErosion1, RegionDilation2;
	Hobject  RegionErosion2;


	// Local control variables 
	HTuple  ModelID,Area;//Row1, Column1, Radius1;
	HTuple  Row11, Column11, Row12, Column12;
	HTuple  Row21, Column21, Row22, Column22;
	////////////////////////////////////////////////////////////
	// Local control variables 
	HTuple  Row;
	HTuple Column;
	// dev_update_off(...); only in hdevelop
	try
	{
		///Row_model_center = 237.659;
		//Column_model_center = 339.212;

		/*gen_circle(&Circle5, Row, Column,m_Parameters.radius_ext);
		gen_circle(&Circle6, Row, Column,m_Parameters.radius_inner);
		difference(Circle5, Circle6, &RegionDifference_median);
		reduce_domain(Image, RegionDifference_median, &ImageReduced_median);
		intensity(RegionDifference_median, Image, &Mean_median, &Deviation_median);
		fast_threshold(ImageReduced_median, &Region_median, m_Parameters.radius_inner_thred, 255, 1);//Mean_median*1.2
		connection(Region_median, &ConnectedRegions_median);
		select_shape(ConnectedRegions_median, &SelectedRegions_median, "area", "and", m_Parameters.radius_ext_extract_size, 
		99999);
		union1(SelectedRegions_median, &RegionUnion_median);
		area_center(RegionUnion_median, &Area_baoChiJia, &Row_baoChiJia, &Column_baoChiJia);*/

		//**********************************************************
		threshold(Image, &Region, 0,  m_Parameters.radius_inner_thred);
		connection(Region, &ConnectedRegions);
		select_shape(ConnectedRegions, &SelectedRegions, "area", "and", m_Parameters.radius_ext_extract_size, 149999);
		union1(SelectedRegions, &RegionUnion);
		fill_up(RegionUnion, &RegionFillUp);
		area_center(RegionFillUp, &Area, &Row, &Column);
		///////////////////////////////////
		/*if (!_access(m_Parameters.CenterOcrModelRegion.c_str(),0))
		{
			wstring msg = _T("Set Region already Exit.OverWrite or Not?");

			if (MessageBox(NULL,msg.c_str(),_T("ReadFile Error"),MB_OK||MB_CANCELTRYCONTINUE)==IDOK)
			{
				write_region(RegionFillUp,m_Parameters.CenterOcrModelRegion.c_str());
			}

		}
		else*/
			write_region(RegionFillUp,m_Parameters.CenterOcrModelRegion.c_str());
		/////////////////////////////////////////
		gen_contour_region_xld(RegionFillUp, &Contours, "border");

		create_shape_model_xld(Contours, 1, -0.69, 0.79, "auto", "auto", "ignore_local_polarity", 
			5, &ModelID);

		//匹配数据

		/*if (!_access(m_Parameters.CenterOcrModelName.c_str(),0))
		{
			wstring msg = _T("Set Model already Exit.OverWrite or Not?");

			if (MessageBox(NULL,msg.c_str(),_T("ReadFile Error"),MB_OK||MB_CANCELTRYCONTINUE)==IDOK)
			{
				write_shape_model(ModelID,m_Parameters.CenterOcrModelName.c_str());
			}

		}
		else*/
			write_shape_model(ModelID,m_Parameters.CenterOcrModelName.c_str());	



		//*****************************************************************
		Row11=m_Parameters.YMin1;
		Row12=m_Parameters.YMin1+m_Parameters.YMax1;
		Column11=m_Parameters.XMin1;
		Column12=m_Parameters.XMin1+m_Parameters.XMax1;
		Row21=m_Parameters.YMin2;
		Row22=m_Parameters.YMin2+m_Parameters.YMax2;
		Column21=m_Parameters.XMin2;
		Column22=m_Parameters.XMin2+m_Parameters.XMax2;
		gen_rectangle1(&Rectangle1, Row11, Column11, Row12, Column12);

		gen_rectangle1(&Rectangle2, Row21, Column21, Row22, Column22);

		reduce_domain(Image, Rectangle1, &ImageReduced1);


		reduce_domain(Image, Rectangle2, &ImageReduced2);


		threshold(ImageReduced1, &Region1, m_Parameters.m_thred_low1, m_Parameters.m_thred_high1);
		threshold(ImageReduced2, &Region2, m_Parameters.m_thred_low2, m_Parameters.m_thred_high2);
		dilation_circle(Region1, &RegionDilation1, 3.5);
		erosion_circle(RegionDilation1, &RegionErosion1, m_Parameters.region_erosion1_size);

		dilation_circle(Region2, &RegionDilation2, 3.5);
		erosion_circle(RegionDilation2, &RegionErosion2, m_Parameters.region_erosion2_size);

		//创建模板时 保存区域和区域图片。在提取区域时,因为正常运行时每次都要用,不能使用
		/*if (!_access(m_Parameters.CenterOcrModelRegion1.c_str(),0))
		{
			wstring msg = _T("Set Region already Exit.OverWrite or Not?");

			if (MessageBox(NULL,msg.c_str(),_T("ReadFile Error"),MB_OK||MB_CANCELTRYCONTINUE)==IDOK)
			{
				write_region(RegionErosion1,m_Parameters.CenterOcrModelRegion1.c_str());
			}

		}
		else*/
			write_region(RegionErosion1,m_Parameters.CenterOcrModelRegion1.c_str());
		/*if (!_access(m_Parameters.CenterOcrModelRegion2.c_str(),0))
		{
			wstring msg = _T("Set Region already Exit.OverWrite or Not?");

			if (MessageBox(NULL,msg.c_str(),_T("ReadFile Error"),MB_OK||MB_CANCELTRYCONTINUE)==IDOK)
			{
				write_region(RegionErosion2,m_Parameters.CenterOcrModelRegion2.c_str());
			}

		}
		else*/
			write_region(RegionErosion2,m_Parameters.CenterOcrModelRegion2.c_str());
		/////////////////////////////////////////////////
		// Number_QiPao=1;
		if (1)
		{

			//pData->m_isFail= false;
			//testItem->m_bFailSubTest = false;
			pData->m_center_y2=Row[0].D();
			pData->m_center_x2=Column[0].D();
		}
		else
		{

			//testItem->m_ErrorMsg = "Error No Find Center";
			//testItem->m_ErrorY = 250;
			//testItem->m_ErrorX = 350;
			//testItem->m_ErrorR = 55;
			//set_color(pData->m_ShowHWindow,"red");
			//disp_region(SelectedRegions_qiPao_extract,pData->m_ShowHWindow);
			//disp_circle(pData->m_ShowHWindow,Row_center,Column_center,85);
		}
		set_color(pData->m_ShowHWindow,"blue");
		disp_obj(Contours,pData->m_ShowHWindow);
		set_color(pData->m_ShowHWindow,"green");
		disp_region(Rectangle1,pData->m_ShowHWindow);
		disp_region(Rectangle2,pData->m_ShowHWindow);
		disp_region(RegionErosion1,pData->m_ShowHWindow);
		disp_region(RegionErosion2,pData->m_ShowHWindow);
		set_color(pData->m_ShowHWindow,"red");
		///////

	}
	catch (HException &except) 
	{
		pData->m_isFail = true;
		testItem->m_bFailSubTest = true;
		pData->m_orientationPhi=0;
		//testItem->m_ErrorMsg = except.file;
		//testItem->m_ErrorMsg += " ";
		//testItem->m_ErrorMsg += except.line;
		//testItem->m_ErrorMsg += " ";
		//testItem->m_ErrorMsg += except.message;
		testItem->m_ErrorY = 1;
		testItem->m_ErrorX = 1;
		testItem->m_ErrorR = 4;
	}
}
Ejemplo n.º 7
0
Archivo: knnc.c Proyecto: cran/EMV
void knnc(double *array_vec,int *nb_col,int *nb_row, int*k, int *corre_flag, double *dist, double *dist_bound)
{
  int missing,i,j,ii;
  int count;
  double value;
  double *temp;
  double *row_nb;
  double ** array;
  int *miss_pos;
  int index;
  int *n_position;
  int* nb_neighboors;

  int min=0;
  int max=*k-1;
  
  array=dmatrix(*nb_row,*nb_col);

  /** contain the row numbers of the missing values **/
  miss_pos=ivector(*nb_col, code_miss);

  /** contains the distances of the neighboors **/
  temp=dvector(*k,code_miss); 
  /** contains the row numbers of the neighboors **/
  row_nb=dvector(*k,code_miss);
  /** initilize all the distances with the missing codes **/
  init_dvector(dist, nb_row, code_miss);

  n_position=ivector(*nb_row, code_miss); /** positions of potential neighboors **/
  nb_neighboors=ivector(1, code_miss); /** number of neighboors **/

  /** coerce the vector into a two dimmensional array **/
  vec_mat(array_vec,nb_row,nb_col,array); 
 
  neighboors(array, nb_row, nb_col, n_position, nb_neighboors);

  if(*nb_neighboors==0) /** Stop if no neighboors **/ 
    {
      error("No rows without missing values"); 
    }
  else 
    {
      if(*nb_neighboors<*k) /** If less than k neighboors give a warning **/
	warning("Only %d neighboors could be used", *nb_neighboors); 
      
      for(i=0;i<*nb_row;i++)
	{
	  /** Check for missing values **/
	  missing=is_na(array[i],nb_col,miss_pos);
	  
	  if (missing==1 && miss_pos[*nb_col-1]==code_miss) /**at least one missing value at most nb_col**/
	    {
	      if(*corre_flag==1 && miss_pos[*nb_col-2]!=code_miss) /** Give a warning if based on correlation and only one observation **/
		warning("Could not estimate the missing values for the row %d\n One observation is not enough to compute the sample correlation", i+1); 
	      else
		{
		  count=0;  
		  
		  for(j=0;j<*nb_neighboors;j++)  /** loop on the neighboors only **/
		    { 
		      index=n_position[j];
		      
		      if(*corre_flag==0)
			value=distance(array[i],array[index],nb_col);  /** compute the distance **/
		      else
			value=-correlation(array[i],array[index],nb_col);  /** compute the correlation **/
		      
		      if(value!=code_miss)
			{
			  if (count<*k) /** store the first k **/
			    {
			      temp[count]=value;
			      row_nb[count]=index;
			      count++;
			    }
			  else
			    {
			      quicksort2(temp,row_nb,&min,&max); /** sort the neighboors to keep the kth nearest **/
			      if (temp[*k-1]>value)  /** keep it if the distance is shorter **/
				{
				  temp[*k-1]=value;
				  row_nb[*k-1]=index;
				}       
			    } 
			}
		      
		    } 
		  
		  if(*corre_flag==0)
		    {
		      fill_up(array,row_nb,nb_col,k,i,miss_pos,temp, dist_bound); /** fill up the missing values by the averaging the distance**/
		      dist[i]=mean_vec(temp, k); /** Compute the average distances **/
		    }
		  else
		    {
		      fill_up_corr(array,row_nb, nb_col, k,i, miss_pos, temp, dist_bound); /** fill up the missing values based on correlations**/
		      dist[i]=-mean_vec(temp, k); /** Compute the average distances **/
		    }
		  
		  
		  init_dvector(row_nb, k, code_miss);    /** initialize row_nb with missing codes **/
		  init_dvector(temp, k, code_miss);        /** initialize temp with missing codes **/
		}
	    }
	  else if(missing==1 && miss_pos[*nb_col-1]!=code_miss)
	    warning("Could not estimate the missing values for the row %d\n The row only contains missing values", i+1); 
	}
    }
  
  mat_vec(array_vec, nb_row, nb_col,array); /** recoerce the matrix into a vector **/

  /** free the memory **/
  free_dmatrix(array,*nb_row); 
  Free(miss_pos);
  Free(temp);
  Free(row_nb);
  Free(n_position);
  Free(nb_neighboors);
}
Ejemplo n.º 8
0
void CDoProcess::DoProcess(CMData* pData,SubTestResult *testItem)
{	
	try
	{

	Hobject   FindImage,ImageReduced,EllipseObj;
	Hobject  ModelRegions, ConnectedRegions, SelectedRegions,ModelImages,SelectedRegionsSize,RegionClosing,RegionUnion,RegionFillUp,RegionOpening;
	Hlong Contrast = m_Parameters.m_Contrast;


	HTuple Row2, Column2, Radius2;

	Hobject regional_Internal,regional_Out;


	get_image_size (pData->m_Image, &Column2, &Row2);
	gen_ellipse(&EllipseObj, Row2/2, Column2/2, 0, m_Parameters.LongAxis, m_Parameters.ShortAxis);
	if (ShowObject&&pData->m_isDebug)
	{
		set_color(pData->m_ShowHWindow,"yellow");	
		disp_obj(EllipseObj,pData->m_ShowHWindow);
	}
	reduce_domain(pData->m_Image, EllipseObj, &ImageReduced);
	inspect_shape_model(ImageReduced, &ModelImages, &ModelRegions, 1, Contrast);
	connection(ModelRegions, &ConnectedRegions);
	//**==============================================================
	//	**选择区域这条更改,原来默认是700,现在我想改成可调的,我现在就设的40
	select_shape(ConnectedRegions, &SelectedRegionsSize, "area", "and", m_Parameters.Select_Shape_Size, 99999);

	//	** 添加这句union1
	closing_circle (SelectedRegionsSize, &RegionClosing, 400.5);
	union1(RegionClosing, &RegionUnion);

	fill_up (RegionUnion, &RegionFillUp);
    opening_circle (RegionFillUp, &RegionOpening, m_Parameters.OutlierRemover+0.5);

	Hlong TempNumber;		  

	count_obj(RegionOpening,&TempNumber);

	  if (TempNumber<1)
	  {  
		  pData->m_isFail = true;
		  testItem->m_bFailSubTest = true;

		  if (pData->m_isDebug)
		  {
			  set_color(pData->m_ShowHWindow,"green");
			  set_tposition( pData->m_ShowHWindow,120, 0);
			#ifdef _ENGLISH
						  write_string(pData->m_ShowHWindow,"Shell center not found");
			#else
						  write_string(pData->m_ShowHWindow,"圆中心未找到");
			#endif
		  }
		  //pData->m_center_x=50;
		  //pData->m_center_y=50;
		  //pData->r_real=40;
		  //return;
	  }
		  
	//*==============================================================
	double  CenterRow, CenterColumn, CenterRadius;
	smallest_circle(RegionOpening, &CenterRow, &CenterColumn, &CenterRadius);


		  Hobject circle;
		  if ((m_Parameters.XMin<CenterColumn)&&(CenterColumn<m_Parameters.XMax)&&(m_Parameters.YMin<CenterRow)&&(CenterRow<m_Parameters.YMax)&&(CenterRadius<m_Parameters.RMax)&&(CenterRadius>m_Parameters.RMin))
		  {
			  pData->m_center_x=CenterColumn;
			  pData->m_center_y=CenterRow;
			  pData->r_real=CenterRadius;
			  set_color(pData->m_ShowHWindow,"cyan");
			  gen_circle(&circle, pData->m_center_y, pData->m_center_x, pData->r_real);
			  disp_obj(circle,pData->m_ShowHWindow);
		  }
		  else
		  {
			  pData->m_isFail = true;
			  testItem->m_bFailSubTest = true;
			  pData->m_center_x=50;
			  pData->m_center_y=50;
			  pData->r_real=40;
			  set_color(pData->m_ShowHWindow,"red");
			  gen_circle(&circle, pData->m_center_y, pData->m_center_x, pData->r_real);
			  disp_obj(circle,pData->m_ShowHWindow);

			  if (pData->m_isDebug)
			  {
					  set_color(pData->m_ShowHWindow,"green");
					  set_tposition( pData->m_ShowHWindow,5, 145);
					#ifdef _ENGLISH
						write_string(pData->m_ShowHWindow,"Fitted shell center not match the qualifications");
					#else
						write_string(pData->m_ShowHWindow,"拟合得到的圆的中心坐标及半径与限定条件不符");
					#endif

			  }
			  //return;

		  }

	  //set_color(pData->m_ShowHWindow,"red");
	  //Hobject circle,ContCircle;
	  //gen_circle(&circle, pData->m_center_y, pData->m_center_x, pData->r_real);
	  //disp_obj(circle,pData->m_ShowHWindow);
	}

	catch (HException &except) 
	{

		if (pData->m_isDebug)
		{
			set_color(pData->m_ShowHWindow,"green");
			set_tposition( pData->m_ShowHWindow,25, 145);
			#ifdef _ENGLISH
						write_string(pData->m_ShowHWindow,"CenterHC23 parameter values error,please re-adjust");
			#else
						write_string(pData->m_ShowHWindow,"CenterHC23程序参数值出错,请重新调节参数");
			#endif
		}
		
		pData->m_isFail = true;
		testItem->m_bFailSubTest = true;
		pData->m_center_x=50;
		pData->m_center_y=50;
		pData->r_real=40;

	}

}