CogBlobTool斑点工具的RunParams及Result属性整理

这篇博客介绍了图像处理中的分段和连通性分析技术,包括不同的分段模式(如硬阈值、软阈值)和极性设置(白底黑点、黑底白点)。同时,它详细阐述了连通性模式(已标记、灰度)和清理策略(修剪、填充),以及如何设置最小面积。此外,还涉及到区域形状(圆形、椭圆等)以及测量属性(面积、质心坐标等)。最后,通过示例展示了如何应用这些设置进行图像处理,并获取处理结果的数量和特征信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//********************************************运行参数设置**RunParams*************************************  
//********************************************                       *************************************  
 
//设置->分段->模式   
SegmentationParams.Mode = CogBlobSegmentationModeConstants.{
	Map;                                                     //映射
	HardFixedThreshold;                               	 	 //硬阈值(固定)
	HardDynamicThreshold;                             		 //硬阈值(动态)
	HardRelativeThreshold ;                           		 //硬阈值(相对)
	SoftFixedThreshold;                               		 //软阈值(固定)
	SoftRelativeThreshold;                            		 //软阈值(相对)
	SubtractionImage;                                 		 //剪影图像	
	None;                                             		 //无
}
 
//设置->分段->极性
SegmentationParams.Polarity = CogBlobSegmentationPolarityConstants.{
	DarkBlobs;                                        		 //白底黑点
	LightBlobs;                                       		 //黑底白点
}
 
//设置->连通性->模式
ConnectivityMode = CogBlobConnectivityModeConstants.{
	Labeled;                                          		 //已标记
	GreyScale;                                        		 //灰度
	WholeImageGreyScale;                              		 //整个图像
}
 
//设置->连通性->清除
ConnectivityCleanup = CogBlobConnectivityCleanupConstants.{
	Prune;                                            		 //修剪
	Fill;                                             		 //填充
	None;                                             		 //无
}
 
//设置->连通性->最小面积
ConnectivityMinPixels = 整数                          		 //设置最小面积
 
//区域->区域形状
Region = {
	CogCircle ;                                       		 //圆形
	CogEllipse ;                                      		 //椭圆
	CogPolygon ;                                      		 //多边形
	CogRectangle ;                                    		 //矩形
	CogRectangleAffine ;                              		 //矩形仿射
	CogCircularAnnulusSection ;                       		 //环形截面
	CogEllipcalAnnulusSection ;                       		 //椭圆翼剖面
	null;                                             		 //使用整个图像
}
 
//测得尺寸->属性   固定值
RuntimeMeasures.Item[0].Measure = Area ;  
RuntimeMeasures.Item[1].Measure = CenterMassX ;  
RuntimeMeasures.Item[2].Measure = CenterMassY ;  
RuntimeMeasures.Item[3].Measure = Lable ;  
 
//测得尺寸->尺寸/过滤
RunTimeMeasures.Item[0].Mode = CogBlobMeasureModeConstants.{
	Filter;                                           		 //过滤
	None;                                             		 //网格
	PreCompute;                                       		 //运行时
}
 
//测得尺寸->范围
RuntimeMeasures.Item[0].FilterMode = CogBlobFilterModeConstants.{
	IncludeBlobsInRange;                              		 //包含
	ExcludeBlobsInRange;                              		 //排除
}
RuntimeMeasures.Item[0].FilterRangeHigh = double类型  		 //高
RuntimeMeasures.Item[0].FilterRangLow =  double类型   		 //低
 
 
//Results
//结果
GetBlobs().Count                                      		 //结果数量
GetBlobs().Item[0].Area                               		 //面积
GetBlobs().Item[0].CenterMassX                        		 //x轴坐标
GetBlobs().Item[0].CenterMassY                        		 //y轴坐标
 
 
 
//*****************************************************例子**Example*******************************************
//*****************************************************             *******************************************  
 
 
//变量声明
CogImageCollection images = new CogImageCollection();    											//图片的集合
CogBlobTool m_blob = new CogBlobTool();                  											//斑点工具
CogBlobMeasure m_measure = new CogBlobMeasure();                                                    //筛选属性1
CogBlobMeasure m_measure2 = new CogBlobMeasure();													//筛选属性2
CogRectangle m_rectangle = new CogRectangle();          											//创建一个矩形区域
int m_PicNum;        																				//图片数量
int m_PerNum = 0;    																				//当前运行图片序号
double nPositionX;                                                                                  //X轴坐标
double nPositionY;																					//Y轴坐标                                                                                   
 
 
//加载图像源
CogImageFile ImageFiles = new CogImageFile();                                                       //创建图像源
images.Clear();
m_PicNum = 0;
using (FolderBrowserDialog lvse = new FolderBrowserDialog())                                        //打开本地文件夹
{
	if (lvse.ShowDialog() == DialogResult.OK)
	{
		DirectoryInfo dinfo = new DirectoryInfo(lvse.SelectedPath);
		FileInfo[] finfo = dinfo.GetFiles();
		foreach (FileInfo file in finfo)
		{
			ImageFiles.Open(file.FullName, CogImageFileModeConstants.Read);
			ICogImage image = ImageFiles[0];                                                        //将图片放入images容器中
			images.Add(image);
			m_PicNum++;
		}
	}
}
cogRecordDisplay1.Image = images[0];
cogRecordDisplay1.Fit(true);
 
	
//添加图像选择区域   
m_rectangle.GraphicDOFEnable = CogRectangleDOFConstants.All;                                        //启用对矩形旋转的交互式操作。
m_rectangle.Interactive = true;                                                                     //交互式属性允许选择此图形对象。
//m_rectangle.Width = 240;                                     										//矩形宽
//m_rectangle.Height = 240;                                    										//矩形高
//m_rectangle.X = 89.75;                                       										//矩形顶角X轴坐标
//m_rectangle.Y = 146.891;                                     										//矩形顶胶Y轴坐标
m_blob.Region = m_rectangle;                                                                        //m_blob形状为为矩形
cogRecordDisplay1.InteractiveGraphics.Clear();
cogRecordDisplay1.InteractiveGraphics.Add((ICogGraphicInteractive)m_blob.Region, "gu", false);      //画面上显示区域范围 
 
 
//运行处理
m_blob.InputImage = images[m_PerNum];                        										//输入图像源
m_blob.RunParams.SegmentationParams.Mode = CogBlobSegmentationModeConstants.HardDynamicThreshold;   //硬阈值(动态)
m_blob.RunParams.SegmentationParams.Polarity = CogBlobSegmentationPolarityConstants.DarkBlobs;      //白底黑点
m_blob.RunParams.ConnectivityMode = CogBlobConnectivityModeConstants.GreyScale;       				//灰度
m_blob.RunParams.ConnectivityCleanup = CogBlobConnectivityCleanupConstants.Fill;      				//填充
m_blob.RunParams.ConnectivityMinPixels = 10;                 										//设置最小面积   
 
m_blob.RunParams.RunTimeMeasures.Add(m_measure);             										//添加如下两种属性
m_blob.RunParams.RunTimeMeasures.Add(m_measure2);
 
m_blob.RunParams.RunTimeMeasures[0].Measure = CogBlobMeasureConstants.Area;
m_blob.RunParams.RunTimeMeasures[0].Mode = CogBlobMeasureModeConstants.Filter;        				//过滤
m_blob.RunParams.RunTimeMeasures[0].FilterMode = CogBlobFilterModeConstants.IncludeBlobsInRange;    //包含
m_blob.RunParams.RunTimeMeasures[0].FilterRangeLow = 1100;   										//下限
m_blob.RunParams.RunTimeMeasures[0].FilterRangeHigh = 1200;  										//上限
 
m_blob.RunParams.RunTimeMeasures[1].Measure = CogBlobMeasureConstants.Label;
m_blob.RunParams.RunTimeMeasures[1].Mode = CogBlobMeasureModeConstants.Filter;        				//过滤
m_blob.RunParams.RunTimeMeasures[1].FilterMode = CogBlobFilterModeConstants.IncludeBlobsInRange;    //包含
m_blob.RunParams.RunTimeMeasures[1].FilterRangeLow = 0.9;    										//下限
m_blob.RunParams.RunTimeMeasures[1].FilterRangeHigh = 1.1;   										//上限
 
m_blob.Run();   																					//运行
 
 
//获取结果
int num = m_blob.Results.GetBlobs().Count;                   										//结果数量
for (int i = 0; i <num; i++)
{
	nPositionX = m_blob.Results.GetBlobs()[i].CenterOfMassX; 										//X轴坐标
	nPositionY = m_blob.Results.GetBlobs()[i].CenterOfMassY; 										//Y轴坐标
}
 
 
<think>好的,我现在需要帮助用户解决如何配置CogBlobTool工具来设置忽略区域的问题。首先,我需要回忆一下之前提供的引用内容,看看是否有相关的信息。 根据引用[1]和[2],CogBlobTool主要用于检测图像中的特定灰度区域,通过分割图像、应用连通性规则、形态学操作等步骤进行分析。用户提到的忽略区域可能涉及到在分析过程中排除某些特定区域,比如图像边缘或固定位置的干扰区域。 接下来,查看引用[3],里面提到边界过滤是通过“测得尺寸”中的ConnectivityLabel来实现的。可能忽略区域的设置也在这里,或者在图像分割步骤中调整阈值或区域选择。 通常,在视觉处理工具中,设置忽略区域可以通过定义ROI(感兴趣区域)或者使用掩膜(mask)来排除不需要分析的部分。CogBlobTool可能有类似的设置,比如设置排除区域或应用掩膜图像。此外,引用[1]提到“测得尺寸框”可以通过属性限制排除误差对象,这可能涉及到设置最小/最大尺寸、位置范围等参数,从而间接实现忽略某些区域。 因此,可能的步骤包括:在图像分割阶段调整阈值,使用形态学操作去除噪声,或在测量尺寸设置中通过位置、面积等属性过滤斑点。另外,可能需要使用工具中的排除区域功能,比如绘制忽略区域或加载掩膜图像。 需要确认CogBlobTool的具体配置选项,是否有直接设置忽略区域的参数,或者通过组合其他过滤条件达到相同效果。例如,在“测得尺寸”中设置X/Y位置范围,排除边缘区域,或者使用ConnectivityLabel来忽略特定连通区域。 总结,步骤可能包括:使用ROI工具定义忽略区域,应用掩膜,或在过滤条件中设置位置、尺寸等限制。需要引导用户检查工具中的这些选项,并参考相关教程或文档进行具体操作。</think>要配置 **CogBlobTool** 设置忽略区域,可通过以下步骤实现: --- ### **1. 定义忽略区域(ROI 或掩膜)** - **方法一:通过 ROI 工具手动绘制** 在图像预处理阶段,使用 **CogROITool** 工具定义感兴趣区域(ROI),排除边缘或其他干扰区域。将 `CogROITool` 的输出连接到 `CogBlobTool` 的输入图像,仅分析 ROI 内的像素[^2]。 - **方法二:加载掩膜图像** 创建一个二值掩膜图像(白色为分析区域,黑色为忽略区域),在 `CogBlobTool` 的 **RunParams** 中设置 `InputImageMask` 属性,直接屏蔽掩膜中的黑色区域[^1]。 --- ### **2. 利用“测得尺寸”过滤边界区域** 在 **CogBlobTool** 的 **MeasuredSizes** 设置中,通过位置或尺寸限制排除特定区域: 1. **位置过滤**:设置 `CenterX` 和 `CenterY` 的范围,例如排除图像边缘的斑点: - 若图像宽度为 `W`,高度为 `H`,可设置 `CenterX > 50` 且 `CenterX < W-50`,`CenterY > 50` 且 `CenterY < H-50`[^3]。 2. **面积过滤**:通过 `Area` 属性限制斑点的最小/最大面积,排除过小或过大的干扰。 --- ### **3. 使用“形态学操作”剔除噪声** 在 **MorphologyOperations** 中应用腐蚀(`Erosion`)或开运算(`Open`),消除小颗粒噪声或断裂区域,间接实现忽略区域的效果。 --- ### **4. 连通性规则调整** 通过 **ConnectivityLabel** 参数设置连通性规则(如 4-邻域或 8-邻域),控制斑点的合并或分割逻辑,避免误判特定区域的像素。 --- ### **示例配置流程** ```python # 伪代码示例:使用掩膜设置忽略区域 from Cognex import CogBlobTool blob_tool = CogBlobTool() blob_tool.RunParams.InputImageMask = mask_image # 加载预定义的掩膜 blob_tool.RunParams.SegmentationParams.Mode = "HardThresholdDynamic" # 动态阈值分割 blob_tool.MeasuredSizes.AddSizeFilter("Area", 100, 10000) # 面积过滤 blob_tool.MeasuredSizes.AddPositionFilter("CenterX", 50, image_width-50) # 排除边缘 result = blob_tool.Execute(target_image) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值