首页 > 其他分享 >Halcon 一维卡尺测量找点之模糊集测量法

Halcon 一维卡尺测量找点之模糊集测量法

时间:2024-11-02 17:17:52浏览次数:7  
标签:position 函数 模糊 Halcon 边缘 measure fuzzy 卡尺 模糊集

        模糊测量是对标准测量的一种扩展,并不意味着测量是“模糊的”,而是用模糊隶属函数来控制边缘的选择。所谓的模糊隶属函数,就是将边缘的特征值转换为隶属度值,基于这些隶属值做出是否选择边缘的决定,即当隶属值大于你设定模糊阈值时,边缘就会被选中,反之则反。这种方法的优点是即使使用很低的最小阈值或平滑,也能灵活处理额外的边缘。

     常规操作流程为1创建模糊函数,2指定模糊函数,3执行测量

1,创建模糊函数

create _ funct _ ld _ pairs (:: XValues , YValues : Function )

功能:通过二维数组创建一个离散一维函数,即生成模糊函数。
 XValues :函数点的 x 值,指边缘特征。
 YValues :函数点的 y 值,指相应特征值的权重,0< y <1。
 Function :已创建的模糊函数。

2,指定模糊函数
 1)set _ fuzzy _ measure (: MeasureHandle , SetType , Function :)
功能:指定一个模糊函数。
 SetType :选择模糊集。
模糊集使得 fuzzy _ measure _ pos 和 fuzzy _ measure _ pairs / fuzzy _ measure _ pairing 算子够评估和选择检测到的候选边缘,主要有以下五种类型模糊集(其中 position _ pair 、 site gary 仅由 fuzzy _ measure _ pairs / fuzzy _ measure _ pairing 算子使用):
① contrast :使用模糊函数来评估候选边缘的振幅(一阶导数值)。在提取边缘对时,通两条边缘振幅的模糊分数的几何平均值来获得模糊评估。
② position :使用模糊函数评估每个候选边缘到测量对象的参考点的距离,参考点为量对象轮廓线的起点。而 position _ center 或 position _ end 将参考点设置为轮廓线的中点末端; position _ first _ edge / position _ last _ edge 将参考点设置为第一个/最后提取的边缘的置。当提取边缘对时,通过两条边缘位置的模糊分数的几何平均值来获得模糊评估。
③ position _ pair :与 position 相似,计算每个边缘对的中心点与测量对象的参考点之间距离。参考点可以分别由 position _ pair _ center , position _ pair _ end 和 position first _ paits,position _ last _ pair 来设置。
④ size :以像素为单位,用模糊函数评估边缘对内两条边缘的规定距离。
⑤ gray :使用模糊函数评估边缘对的两个边缘之间的平均投影灰度值。
 2)set _ fuzzy _ measure _ norm _ pair (:: MeasureHandle . PairSize . SetType , Function :)
功能:设置归一化的模糊隶属度函数,与 set _ fuzzy _ measure 算子不同,这些函数的横
坐标 x 必须由边缘对的预期宽度 s (在参数 PairSize 中传递)来定义。
 PairSize :边缘对的预期宽度。
 SetType :选择模糊集。选择模糊集主要有如下三种类型,即 size , position 和 position - pair .其中 position _ pair 仅由 fuzzy _ measure _ pairs 和 fuzzy _ measure _ pairing 算子使用
 size 模糊集以像素为单位,用模糊函数评估边缘对内两条边缘的归一化距离。这个模糊集也可以通过 size _ diff 指定为归一化的大小差异,或通过 size _ abs _ diff 指定为绝对归一化大小差异。另外两个模糊集 position 和 position _ pair 参考算子 set _ fuzzy _ measure 参数详解。

3,执行测量

1)fuzzy _ measure _ pos ( Image :: MeasureHandle , Sigma , AmpThresh , FuzzyThresh , Transition :
 RowEdge , ColumnEdge , Amplitude , FuzzyScore , Distance )
功能:提取垂直于矩形或扇环的直边,与 measure _ pos 不同的是,该算子使用模糊函数来判断和选择边缘 AmpThresh :最小的边缘梯度阈值,即边缘的一阶导数绝对值大于该值才会被选中。 FuzzyThresh :最小模糊阈值,即权重的几何平均值大于该值,边缘才会被选中。 RowEdge 、 ColumnEdge :边缘点的行、列坐标。
 Amplitude :边缘梯度幅值(带符号),即一阶导数值。
 FuzzyScore :边缘模糊评估的分数

 2)fuzzy _ measure _ pairs ( Image .: MeasureHandle , Sigma , AmpThresh , FuzzyThresh . Transition :
 RowEdgeFirst , ColumnEdgeFirst , AmplitudeFirst , RowEdgeSecond , ColumnEdgeSecond , AmplitudeSecond ,
 RowEdgeCenter , ColumnEdgeCenter , FuzzyScore , IntraDistance , InterDistance )
功能:提取垂直于矩形或扇环的直边对,与 measure _ pairs 不同的是,该算子使用模糊函数来判断和选择边缘对。
 RowEdgeCenter 、 ColumnEdgeCenter :边缘对的中心行、列坐标。

3) fuzzy _ measure _ pairing ( Image :: MeasureHandle , Sigma . AmpThresh , FuzzyThresh . Transition , Pairing , NumPairs : RowEdgeFirst , ColumnEdgeFirst , AmplitudeFirst , RowEdgeSecond , ColumnEdge - Second , AmplitudeSecond , RowPairCenter , ColumnPairCenter , FuzzyScore , IntraDistance )
功能:提取垂直于矩形或扇环的直边对。提取算法与 fuzzy _ measure _ pairs 相同,但该算子可以使用参数 Pairing 来提取彼此相交或者包含的边缘对。
 Pairing :配对约束。
 NumPairs :返回边缘对的数量。
 RowPairCenter 、 ColumnPairCenter :边缘对的中心行、列坐标。

案例:

read_image (Image1, 'E:/Halcon数据/资源图片/123.png')
 rgb1_to_gray (Image1, Image)
 get_image_size (Image, Width, Height)
dev_get_window (WindowHandle)
dev_set_draw ('margin')
gen_rectangle2 (ROI_0, 315.308, 506.206, rad(-0.340442), 426.008, 19.2722)
Row := 315.308
Col:= 506.206
Phi := rad(-0.340442)
Length1 := 426.008
Length2 := 19.2722
gen_measure_rectangle2 (Row, Col, Phi, Length1, Length2, Width, Height, 'nearest_neighbor', MeasureHandle)
create_funct_1d_pairs ([40,75,110], [0.5,1.0,0.1], FuzzyAbsSizeDiffFunction)
* set_fuzzy_measure_norm_pair (MeasureHandle, 3, 'position_pair_end', FuzzyAbsSizeDiffFunction)
set_fuzzy_measure (MeasureHandle, 'size', FuzzyAbsSizeDiffFunction)
fuzzy_measure_pairs (Image, MeasureHandle, 1, 30, 0.5, 'all', RowEdgeFirst1, ColumnEdgeFirst1, AmplitudeFirst1, RowEdgeSecond1, ColumnEdgeSecond1, AmplitudeSecond1, RowEdgeMiddle1, ColumnEdgeMiddle1, FuzzyScore1, IntraDistance1, InterDistance1)
PRows:=[RowEdgeFirst1,RowEdgeSecond1]
PCols:=[ColumnEdgeFirst1,ColumnEdgeSecond1]
 PSize := Length2 * 0.5
RowStart := Row + sin(Phi) * Length1
RowEnd := Row - sin(Phi) * Length1
ColStart := Col - cos(Phi) * Length1
ColEnd := Col + cos(Phi) * Length1
for idx := 0 to |PRows| - 1 by 1
    gen_contour_polygon_xld (CPoint, [PRows[idx] - sin(rad(90) + Phi) * PSize,PRows[idx] - sin(Phi - rad(90)) * PSize], [PCols[idx] + cos(rad(90) + Phi) * PSize,PCols[idx] + cos(Phi - rad(90)) * PSize])
    dev_set_color ('red')
    dev_set_line_width (3)
    dev_display (CPoint)
endfor
 
 for I := 0 to |ColumnEdgeFirst1| - 1 by 1
    MRow := (RowEdgeSecond1[I] +RowEdgeFirst1[I])/2
    MCol := (ColumnEdgeSecond1[I] +ColumnEdgeFirst1[I])/2
    dev_set_color ('white')
    gen_cross_contour_xld (Cross, MRow , MCol, 10, 0)
    dev_display (Cross)
    disp_message (WindowHandle, Pin, 'image', MRow-20 , MCol, 'black', 'false')
    Pin := Pin + 1
    disp_message (WindowHandle, IntraDistance1[I]$'.2f' +'Pix,'+ ' score:' + FuzzyScore1[I]$'.2f', 'image', MRow+10, MCol-30, 'black', 'false')

endfor

标签:position,函数,模糊,Halcon,边缘,measure,fuzzy,卡尺,模糊集
From: https://blog.csdn.net/2202_75557553/article/details/143445503

相关文章

  • C++ halcon判断图像是否为空
    使用CountObj函数首先,可以使用CountObj函数来检查当前图像是否为空。如果图像为空,则返回的计数为0;否则,返回的计数大于0。示例代码如下:cppCopyCode HTuplehNum;HalconCpp::CountObj(m_hCurrentImg,&hNum);if(hNum==0){qDebug()<<"传入图像为空!";}else{qDebu......
  • Halcon图像颜色通道拆分合并与四则运算
    读取图像并标注目标点灰度值,为后续对比做准备read_image(Image,'E:/Halcon/图片/880720666518444692.jpg')dev_set_draw('margin')dev_set_color('green')dev_get_window(WindowHandle)query_font(WindowHandle,Font)FontWithSize:=Font[0]+'-40&......
  • Halcon 多相机统一坐标系(标定)
        多相机统一坐标系是指将多个不同位置的相机的图像采集到同一个坐标系下进行处理和分析的方法。在计算机视觉和机器视觉领域中,多相机统一坐标系被广泛应用于三维重建、立体视觉、目标跟踪等任务中。以gen_binocular_rectification_map(生成描述图像映射的转换图的双......
  • Halcon双目立体视觉
               双目立体视觉机器视觉的一种重要形式,基于视差原理并由多幅图像获取物体三维几何信息,一般由双摄像机从不同角度同时获得被测物的两幅数字图像,或由单摄像机在不同时刻从不同角度获得被测物的两幅数字图像,并基于视差原理恢复物体的三维几何信息,......
  • Halcon图像拼接
    read_image(Image13,'E:/vs//13.png')get_image_size(Image13,Width,Height)gen_rectangle1(Rectangle,0,0,Height,Width/2)reduce_domain(Image13,Rectangle,ImageReduced)crop_domain(ImageReduced,Image1)gen_rectangle1(Rectangle,0,W......
  • Halcon缺陷检测之光度立体法
      通过在案例中应用摸索算子的特性,对光度立体法有了进一步认识。基于此重新理解文档,希望能够帮助有疑惑的同志,同时也期望看到博客的同志如果有更深的理解以及应用技巧,共享与大家共同交流进步。photometric_stereoImages(input_object):输入图像输入图像(一个至少包含3......
  • Halcon 创建变异模型
    *create_variation_model(::Width,Height,Type,Mode:ModelID)说明:创建一个ID为ModelID,宽为Width,高为Height,类型为Type的VariationModel,参数Mode决定了创建标准图像和相应的variation图像的方法。'standard'表示标准的训练方法,标准图像的位置是各训练图像位置的平均......
  • Halcon九点标定与旋转标定
    9点标定是通过9个点计算出相机坐标系到机械手坐标系的一个仿射变换,(实际上空间中的二维平面的仿射变换最低只需要3个点就可以,但是为了保证矩阵的准确性,数据点一般采用9-12点)。在实际应用过程中,需要获取像素下特征点的坐标和对应机械手的坐标。联立方程组求解即可得到对应仿射变......
  • HALCON数据结构之矩阵
    1.1矩阵的创建、设置和访问*1、矩阵的创建*创建单位矩阵create_matrix(3,3,'identity',MatrixID1)*创建一个全是常数的矩阵create_matrix(3,3,7,MatrixID2)*为主对角线上的所有元素都被设置为参数Value的值create_matrix(3,3,[3,7,1],MatrixID3)*为矩......
  • HALCON数据结构之字符串
    1.1String字符串的基本操作*将数字转换为字符串或修改字符串*tuple_string(T,Format,String)//HALCON语句*String:=T$Format//赋值操作*Formatstring由以下四个部分组成:*<flags><fieldwidth>.<precision><conversion字符>*1.flags标志*1.1字符'-'*......