IplImage* RGBThresholdFilter::filter(std::vector<IplImage*> images){
    IplImage *img = images[0];

	CvSize normalSize = cvGetSize(img);
	/*int n=1;
	for(int i=1; i<params[3]->getVal(); i++)
		n = 2*n;

	CvSize smallSize = cvSize((int)(normalSize.width / n), (int)(normalSize.height/n));*/

	char *strRGBmask = new char[32];
	sprintf(strRGBmask, "rgbmask_%d", step);
	char *strRGB = new char[32];
	sprintf(strRGB, "rgb_%d", step);
	StorageObject *so_mask = getStorageObject(std::string("rgbmask"));
	StorageObject *so_rgb = getStorageObject(std::string(strRGB));
    if(so_rgb->data==0)
		so_rgb->data = cvCreateImage(normalSize, IPL_DEPTH_8U, img->nChannels);
    IplImage *tmp_rgb = (IplImage*)so_rgb->data;
	if(so_mask->data==0)
		so_mask->data = cvCreateImage(normalSize, IPL_DEPTH_8U, 3);
	//small size but recheck if size is supposed to be different from previous in memory
    IplImage *tmp_mask = (IplImage*)so_mask->data;
	/*CvSize tmpSize = cvGetSize(tmp_mask);
	if(tmpSize.width != smallSize.width){
		cvReleaseImage(&tmp_mask);
		so_mask->data = cvCreateImage(smallSize, IPL_DEPTH_8U, 3);
		tmp_mask = (IplImage*)so_mask->data;
	}

    IplImage *tmp_mask_big = cvCreateImage(normalSize, IPL_DEPTH_8U, 3);*/
    //if(img->nChannels>1)
        //cvCvtColor(img, tmp, CV_RGB2GRAY);

	if(img->nChannels==4)
		cvCvtColor(img, tmp_mask, CV_BGRA2BGR);
	else
		cvCopy(img, tmp_mask);
	/*
	if(img->nChannels==4)
		cvCvtColor(img, tmp_mask_big, CV_BGRA2BGR);
	else
		cvCopy(img, tmp_mask_big);
*/
	//downsize
	//cvResize(tmp_mask_big, tmp_mask);

	//cvCvtColor(tmp_mask, tmp_mask, CV_BGR2Lab);
	fast_threshold(tmp_mask); //masks are stored in c1,c2,c3 (downsized)
	mask_threshold(img, tmp_rgb);
		//cvCvtColor(lab, frame, CV_Lab2BGR);
		//cvShowImage("left", frame);

    //cvThreshold(tmp, tmp, params[0]->getVal(), 255, CV_THRESH_TOZERO);
	cvReleaseImage(&tmp_mask);
	so_mask->data = 0;

	//cvReleaseImage(&tmp_mask_big);
    return tmp_rgb;

}
Exemplo n.º 2
0
void CDoProcess::DoProcess(CMData* pData,SubTestResult *testItem)
{	 
	// Local iconic variables 
	Hobject Image=pData->m_Image;
	Hlong m_contrast_low1=m_Parameters.m_contrast_low;
	Hlong m_contrast_high1=m_Parameters.m_contrast_high;


	Hlong m_thred;
	/////////
	if (m_contrast_low1>m_contrast_high1)
	{
		m_thred=m_contrast_low1;
		m_contrast_low1=m_contrast_high1;
		m_contrast_high1=m_thred;
	}
	if (m_Parameters.radius_inner>m_Parameters.radius_ext)
	{
		m_thred=m_Parameters.radius_inner;
		m_Parameters.radius_inner=m_Parameters.radius_ext;
		m_Parameters.radius_ext=m_thred;
	}
	Hobject  Circle5, Circle6, RegionDifference_median,ModelContours;
	Hobject  ImageReduced_median, Region_median, ConnectedRegions_median;
	Hobject  SelectedRegions_median, RegionUnion_median, ImageReduced_median_extract;
	Hobject  ModelImages, ModelRegions;


	// Local control variables 
	HTuple   Mean_median, Deviation_median;
	HTuple  Area_baoChiJia, Row_baoChiJia, Column_baoChiJia;
	HTuple  ModelID, Row2, Column2, Angle2, Score2;
	// Local control variables 
	HTuple  Row=pData->m_center_y;
	HTuple Column= pData->m_center_x;
	// 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);
		//创建模板时 保存区域和区域图片。在提取区域时,因为正常运行时每次都要用,不能使用
		/*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(RegionUnion_median,m_Parameters.CenterOcrModelRegion.c_str());
			}

		}
		else*/
			write_region(RegionUnion_median,m_Parameters.CenterOcrModelRegion.c_str());

		reduce_domain(Image, RegionUnion_median, &ImageReduced_median_extract);

		//write_image(ImageReduced_median_extract, "bmp", 0, "D:/SLACTST/CH1.101/模板字符区域图片.bmp");
		//
		/*if (!_access(m_Parameters.CenterOcrModelPicture.c_str(),0))
		{
		wstring msg = _T("Set Picture already Exit.OverWrite or Not?");

		if (MessageBox(NULL,msg.c_str(),_T("ReadFile Error"),MB_OK||MB_CANCELTRYCONTINUE)==IDOK)
		{
		write_image(ImageReduced_median_extract, "bmp", 0,m_Parameters.CenterOcrModelPicture.c_str());
		}

		}
		else
		write_image(ImageReduced_median_extract, "bmp", 0,m_Parameters.CenterOcrModelPicture.c_str());	*/
		//匹配数据
		inspect_shape_model(ImageReduced_median_extract, &ModelImages, &ModelRegions, 1, 
			25);
		create_shape_model(ImageReduced_median_extract, 4, 0, HTuple(360).Rad(), "auto", 
			"auto", "use_polarity", m_contrast_high1, m_contrast_low1, &ModelID);
		find_shape_model(Image, ModelID, 0, HTuple(360).Rad(), 0.5, 1, 0.5, "least_squares", 
			0, 0.9, &Row2, &Column2, &Angle2, &Score2);

		/*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());	
		//*查看模板提取效果
		set_shape_model_origin(ModelID, -Row_baoChiJia, -Column_baoChiJia);
		get_shape_model_contours(&ModelContours, ModelID, 1);
		/////////////////////////////////////////////////*/
		// Number_QiPao=1;
		if (1)
		{

			//pData->m_isFail= false;
			//testItem->m_bFailSubTest = false;
			pData->m_center_y2=Row_baoChiJia[0].D();
			pData->m_center_x2=Column_baoChiJia[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(ModelContours,pData->m_ShowHWindow);
		set_color(pData->m_ShowHWindow,"green");
		disp_region(RegionUnion_median,pData->m_ShowHWindow);
		disp_region(Circle5,pData->m_ShowHWindow);
		disp_region(Circle6,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;
	}
}
Exemplo n.º 3
0
void CDoProcess::DoProcess(CMData* pData,SubTestResult *testItem)
{	
	Hlong m_radius_inner=m_Parameters.radius_inner;
	Hlong m_radius_ext=m_Parameters.radius_ext;

	Hlong m_thred;

	// dev_update_off(...); only in hdevelop
	//Hobject Image=pData->m_Image;
	/////////
	if (m_Parameters.radius_inner>m_Parameters.radius_ext)
	{
		m_thred=m_Parameters.radius_inner;
		m_Parameters.radius_inner=m_Parameters.radius_ext;
		m_Parameters.radius_ext=m_thred;
	}
	if (m_Parameters.radius_inner2>m_Parameters.radius_ext2)
	{
		m_thred=m_Parameters.radius_inner2;
		m_Parameters.radius_inner2=m_Parameters.radius_ext2;
		m_Parameters.radius_ext2=m_thred;
	}
  // Local iconic variables 
  Hobject Image=pData->m_Image;
  // Local iconic variables 
  Hobject   Circle1, Circle2, RegionDifference_ext;
  Hobject  Circle3, Circle4, RegionDifference_inner, ImageReduced_ext;
  Hobject  ImageReduced_inner, ImageEmphasize_inner, ImageEmphasize_ext;
  Hobject  Region_ext, Region_inner, RegionUnion, ConnectedRegions;
  Hobject  SelectedRegions;


  // Local control variables 
  HTuple   Mean_ext, Deviation_ext;
  HTuple  Mean_inner, Deviation_inner, Number;



  // Local control variables 
  try
  {

	   HTuple  Row=pData->m_center_y;
	  HTuple Column= pData->m_center_x;
	  if (pData->m_isFail )
	  {
	  Row=250;
	  Column=330;
	  }
	  gen_circle(&Circle1, Row, Column, m_Parameters.radius_ext);
	  gen_circle(&Circle2, Row, Column, m_Parameters.radius_inner);
	  difference(Circle1, Circle2, &RegionDifference_ext);
	  gen_circle(&Circle3, Row, Column,m_Parameters.radius_ext2);
	  gen_circle(&Circle4, Row, Column, m_Parameters.radius_inner2);
	  difference(Circle3, Circle4, &RegionDifference_inner);
	  //////////////////////////
	  set_color(pData->m_ShowHWindow,"green");
	  disp_region(Circle1,pData->m_ShowHWindow);
	  disp_region(Circle2,pData->m_ShowHWindow);
	  disp_region(Circle3,pData->m_ShowHWindow);
	  disp_region(Circle4,pData->m_ShowHWindow);
	  set_color(pData->m_ShowHWindow,"red");
	  ///////////////////////////////
	  reduce_domain(Image, RegionDifference_ext, &ImageReduced_ext);
	  reduce_domain(Image, RegionDifference_inner, &ImageReduced_inner);

	  //*端面检测**************

	  emphasize(ImageReduced_inner, &ImageEmphasize_inner, m_Parameters.radius_ext_empha_size, m_Parameters.radius_ext_empha_size, m_Parameters.radius_inner2_enhance);
	  emphasize(ImageReduced_ext, &ImageEmphasize_ext, m_Parameters.radius_ext_empha_size, m_Parameters.radius_ext_empha_size, m_Parameters.radius_inner2_enhance);

	  intensity(RegionDifference_ext, Image, &Mean_ext, &Deviation_ext);
	  intensity(RegionDifference_inner, Image, &Mean_inner, &Deviation_inner);
	  threshold(ImageEmphasize_ext, &Region_ext, 0,m_Parameters.radius_ext2_thred );//Mean_ext-30
	  fast_threshold(ImageReduced_inner, &Region_inner, 0,m_Parameters.radius_ext2_thred , 1);//Mean_inner-30
	  union2(Region_ext, Region_inner, &RegionUnion);
	  connection(RegionUnion, &ConnectedRegions);
	  select_shape(ConnectedRegions, &SelectedRegions, "area", "and", m_Parameters.ARMin, 99999);
	  count_obj(SelectedRegions, &Number);
	  /////////////////////////////////////////////////*/
	  // Number_QiPao=1;
	  if ((Number<=0))
	  {
		  ;
		  //pData->m_isFail= false;
		  //testItem->m_bFailSubTest = false;
	  }
	  else
	  {
		  pData->m_isFail = true;
		  testItem->m_bFailSubTest = true;
		  //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,pData->m_ShowHWindow);
		  //disp_circle(pData->m_ShowHWindow,Row,Column,85);
	  }
  }
  catch (HException &except) 
  {
	  pData->m_isFail = true;
	  testItem->m_bFailSubTest = true;
	  //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;
  }
}