主要内容

detectCheckerboardPoints

检测图像中的棋盘图案

描述

例子

imagePointsboardSize= detectCheckerboardPoints(在二维真彩色或灰度图像中检测大小大于4x4平方的黑白棋盘。该函数返回棋盘的检测点和尺寸。

imagePointsboardSizeimagesUsed= detectCheckerboardPoints(imageFileNames在以文件名数组形式提供的一组输入图像中检测棋盘图案。

imagePointsboardSizeimagesUsed= detectCheckerboardPoints(图片检测一组输入图像中的棋盘图案,以灰度图像或真彩色图像数组的形式提供。

imagePointsboardSizepairsUsed= detectCheckerboardPoints(imageFileNames1imageFileNames2检测立体图像对中的棋盘图案,作为文件名的单元格数组提供。

imagePointsboardSizepairsUsed= detectCheckerboardPoints(images1images2检测立体图像对中的棋盘图案,以灰度或真彩色图像数组的形式提供。

imagePointsboardSizepairsUsed= detectCheckerboardPoints(___名称,值使用一个或多个指定的其他选项名称,值对参数。未指定的属性有默认值。

例子

全部折叠

创建一个imageDatastore包含来自GoPro相机的校准图像。

imds = imageDatastore(fullfile(toolboxdir(“愿景”),“visiondata”“校准”“还装有”));

检测校准模式使用“HighDistortion”选项,这是很好的使用鱼眼镜头图像。

[imagePoints,boardSize,imagesUsed] = detectCheckerboardPoints(imds.Files(1:4),“HighDistortion”,真正的);

显示检测点。

I = 1:4读取图像%I = readimage(imds, I);在检测点位置插入标记I = insertMarker(I, imagePoints(:,:, I),“o”“颜色”“红色”“大小”10);显示图像Subplot (2,2, i);imshow(我);结束

图中包含4个轴对象。坐标轴对象1包含一个image类型的对象。坐标轴对象2包含一个image类型的对象。坐标轴对象3包含一个image类型的对象。Axes对象4包含一个image类型的对象。

加载包含棋盘图案的图像。

imageFileName = fullfile(toolboxdir(“愿景”),“visiondata”“校准”“摄像头”“image4.tif”);I = imread(imageFileName);

检测棋盘点。

[imagePoints,boardSize] = detectCheckerboardPoints(I);

显示检测点。

J = insertText(I,imagePoints,1:size(imagePoints,1));J = insertMarker(J,imagePoints,“o”“颜色”“红色”“大小”5);imshow (J);标题(sprintf ('检测到一个%d x %d棋盘'boardSize));

图中包含一个轴对象。标题为axes的对象检测到一个7 x 10 Checkerboard,其中包含一个image类型的对象。

创建校准图像文件名的单元格数组。

i = 1:5 imageFileName = sprintf(“图像% d.tif”,我);imageFileNames{i} = fullfile(matlabroot,“工具箱”“愿景”...“visiondata”“校准”“摄像头”, imageFileName);结束

检测图像中的校准模式。

[imagePoints,boardSize,imagesUsed] = detectCheckerboardPoints(imageFileNames,“PartialDetections”、假);

显示检测点。

imageFileNames = imageFileNames(imagesUsed);i = 1:numel(imageFileNames) i = imread(imageFileNames{i});Subplot (2,2, i);imshow(我);持有;情节(imagePoints(:, 1,我),imagePoints(:, 2,我)“罗”);结束

阅读立体图像。

numImages = 4;images1 = cell(1, numImages);images2 = cell(1, numImages);i = 1:numImages images1{i} = fullfile(matlabroot,“工具箱”“愿景”...“visiondata”“校准”“立体”“左”sprintf (“左% 02 d.png”,我));Images2 {i} = fullfile(matlabroot,“工具箱”“愿景”...“visiondata”“校准”“立体”“对”sprintf (“对% 02 d.png“,我));结束

检测图像中的棋盘。

[imagePoints, boardSize pairsUsed] =...detectCheckerboardPoints (images1 images2);

显示点来自images1

images1 = images1(pairsUsed);图;i = 1:numel(images1) i = imread(images1{i});次要情节(2,2,我);imshow(我);持有;情节(imagePoints(:, 1,我,1),imagePoints(:, 2,我,1),“罗”);结束注释(“文本框”,[0 0.9 1 0.1],“字符串”“相机1”...“EdgeColor”“没有”“HorizontalAlignment”“中心”

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

显示点来自images2

images2 = images2(pairsUsed);图;i = 1:numel(images2) i = imread(images2{i});Subplot (2,2, i);imshow(我);持有;情节(imagePoints(:, 1,我,2),imagePoints(:, 2,我,2),“罗”);结束注释(“文本框”,[0 0.9 1 0.1],“字符串”“照相机2”...“EdgeColor”“没有”“HorizontalAlignment”“中心”

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

输入参数

全部折叠

输入图像,指定为——- - - - - -N-by-3真彩色或——- - - - - -N二维灰度。输入图像必须是实数且非稀疏的。该函数可以检测最小大小为4 × 4的棋盘。

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

映像文件名称,指定为N单元格数组N文件的名字。

相机1图像的文件名,指定为N单元格数组N文件的名字。数组中包含的图像必须与数组中包含的图像的顺序相同imageFileNames2,形成立体对。

相机2图像的文件名,指定为N单元格数组N文件的名字。数组中包含的图像必须与数组中包含的图像的顺序相同imageFileNames1,形成立体对。

图像,指定为H——- - - - - -W——- - - - - -B——- - - - - -F包含一组灰度或真彩色图像的数组。输入维度为:

H表示图像高度。
W表示图像宽度。
B表示颜色通道。值为1表示灰度图像,值为3.表示真彩色图像。
F表示图像帧数。

来自相机1的立体对图像,指定为anH——- - - - - -W——- - - - - -B——- - - - - -F包含一组灰度或真彩色图像的数组。输入维度为:

H表示图像高度。
W表示图像宽度。
B表示颜色通道。值为1表示灰度图像,值为3.表示真彩色图像。
F表示图像帧数。

来自摄像头2的立体对图像,指定为anH——- - - - - -W——- - - - - -B——- - - - - -F包含一组灰度或真彩色图像的数组。输入维度为:

H表示图像高度。
W表示图像宽度。
B表示颜色通道。值为1表示灰度图像,值为3.表示真彩色图像。
F表示图像帧数。

名称-值参数

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

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:“MinCornerMetric””,0.15

最小角度量阈值,指定为非负标量。当图像有噪声或高度纹理时,增加这个值以减少假角检测的数量。当你设置“HighDistortion”财产该函数将默认值设置为0.15.当你设置“HighDistortion”财产真正的该函数将默认值设置为0.12.减小该值会导致角点检测的增加。

高失真,指定为真正的.集“HighDistortion”真正的当图像包含高度失真时,这是典型的宽视场相机,如鱼眼相机。集“HighDistortion”当图像不包含高度失真时。设置“HighDistortion”真正的可以增加图像失真的弹性,但降低处理速度。

部分检测,指定为真正的.集“PartialDetections”真正的返回部分检测到的棋盘。函数用[填充缺失的关键点检测南南)坐标。集“PartialDetections”丢弃部分检测到的棋盘。对于立体图像对,此属性将被忽略。

输出参数

全部折叠

检测到棋盘角坐标,返回为一个图像的-by-2矩阵。对于多个图像,点将作为2 -图像数量数组,对于立体图像对,函数返回点作为2 -配对数——- - - - - -摄像头数量数组中。

对于立体对,imagePoints(:,:,:,1)是第一组图像中的点,和imagePoints(:,:,:,2)是来自第二组图像的点。输出包含[数目]xy)坐标。每个坐标表示棋盘上检测到直角的点。的值决定函数返回的点数boardSize,表示检测到的平方数。该函数以亚像素精度检测点。

该函数计算点的数量,,详情如下:

刺激boardSize1)。

如果无法检测到棋盘:
imagePoints[]
boardSize(0,0)

当您指定imageFileNames输入后,函数可以返回imagePoints作为一个2 -N数组中。在这个数组中,N表示检测到棋盘的图像数量。如果棋盘无法被检测到,该函数将设置imagePoints[]

仅适用于单相机图像:

  • 如果无法检测到完整的棋盘,则该函数返回一个部分检测到的棋盘[南南]作为x-y中缺失角的坐标imagePoints.属性可以修改此默认行为“PartialDetections”名称-值参数。

  • 在可能的情况下,该功能将部分检测到的棋盘板定向,使原点的位置和角的排列与完全可见的棋盘板一致。如果函数不能在任何输入图像中检测到完整的棋盘,则使用检测到的最大棋盘作为参考棋盘。

棋盘尺寸,返回为2元素[高度宽度)向量。棋盘的尺寸是用方格数表示的。

如果棋盘无法被检测到,该函数将设置boardSize(0,0)

模式检测标志,返回为N的-by-1逻辑向量N逻辑值。该函数输出与输入图像相同数量的逻辑。一个真正的值表示在对应的图像中检测到模式。一个值表示函数没有检测到模式。

立体对模式检测标志,返回为N的-by-1逻辑向量N逻辑值。该函数输出与输入图像相同数量的逻辑。一个真正的值表示在对应的立体图像对中检测到图案。一个Value表示函数不检测模式。

对于立体对模式检测,棋盘需要在两幅图像中完全可见才能被检测到。与单摄像机校准不同,立体图像对拒绝部分检测棋盘。

参考文献

盖革,A. F.穆斯曼,O.卡尔,B.舒斯特。“使用单次拍摄自动相机和距离传感器校准”国际机器人与自动化会议(ICRA)2012年5月,美国圣保罗。

扩展功能

版本历史

在R2014a中引入