主要内容

创建于360年°鸟瞰图图像车辆

这个例子展示了如何创建一个360°鸟瞰图图像周围车辆包围视图中使用的监控系统。

概述

周围查看监测是一个重要的安全特性所提供的高级驾驶员辅助系统(ADAS)。这些监测系统减少盲点,帮助司机了解车辆的相对位置对环境,使紧张的停车动作更容易、更安全。典型的环绕视图监控系统由四个鱼眼相机,180°的视野,安装在车辆的四个方面。显示在车辆显示司机前面,左,右,后,车辆的鸟瞰图。而四个视图显示四个相机是微不足道的,创建一个鸟瞰车辆的环境需要内在和外在相机标定和图像缝合结合多个相机视图。

在这个例子中,你第一次校准多幅相机系统估计摄像机的参数。然后使用校准相机创建鸟瞰图图像缝合在一起的环境从多个摄像机的图像。

校准多幅相机系统

首先,校准相机的内在和外在的参数估计的多幅相机系统构建monoCamera对象中的每个相机多幅相机系统。出于演示的目的,这个示例使用从八个方向拍摄的图像由一个相机,一个78˚的视野,覆盖360˚的车辆。设置模拟多幅相机系统安装在屋顶的一个工具。

估计单眼相机intrinsic

相机标定是一个重要的步骤的过程中生成鸟瞰。估计摄像机内参数,估算所需相机外在,消除畸变的图像,测量实际的距离,最后生成鸟瞰图的形象。

在这个例子中,摄像机校准中使用棋盘校准模式使用单摄像机校准器应用出口到和相机参数cameraParams.mat。加载这些估计摄像机内参数。

ld =负载(“cameraParams.mat”);

从这个例子中模仿八个摄像头,复制加载intrinsic 8倍。如果您使用的是八个不同的相机,校准每个相机分别和他们的内在参数存储在一个单元阵列命名intrinsic

numCameras = 8;intrinsic =细胞(numCameras, 1);intrinsic (:) = {ld.cameraParams.Intrinsics};

估计单眼相机外在

在这个步骤中,您估计每个相机的外部定义它在车辆坐标系中的位置。估计外在涉及从八个摄像头获取校准模式在一个特定的取向对道路和车辆。在本例中,您使用的水平方向校准模式。有关相机外在评估过程和模式取向,明白了校准单眼相机

把校准模式在水平方向平行于地面,并在适当的高度,这样所有的角落点模式是可见的。测量高度后放置校准模式和正方形在棋盘的大小。在本例中,模式是水平放置的高度62.5厘米模式可见相机。在棋盘的大小广场模式测量是29毫米。

%测量米patternOriginHeight = 0.625;squareSize = 29 e - 3;

下图说明了校准的正确取向模式相机沿着四个主要方向,对车辆的轴。然而,对于生成鸟瞰图,这个示例使用面向四个额外的摄像机沿不同方向的主要方向。估计外在的相机,选择和分配之间的择优取向四个主要方向。例如,从一个前置摄像头,如果你捕获的X - Y轴对齐模式如下图所示。

的变量patternPositions商店的择优取向的选择所有的八个摄像头。这些选择定义模式之间的相对取向轴和车辆轴estimateMonoCameraParameters函数。显示图片的相机位置相对于车辆安排。

patternPositions = [“前面”,“左”,“左”,“返回”,“返回”,“正确”,“正确”,“前面”];extrinsicsCalibrationImages =细胞(1、numCameras);我= 1:numCameras文件名=“extrinsicsCalibrationImage”(我)+ +字符串“jpg”;extrinsicsCalibrationImages{我}= imread(文件名);结束helperVisualizeScene (extrinsicsCalibrationImages patternPositions)

图包含9轴对象。坐标轴对象1标题前面包含一个类型的对象的形象。轴2剩下标题包含一个对象类型的形象。轴3剩标题包含一个对象类型的形象。坐标轴对象4与标题包含一个类型的对象的形象。5轴对象与标题包含一个类型的对象的形象。6轴对象与标题包含一个类型的对象的形象。坐标轴对象7与标题包含一个类型的对象的形象。坐标轴对象8与标题前面包含一个类型的对象的形象。坐标轴对象9与标题自我车辆包含一个类型的对象的形象。

估计一个单眼相机的外参数,遵循这些步骤:

  1. 消除畸变的图像。

  2. 检测图像中的棋盘广场的角落。

  3. 创造世界的棋盘。

  4. 使用estimateMonoCameraParameters函数来估计非本征参数。

  5. 创建一个使用外在的参数monoCamera对象,假设的位置传感器在车辆坐标系的原点位置。

在这个例子中,设置使用一个相机的手动旋转摄像机支架。虽然相机的焦点中心已经在这个运动中,为了简单起见,这个示例假定传感器保持在相同的位置(起源)。然而,摄像头之间的距离一个真正的车辆可以测量和进入传感器位置的属性monoCamera

monoCams =细胞(1、numCameras);我= 1:numCameras% Undistort图像。undistortedImage = undistortImage (extrinsicsCalibrationImages {}, intrinsic{我});%检测棋盘点。[imagePoints, boardSize] = detectCheckerboardPoints (undistortedImage,“PartialDetections”、假);%生成世界的棋盘。worldPoints = generateCheckerboardPoints (boardSize squareSize);%估计单眼相机的外参数。(音高、偏航、卷、高度)= estimateMonoCameraParameters (intrinsic {},imagePoints、worldPoints patternOriginHeight,“PatternPosition”patternPositions(我));%创建一个monoCamera对象,假设摄像机在原点。monoCams{我}= monoCamera (intrinsic{我}、身高、“节”球场上,“偏航”偏航,“滚”滚,“SensorLocation”,(0,0));结束

创建于360年°鸟瞰图形象

使用monoCamera对象使用估计相机配置参数来生成个人鸟瞰图8相机的照片。把它们创建于360年°鸟瞰图的形象。

捕获的场景摄像机和MATLAB的工作区中加载图片。

sceneImages =细胞(1、numCameras);我= 1:numCameras文件名=“sceneImage”(我)+ +字符串“jpg”;sceneImages{我}= imread(文件名);结束helperVisualizeScene (sceneImages)

图包含9轴对象。坐标轴对象1包含一个类型的对象的形象。坐标轴对象2包含一个类型的对象的形象。坐标轴对象3包含一个类型的对象的形象。坐标轴对象4包含一个类型的对象的形象。5轴对象包含一个类型的对象的形象。6轴对象包含一个类型的对象的形象。7轴对象包含一个类型的对象的形象。8轴对象包含一个类型的对象的形象。坐标轴对象9包含一个类型的对象的形象。

变换图像鸟瞰图

指定车辆周围的矩形区域,你想变成一个鸟瞰图和输出图像大小。在这个例子中,最远的物体抓取的图像约4.5米。

创建一个广场输出视图覆盖半径4.5米左右。

distFromVehicle = 4.5;%在米官样文章= [-distFromVehicle distFromVehicle,% (xmin xmax,-distFromVehicle distFromVehicle);% ymin ymax]outImageSize =(640年,南);

创建图像从每个鸟瞰图monoCamera对象,遵循这些步骤。

  1. 消除畸变的图像。

  2. 创建一个birdsEyeView对象。

  3. 无畸变的图像变换到图像使用鸟瞰图transformImage函数。

bevImgs =细胞(1、numCameras);宰=细胞(1、numCameras);i = 1: numCameras undistortedImage = undistortImage (sceneImages {}, monoCams{我}.Intrinsics);宰我{}= birdsEyeView (monoCams{},官样文章,outImageSize);bevImgs{我}= transformImage(宰我{},undistortedImage);结束helperVisualizeScene (bevImgs)

图包含9轴对象。坐标轴对象1包含一个类型的对象的形象。坐标轴对象2包含一个类型的对象的形象。坐标轴对象3包含一个类型的对象的形象。坐标轴对象4包含一个类型的对象的形象。5轴对象包含一个类型的对象的形象。6轴对象包含一个类型的对象的形象。7轴对象包含一个类型的对象的形象。8轴对象包含一个类型的对象的形象。坐标轴对象9包含一个类型的对象的形象。

测试的准确性通过外在估计过程helperBlendImages函数混合八鸟瞰图图像。然后显示图像。

tiled360DegreesBirdsEyeView = 0 (640、640、3);i = 1: numCameras tiled360DegreesBirdsEyeView = helperBlendImages (tiled360DegreesBirdsEyeView, bevImgs{我});结束图imshow (tiled360DegreesBirdsEyeView)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

对于这个示例,外在的初步结果估计过程包含一些失调。然而,这些可以归因于一个错误的假设摄像机是位于车辆坐标系统的起源。纠正偏差需要图像配准。

注册和针鸟瞰图图像

首先,匹配特性。比较和可视化的结果matchFeaturesmatchFeaturesInRadius,这使您能够使用几何约束限制搜索边界。约束特性匹配可以改善结果重复的模式时,比如在路上,路面标记和路标是标准的。在工厂设置,你可以设计一个更复杂的校准的配置模式和纹理背景,进一步提高了标定和注册过程。的基于功能的全景图像拼接示例详细解释了如何注册多个图像和针他们创建一个全景。结果表明,约束特性匹配使用matchFeaturesInRadius比赛只有两个图片和相应的特性对丢弃任何特性对应无关的重复模式。

%的最后两张图片最好现场演示的优势%约束特性匹配,因为他们有很多重复的人行道上%的标记。I = bevImgs {7};J = bevImgs {8};%从两幅图像中提取特征。grayImage = rgb2gray(我);pointsPrev = detectKAZEFeatures (grayImage);[featuresPrev, pointsPrev] = extractFeatures (grayImage pointsPrev);grayImage = rgb2gray (J);点= detectKAZEFeatures (grayImage);(特性,分)= extractFeatures (grayImage点);使用两种方法%匹配特性。indexPairs1 = matchFeaturesInRadius (featuresPrev特性、points.LocationpointsPrev。位置、15“MatchThreshold”10“MaxRatio”,0.6);indexPairs2 = matchFeatures (featuresPrev、特性“MatchThreshold”10“MaxRatio”,0.6);%可视化匹配特性。tiledlayout (1、2) nexttile showMatchedFeatures (I, J, pointsPrev (indexPairs1(: 1)),点(indexPairs1(:, 2)))标题(sprintf (' % d双匹配\ n空间约束的大小(indexPairs1 1))) nexttile showMatchedFeatures (I, J, pointsPrev (indexPairs2(: 1)),点(indexPairs2(:, 2)))标题(sprintf (' % d双匹配\ n没有空间限制的大小(indexPairs2 1)))

图包含2轴对象。坐标轴对象1标题18双与空间约束包含4图像类型的对象,线。坐标轴对象2标题31双匹配没有空间限制包含4图像类型的对象,线。

的函数helperRegisterImageshelperStitchImages编写基于呢基于功能的全景图像拼接示例使用matchFeaturesInRadius。注意传统的全景拼接是不够的对于这个应用程序,每个图像注册对前面的形象。因此,最后的图像可能不会准确地对齐第一形象,导致南辕北辙360°环绕显示图像。

可以克服这个缺点在注册过程中批量注册的图像:

  1. 注册和针前四图像生成车辆的左侧的形象。

  2. 注册和针的最后四个图像生成图像右侧的车辆。

  3. 注册并缝左侧和右侧的完整360°鸟瞰图的形象。

请注意大半径匹配拼接图像的使用在步骤3中第1步和第2步。这是由于图像的相对位置的变化在登记前两个步骤。

%将前四缝合leftSideview和图像% Rleft空间引用对象。半径= 15;leftImgs = bevImgs (1:4);tforms = helperRegisterImages (leftImgs,半径);[leftSideView, Rleft] = helperStitchImages (leftImgs tforms);%将最后四图像缝合rightSideView。rightImgs = bevImgs (8);tforms = helperRegisterImages (rightImgs,半径);rightSideView = helperStitchImages (rightImgs tforms);%将两侧的观点360°鸟瞰图% Rsurround surroundView和空间参考对象半径= 50;一个= {leftSideView, rightSideView};tforms = helperRegisterImages(一个半径);[surroundView, Rsurround] = helperStitchImages(一个tforms);图imshow (surroundView)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

测量距离在360°鸟瞰图

一个优点在使用鸟瞰图图像测量距离的距离计算整个图像由于地面的平面特性。你可以测量各种距离有用ADAS应用,如吸引邻近范围准则和自我边界。距离测量涉及到改变世界分车辆鸟瞰图图像坐标系统,你可以使用vehicleToImage函数。然而,请注意,每个8鸟瞰图图像几何变换在图像配准过程中经历了两个。因此,除了使用vehicleToImage功能,您必须将这些转换应用到图像点。的helperVehicleToBirdsEyeView应用这些转换函数。点是将第一个鸟瞰图的形象,这个形象经历了最少的注册过程中转换。

吸引邻近范围的指导方针

圆形停车范围准则在汽车可以帮助驾驶员操纵紧张的停车位。画圆的指导方针在2、3和4米360°鸟瞰图图像:

  1. 变换车辆中心和一个点在圆准则车辆坐标系,使用360°鸟瞰图形象helperVehicleToBirdsEyeView函数。

  2. 在像素计算圆的半径指南找到了两点之间的距离。

  3. 画出指导使用insertShape函数和标签使用的指导方针insertText函数。

proximityRange = (2、3、4);%在米颜色= [“红色”,“黄色”,“绿色”];refBirdsEye =宰{1};溃败= {Rleft, Rsurround};vehicleCenter = (0,0);vehicleCenterInImage = helperVehicleToBirdsEyeView (refBirdsEye vehicleCenter溃败);i = 1:长度(proximityRange)%估计圆的半径的指导方针在像素的%在米半径。circlePoint = [0, proximityRange (i)];circlePointInImage = helperVehicleToBirdsEyeView (refBirdsEye circlePoint溃败);%计算半径用欧几里得范数。proximityRangeInPixels =规范(circlePointInImage vehicleCenterInImage, 2);surroundView = insertShape (surroundView,“圆”(vehicleCenterInImage proximityRangeInPixels),“线宽”, 1“颜色”、颜色(i));labelText =字符串(proximityRange(我))+“m”;surroundView = insertText (surroundView circlePointInImage labelText,“输入TextColor”,“白色”,“字形大小”14岁的“BoxOpacity”,0);结束imshow (surroundView)

画出自我车辆边界

边界线的车辆帮助司机了解车辆的相对位置的环境。画出自我的边界使用一个类似的过程,画接近指南。的helperGetVehicleBoundaryOnBEV函数返回的角落点车辆边界在360°鸟瞰图形象考虑到车辆的位置和大小。显示在现场使用的指导方针showShape函数。

vehicleCenter = (0,0);vehicleSize = [5.6, 2.4];% length-by-width米[polygonPoints, vehicleLength vehicleWidth] = helperGetVehicleBoundaryOnBEV (refBirdsEye,vehicleCenter,vehicleSize,溃败);showShape (“多边形”polygonPoints,“标签”,“自我车辆”)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

此外,您还可以覆盖一个模拟车辆在现场为视觉上赏心悦目的效果。

%阅读模拟车辆的图片。egoVehicle = imread (“vehicle.png”,“写成BackgroundColor”,0 0 0);%将模拟车辆到车辆坐标系。egoVehicle = imresize (egoVehicle [vehicleLength vehicleWidth]);车辆= 0(大小(surroundView),“uint8”);xIdx = polygonPoints (1,1) + (1: vehicleWidth);yIdx = polygonPoints (1、2) + (1: vehicleLength);车辆(yIdx、xIdx:) = egoVehicle;%叠加模拟车辆在360°鸟瞰图的形象。sceneBirdsEyeView = helperOverlayImage(车辆、surroundView);

最后,让我们来消除图像中黑色边界通过选择较小的范围从汽车的坐标系统的起源。

distFromVehicle = 4.25;%在米[x, y, h, w] = helperGetImageBoundaryOnBEV (refBirdsEye、distFromVehicle溃败);croppedSceneBirdsEyeView = imcrop (sceneBirdsEyeView [x, y, h, w]);imshow (croppedSceneBirdsEyeView)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

结论

这个示例中所示的程序可以扩展到建立一个生产级周围查看监控系统。这需要精确的估算单眼相机位置的摄像机标定和调优注册hyperparameters以最少的错误。这个例子使用鱼眼相机也可以修改。

万博1manbetx支持功能

helperVisualizeScene函数

helperVisualizeScene函数显示图像由相机的位置相对于车辆安排在3 x3的布局和选择平铺的图表显示了标题文本的每个瓦片。

函数helperVisualizeScene(图像、变长度输入宗量)numImages =元素个数(图片);如果输入参数个数= = 2 titleText =变长度输入宗量{1};其他的titleText =字符串(numImages, 1);结束%定义索引位置模拟摄像机位置相对于车辆。cameraPosInFigureWindow =(1、4、7、8、9日,6日,3、2];egoVehiclePosInFigureWindow = 5;图t = tiledlayout (3, 3,“TileSpacing”,“紧凑”,“填充”,“紧凑”);i = 1: numImages nexttile (cameraPosInFigureWindow(我)imshow({})图像标题(titleText(我))结束%可视化工具。egoVehicle = imread (“vehicle.png”,“写成BackgroundColor”,(1 1 1));nexttile (egoVehiclePosInFigureWindow) imshow (egoVehicle)如果输入参数个数= = 2标题(“自我车辆”)标题(t)“模式位置”);结束结束

helperBlendImages函数

helperBlendImages给定两个输入函数执行alpha混合图像,I1I2与α值与每个图像的中心缝成正比。输出Iout是一个输入图像的线性组合:

= α 1 + ( 1 - - - - - - α ) 2

函数outputImage = helperBlendImages (I1、I2)参数I1uint8I2uint8结束%确定两幅图像中的图像区域通过屏蔽黑色%的地区。mask1 =总和(I1, 3) ~ = 0;mask2 =总和(I2, 3) ~ = 0;maskc = mask1 & mask2;%计算α值正比于seam的两个中心%的图像。α1 = 1(大小(mask1 1:2));alpha2 = 1(大小(mask2 1:2));dist1 = bwdist(边缘(mask1));dist2 = bwdist(边缘(mask2));α1 (maskc) =双(dist1 (maskc) > dist2 (maskc));alpha2 (maskc) =双(dist1 (maskc) < = dist2 (maskc));I1 =双(I1);I2 =双(I2);outputImage =α1。* I1 + alpha2。* I2;outputImage = uint8 (outputImage);结束

helperRegisterImages函数

helperRegisterImages功能寄存器单元阵列图片按顺序使用的搜索半径matchFeaturesInRadius并返回转换,tforms

函数tforms = helperRegisterImages(图片、半径)参数。半径=半径;参数个数。MatchThreshold = 10;参数个数。MaxRatio = 0.6;参数个数。信心= 99.9;参数个数。MaxDistance = 2;参数个数。MaxNumTrials = 2000; numImages = numel(images);%为所有图片存储点和特性。特点=细胞(1、numImages);点=细胞(1、numImages);i = 1: numImages grayImage = rgb2gray(图片{我});我点{}= detectKAZEFeatures (grayImage);{我}[功能,点{我}]= extractFeatures (grayImage,点{我});结束%初始化所有单位矩阵的变换。tforms (numImages) = affine2d(眼(3));%设置再现性的种子。rng (0);%找到相对每个图像对之间的转换。我= 2:numImages{我}%之间找到对应图像和图像张{}%匹配约束特性。indexPairs = matchFeaturesInRadius(张{},{我},{我}.Location,张点{}。位置、params.Radius“MatchThreshold”params.MatchThreshold,“MaxRatio”,params.MaxRatio);%估计图像之间的变换张{}{我}和图像。张matchedPointsPrev =点{}(indexPairs (: 1):);matchedPoints =点{我}(indexPairs (:, 2):);tforms (i) = estimateGeometricTransform2D (matchedPoints matchedPointsPrev,“相似”,“信心”params.Confidence,“MaxDistance”params.MaxDistance,“MaxNumTrials”,params.MaxNumTrials);%{我}计算转换映射图像缝合%的形象T(我)*(张)*…* T (1)。tforms(我)。T = tforms(我).T * tforms .T(张);结束结束

helperStitchImages函数

helperStitchImages应用变换函数tforms输入图像和混合生产outputImage。另外它返回outputView,你可以把任何时候从给定的图像序列中的第一个图像到输出图像。

函数[outputImage, outputView] = helperStitchImages(图像、tforms) numImages =元素个数(图片);图象尺寸= 0 (numImages, 2);xlim = 0 (numImages, 2);ylim = 0 (numImages, 2);%计算输出限制为每个变换。i = 1:元素个数(图像)图象尺寸大小(我:)=(图片{我},1:2);[xlim(我,:),ylim(我,:)]= outputLimits (tforms(我),(1)图象尺寸(我,2)),[1图象尺寸(我,1)));结束%的最小和最大输出限制。maxImageSize = max(图象尺寸);xMin = min ([1;xlim (:)));xMax = max ([maxImageSize (2);xlim (:)));yMin = min ([1;ylim (:)));yMax = max ([maxImageSize (1);ylim (:)));%全景图片的宽度和高度。宽度=圆(xMax - xMin);身高=圆(yMax - yMin);%初始化“空”的全景。outputImage = 0([高度宽度3],“喜欢”、图像{1});%定义创建一个二维空间引用对象的大小。xLimits = [xMin xMax];yLimits = [yMin yMax];outputView = imref2d(高度宽度,xLimits yLimits);%步骤7 -针的图片。i = 1:元素个数(tforms)%应用转换。{我}warpedImage = imwarp(图像,tforms(我),“OutputView”,outputView);%融合图像。outputImage = helperBlendImages (warpedImage outputImage);结束结束

helperVehicleToBirdsEyeView函数

helperVehicleToBirdsEyeView函数将给定的世界分车辆坐标系点在360°鸟瞰图的形象。

函数tranformedImagePoints = helperVehicleToBirdsEyeView(宰,vehiclePoints溃败)% 3 d worldPoints车辆坐标系变换到二维%的imagePoints鸟瞰图(BEV)的形象。imagePoints = vehicleToImage(宰,vehiclePoints);%将这些imagePoints从单一贝福图像360°鸟瞰图图像。[xPoints, yPoints] = worldToIntrinsic(溃败{1},imagePoints (: 1), imagePoints (:, 2));[xPoints, yPoints] = worldToIntrinsic(击溃{2},xPoints yPoints);tranformedImagePoints = [xPoints, yPoints];结束

helperGetImageBoundaryOnBEV函数

helperGetImageBoundaryOnBEV函数返回一个边界框的位置和大小的鸟瞰图图像,定义了一个正方形区域覆盖distFromVehicle米左右。

函数[x, y, h, w] = helperGetImageBoundaryOnBEV(宰,distFromVehicle崩溃)%定义三个角落点汽车的边界框。vehiclePoints = [distFromVehicle distFromVehicle;-distFromVehicle distFromVehicle;-distFromVehicle -distFromVehicle);%翻转世界和车辆之间的x和y轴坐标%的系统。vehiclePoints = fliplr (vehiclePoints);imagePoints = helperVehicleToBirdsEyeView(宰,vehiclePoints溃败);x = imagePoints (1,1);y = imagePoints (1、2);h = abs (imagePoints (1,1) - imagePoints (2,1));w = abs (imagePoints (2, 2)——imagePoints (3 2));结束

helperGetVehicleBoundaryOnBEV函数

helperGetVehicleBoundaryOnBEV函数返回给定的车辆边界角点的位置和大小。

函数[polygonPoints, vehicleLength vehicleWidth] =helperGetVehicleBoundaryOnBEV(宰,vehicleCenter vehicleSize溃败)x = vehicleCenter (1);y = vehicleCenter (2);%找到一半长度和宽度分别在a和b的一半。一个= vehicleSize (1) / 2;b = vehicleSize (2) / 2;%定义vehiclePoints世界坐标系统。vehiclePoints = [x + b, y +一个;x + b,一;有取向;取向,y +];%翻转世界和车辆之间的x和y轴坐标%的系统。vehiclePoints = fliplr (vehiclePoints);imagePoints = helperVehicleToBirdsEyeView(宰,vehiclePoints溃败);xPoints =装天花板(imagePoints (: 1));yPoints =装天花板(imagePoints (:, 2));vehicleLength = abs (yPoints (1) - yPoints (2));vehicleWidth = abs (xPoints (2) - xPoints (3));% x, y点作为showShape点一个多边形。polygonPoints = [xPoints yPoints;%关闭多边形通过设置最后一点作为第一个点。xPoints (1) yPoints (1)];结束

helperOverlayImage函数

helperOverlayImage功能覆盖topImagebottomImage并返回结果outputImage

函数outputImage = helperOverlayImage (topImage bottomImage)搅拌机= vision.AlphaBlender (“操作”,“二进制面具”,“MaskSource”,“输入端口”);掩码=总和(topImage, 3) ~ = 0;outputImage =步骤(搅拌机、bottomImage topImage,面具);结束

另请参阅

应用程序

功能

对象

相关的话题