QQ登录

只需一步,快速开始

工业视觉halcon points_foerstner函数介绍

[ 复制链接 ]
points_foerstner(Image : : SigmaGrad, SigmaInt, SigmaPoints, ThreshInhom, ThreshShape, Smoothing, EliminateDoublets : RowJunctions, ColumnJunctions, CoRRJunctions, CoRCJunctions, CoCCJunctions, RowArea, ColumnArea, CoRRArea, CoRCArea, CoCCArea)

points_foerstner从图像中提取显著点。显著点是与邻域不同的点,即,图像函数在二维中变化的点。
这些变化一方面发生在图像边缘的交点(称为交点),另一方面发生在颜色或亮度与周围邻居不同的地方(称为面积点)。
点的提取分两步进行:第一步是点区域,即,从图像中提取非均匀各向同性区域。为此,计算出平滑矩阵
2019-06-05_152136.jpg
其中Ix,c和Iy,c为各图像通道的一阶导数,S为平滑。
如果Smoothing 是“gauss”,则使用尺寸为SigmaGrad的高斯导数计算导数,并使用尺寸为SigmaInt的高斯函数进行平滑。
如果Smoothing 是“mean”,则使用3x3sobel滤波器计算导数(因此忽略SigmaGrad),并使用SigmaInt x SigmaInt均值滤波器进行平滑。
然后inhomogeneity = Trace(M)为图像的不均匀性,
2019-06-05_152356.jpg
为纹理在图像中的各向同性程度。
对于非均匀性大于或等于 ThreshInhom 的像点,同时各向同性大于或等于ThreshShape的像点,将进一步研究。


在第二步中,对得到的点计算两个优化函数。
本质上,这些优化函数平均每个点到边界方向的距离(对于交点)和梯度方向(对于面积点)在点周围的观察窗口内。
如果Smoothing “gauss”,则由一个大小为s的高斯函数进行平均;
如果Smoothing 是“mean”,则由一个SigmaPoints x SigmaPoints均值滤波器进行平均。
优化函数的局部极小值决定了所提取的点。它们的亚像素精确位置在((RowJunctions, ColumnJunctions)和((RowArea, ColumnArea)中返回。


除了它们的位置之外,对于每个提取的点,返回相应协方差矩阵的corrjunction、corcjunction和coccjunction元素(以及CoRRArea、CoRCArea和CoCCArea)。
该矩阵便于对计算点位置的精度作出结论。
为了得到实际值,需要估计输入图像中的噪声量,
并将协方差矩阵的所有分量与噪声方差相乘。
(要估计噪声的大小,可以对均匀图像区域施加强度,或对灰度值构成平面的图像区域施加平面偏差。
在这两种情况下,都在参数偏差中返回噪声量。)
下面示例程序说明了这一点
%HALCONEXAMPLES%\hdevelop\Filter\Points\points_foerstner_ellipses.hdev




由于这种算子的性质,拐角通常会产生两个不同的点:
一个交点(拐角的边缘实际上在此交点处)和拐角内的一个面积点。
如果EliminateDoublets为“true”,则这些双重态将自动被排除。为了做到这一点,每对一个交点和一个面积点被检查。
如果两个点都位于优化函数的观测窗口内,则对这两个点计算点位置的精度,剔除精度较低的点。
为false,则返回每个检测到的点。


注意,如果 Smoothing 为 'mean',那么只允许SigmaInt和sigmapoint的奇数值。
偶数值将被下一个更大的奇数值自动替换。


参数:
Image  输入图像
SigmaGrad 用于计算梯度的平滑量。如果 Smoothing 为 'mean', SigmaGrad被忽略。
SigmaInt 用于梯度积分的平滑量
SigmaPoints 优化函数中使用的平滑量。
ThreshInhom 用于分割非均匀图像区域的阈值。
ThreshShape 用于点区域分割的阈值。
Smoothing 使用平滑的方法。有 'gauss', 'mean'
EliminateDoublets 消除多个检测点。


RowJunctions,ColumnJunctions 检测到的连接点的行列坐标。
CoRRJunctions  行部分的协方差矩阵的检测节点。
CoRCJunctions  混合部分的协方差矩阵的检测节点。
CoCCJunctions 列部分的协方差矩阵的检测节点


RowArea,ColumnArea检测到的区域点的行列坐标。
CoRRArea,行部分的协方差矩阵的检测面积点。
CoRCArea 混合部分的协方差矩阵的检测面积点。
CoCCArea 列部分的协方差矩阵的检测面积点。


例程:
read_image (Image, 'fabrik')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_set_part (0, 0, Height - 1, Width - 1)
SigmaGrad := 1.0
SigmaInt := 2.0
SigmaPoints := 3.0
ThreshInhom := 400
points_foerstner (Image, SigmaGrad, SigmaInt, SigmaPoints, ThreshInhom, 0.1, 'gauss', 'false', RowJunctions, ColJunctions, CoRRJunctions, CoRCJunctions, CoCCJunctions, RowArea, ColArea, CoRRArea, CoRCArea, CoCCArea)
gen_cross_contour_xld (Junctions, RowJunctions, ColJunctions, 6, rad(45))
gen_cross_contour_xld (Area, RowArea, ColArea, 6, rad(45))
dev_display (Image)
dev_set_color ('yellow')
dev_display (Area)
dev_set_color ('cyan')
dev_display (Junctions)
  

halcon从自学到接项目视频教程,另外再赠送全网最全资源  

  

欢迎围观我录制的一套halcon自学视频教程(进入)





回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索