Exemple #1
0
bool CDetectLine::RunThreshold()
{
	try
	{
		threshold(m_Image, &m_Region, m_minGray, m_maxGray);
		if (HDevWindowStack::IsOpen())
		{
			clear_window(HDevWindowStack::GetActive());
			set_color(HDevWindowStack::GetActive(),"red");
			disp_obj(m_Region, HDevWindowStack::GetActive());

			connection(m_Region, &m_ConnectedRegions);

			//为了设定参数方便,显示面积在m_MinCirleArea/10~m_MaxCirleArea*10(Pixel)的区域面积值
			Hobject selectRegions;
			HTuple RegionCount, Area, Row, Column;
			select_shape(m_ConnectedRegions, &selectRegions, "area", "and", m_minArea/10, m_maxArea*10);
			count_obj(selectRegions, &RegionCount);
			area_center(selectRegions, &Area, &Row, &Column);
			set_color(HDevWindowStack::GetActive(),"blue");
			for (int i=1; i<=RegionCount; i+=1)
			{
				set_tposition(HDevWindowStack::GetActive(), HTuple(Row[i-1]), HTuple(Column[i-1]));
				write_string(HDevWindowStack::GetActive(), Area[i-1].D());
			}
		}
	}
	catch(...)
	{
		AfxMessageBox("二值化失败!");
		return false;
	}

	return true;
}
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;
	}
}
void  dbg_draw_movement_areas::collect_visible_areas(
        std::vector< std::pair<vector3,vector3> > const&  clip_planes,
        std::shared_ptr<netlab::network const> const  network
        )
{
    if (!is_enabled())
        return;

    m_batches.clear();
    m_invalidated = false;
    std::vector< std::pair<vector3,qtgl::batch> >&  batches = m_batches;

    std::vector<netlab::network_layer_props> const&  layer_props = network->properties()->layer_props();

    std::vector< std::vector< qtgl::batch > >  area_batches;
    {
        area_batches.resize(layer_props.size());
        for (netlab::layer_index_type layer_index = 0U; layer_index != layer_props.size(); ++layer_index)
        {
            area_batches.at(layer_index).resize(layer_props.size());
            auto const&  props = layer_props.at(layer_index);
            for (netlab::layer_index_type area_layer_index = 0U; area_layer_index != layer_props.size(); ++area_layer_index)
                area_batches.at(layer_index).at(area_layer_index) =
                        qtgl::create_wireframe_box(
                                -0.5f * props.size_of_ship_movement_area_in_meters(area_layer_index),
                                +0.5f * props.size_of_ship_movement_area_in_meters(area_layer_index),
                                vector4(0.5f, 0.5f, 0.5f, 1.0f),
                                qtgl::FOG_TYPE::NONE,
                                msgstream() << "netviewer/movement_area_of_layer_" << layer_index << "_to_layer_" << area_layer_index
                                );
        }
    }

    for (netlab::layer_index_type  layer_index = 0U; layer_index != layer_props.size(); ++layer_index)
    {
        auto const&  props = layer_props.at(layer_index);
        for (netlab::object_index_type spiker_index = 0ULL; spiker_index != props.num_spikers(); ++spiker_index)
        {
            auto const&  props = layer_props.at(layer_index);
            vector3 const&  area_center = network->get_layer_of_spikers(layer_index).get_movement_area_center(spiker_index);
            netlab::layer_index_type const  area_layer_index = network->properties()->find_layer_index(area_center(2));
            if (netview::is_bbox_behind_any_of_planes(
                        area_center - 0.5f * props.size_of_ship_movement_area_in_meters(area_layer_index),
                        area_center + 0.5f * props.size_of_ship_movement_area_in_meters(area_layer_index),
                        clip_planes))
                continue;
            batches.push_back({ area_center,area_batches.at(layer_index).at(area_layer_index) });
        }
    }
}
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;
	}
}