主要内容

detectCircleGridPoints

检测图像中的圆形网格模式

描述

单幅图像圆网格检测

例子

imagePoints= detectCircleGridPoints (patternDims在二维真彩色或灰度图像中检测圆形网格,.有关圆网格模式的更多详细信息,请参见圆形网格图案

imagePointsimagesUsed= detectCircleGridPoints(imageFileNamespatternDims方法指定的图像文件中检测圆网格imageFileNames,并另外返回检测到圆网格的图像列表imagesUsed

___= detectCircleGridPoints(图片patternDims检测指定图像中的圆网格图片

立体对圆网格检测

例子

imagePointspairsUsed= detectCircleGridPoints(imageFileNames1imageFileNames2patternDims方法指定的立体图像文件对中检测圆网格imageFileNames1而且imageFileNames2.该函数还返回检测到模式的对的列表pairsUsed

___= detectCircleGridPoints(images1images2patternDims方法指定的立体图像文件对中检测圆网格images1而且images2

可选参数

___= detectCircleGridPoints(___名称=值指定选项,使用一个或多个名称-值参数以及来自以前语法的参数的任何组合。例如,detectCircleGridPointspatternDimsPatternType =“对称”)在指定的工作空间中检测对称圆网格。

例子

全部折叠

将包含圆形网格图案的图像加载到工作区中。

imageFileName = fullfile(toolboxdir)“愿景”),“visiondata”...“校准”“circleGrid”“单一”“image08.jpg”);I = imread(imageFileName);

定义圆网格模式的尺寸。

patternDims = [8 11];

检测圆网格点。

imagePoints = detectCircleGridPoints(I,patternDims,PatternType=“对称”
imagePoints =88×2395.1729 358.4451 383.5573 388.4410 370.8857 420.9698 356.9887 456.5418 341.6686 495.7388 325.0617 538.9151 306.5055 586.8763 285.8323 640.1285 436.4195 363.5016 426.5806 393.4896

在图像上显示检测到的点。

J = insertText(I,imagePoints,1:size(imagePoints,1));J = insertMarker(J,imagePoints,“x”颜色=“绿色”、大小= 5);imshow (J)标题("检测到一个圆网格的尺寸"+ mat2str (patternDims))

图中包含一个axes对象。标题为Detected a Circle Grid of Dimensions的axis对象[8 11]包含一个类型为image的对象。

指定校准图像。

imageDir = fullfile(toolboxdir)“愿景”),“visiondata”...“校准”“circleGrid”“立体”);leftImages = imageDatastore(fullfile(imageDir,“左”));右timages = imageDatastore(fullfile(imageDir,“对”));images1 = leftImages.Files;images2 = righttimages . files;

定义圆网格模式的尺寸。

patternDims = [4 11];

检测图像中的圆网格点。

[imagePoints,pairsUsed] = detectCircleGridPoints(images1,images2,patternDims);

显示相机1的前四幅图像中的点。

图t1 = tiledlayout(2,2, tilespading = .“紧凑”填充=“紧凑”);I = 1:4 nexttile imshow(images1{I}) hold情节(imagePoints(:, 1,我,1),imagePoints(:, 2,我,1),“gx”);结束标题(t1,“相机1”

图中包含4个轴对象。坐标轴对象1包含两个类型为image, line的对象。坐标轴对象2包含两个类型为image, line的对象。坐标轴对象3包含两个类型为image, line的对象。坐标轴对象4包含两个类型为image, line的对象。

2号相机前四张照片的显示点。

images2 = images2(pairsUsed);图t2 = tiledlayout(2,2, tilespading = .“紧凑”填充=“紧凑”);I = 1:4 nexttile imshow(images2{I}) hold情节(imagePoints(:, 1,我,2),imagePoints(:, 2,我,2),“gx”);结束标题(t2,“相机2”

图中包含4个轴对象。坐标轴对象1包含两个类型为image, line的对象。坐标轴对象2包含两个类型为image, line的对象。坐标轴对象3包含两个类型为image, line的对象。坐标轴对象4包含两个类型为image, line的对象。

输入参数

全部折叠

模式维度,指定为一个双元素向量,该向量表示x而且y图像的尺寸,分别。有关圆网格模式的更多详细信息,请参见圆形网格图案

不对称 对称的

不对称电网

对称网格

图像,指定为二维真彩色图像或灰度图像。

数据类型:uint8|int16|uint16||

图像,指定为H——- - - - - -W——- - - - - -numColorChannels——- - - - - -numImages数组,H而且W分别描述每张图片的高度和宽度。numColorChannels是每个图像中的颜色通道的数量,和numImages是图像的数量。

数据类型:uint8|int16|uint16||

来自相机1的立体对图像,指定为H——- - - - - -W——- - - - - -numColorChannels——- - - - - -numImages数组,H而且W分别描述每张图片的高度和宽度。numColorChannels是每个图像中的颜色通道的数量,和numImages是图像的数量吗

数据类型:uint8|int16|uint16||

摄像头2的立体对图像,指定为H——- - - - - -W——- - - - - -numColorChannels——- - - - - -numImages数组,H而且W分别描述每张图片的高度和宽度。numColorChannels是每个图像中的颜色通道的数量,和numImages是图像的数量吗

数据类型:uint8|int16|uint16||

图像文件名,指定为字符向量的单元格数组或字符串数组。

照相机1的立体图像文件名,指定为字符向量的单元格数组或字符串数组。

照相机二的立体图像文件名,指定为字符向量的单元格数组或字符串数组。

名称-值参数

例子:detectCircleGridPointspatternDimsPatternType =“对称”)在指定的工作空间中检测对称圆网格。

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

圆网格图案类型,指定为“非对称”“对称”

圆的颜色,指定为“黑色”“白色”.选择与背景对比最强烈的圆的颜色。

输出参数

全部折叠

检测到的圆网格的中心坐标,返回为-by-2矩阵或an2 -numPairs2数组。是检测到的圆网格数量,计算为在每个维度中检测到的圆网格数量的乘积。矩阵或数组的每一行都指定x-y圆心网格的坐标。

  • 对于单个图像-此参数是一个-by-2矩阵用于检测单幅图像中的圆网格。

  • 对于立体对-这个参数是2 -numPairs-by-2数组用于检测立体图像中的圆网格。numPairs检测到圆网格的图像对的数量。imagePoints(::: 1)返回第一组图像中的点,并且imagePoints(::: 2)是第二局的得分。

模式检测标志,作为逻辑向量返回。的值真正的imagesUsed向量表示模式已在相应的图像中检测到。

立体对模式检测标志,作为逻辑向量返回。的值真正的pairsUsed向量表示模式已在对应的图像对中检测到。

算法

要检测圆形网格图案,图案必须:

  • 至少包含16个圆

  • 在单个相机的图像中或在一对立体相机的两个图像中完全可见

版本历史

在R2021b中引入