收到这个错误代码时提取质心运动和策划

22日视图(30天)
我继续这个错误在运行代码:
中间点”。与2索引产生一个以逗号分隔值,但是
它必须产生一个值,当后续索引操作紧随其后。
错误referencemotionplot(57)行
xhand1 (frameIndex) = props.Centroid (1);
这是我的代码运行在2021 b MATLAB绘制我的手运动的坐标:
% windowv1清除命令
关闭所有;%关闭所有数据(除了imtool。)
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式
格式紧凑的
字形大小= 14;
vidObj = VideoReader (“v3.MOV”);
numberOfFrames = 50;
frameIndex = 1: numberOfFrames
帧=阅读(vidObj frameIndex);
图(1)
次要情节(2、3、1);
imshow(框架)
轴(“上”,“图像”);
标题= sprintf (“原始图像帧% d % d '、frameIndex numberOfFrames);
标题(标题,“字形大小”、字形大小);
drawnow;
%转换为灰度
grayImage = rgb2gray(框架);
%作物帧摆脱白人窗口向右。
grayImage = grayImage (:, 1: 500);%你需要确定列
次要情节(2、3、2);
imshow (grayImage)
轴(“上”,“图像”);
impixelinfo;
标题= sprintf (的灰度图像帧% d % d '、frameIndex numberOfFrames);
标题(标题,“字形大小”、字形大小);
drawnow;
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
%首先找到白色的桨。
%阈值或调用imbinarize ()
手= imbinarize (grayImage);
%填补
= imfill(手,“黑洞”);
%将最大团。这是白色的桨
手= bwareafilt(手,1);
%,我们需要减少桨,因为边缘不太明亮的他们
%得到发现当我们试图得到点。所以让我们explude边缘。
se = strel (“磁盘”15 0);
手= imerode(手,se);
图(2)
次要情节(2、3、3);
轴(“上”,“图像”);
imshow(手)
impixelinfo;
标题(“手”,“字形大小”、字形大小);
drawnow;
%找到白色桨的重心。
道具= regionprops(手,“重心”);
%跳过它如果球拍不能发现,喜欢它太黑暗。
如果isempty(道具)
继续;
结束
%得到x和y
xhand1 (frameIndex) = props.Centroid (1);
yhand1 (frameIndex) = props.Centroid (2);
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
%现在黑点。
thresholdValue = 0;
whiteBlobs = grayImage > thresholdValue;
%消除垃圾外桨
whiteBlobs = whiteBlobs &手;
%消除轴。
whiteBlobs (104:157 264:319) = false;
%,黑点可能不够解决找到它!
%以blob只有他们在2-50像素范围内。
%,应该得到我们的黑点。
道具= regionprops (whiteBlobs,“重心”,“区域”);
allAreas = [props.Area];
whiteBlobs = bwareafilt (whiteBlobs 1“最小”);
%有时有噪音,我们得到2团,所以取这个范围最大的blob。
whiteBlobs = bwareafilt (whiteBlobs, 1);
图(2)
次要情节(2、3、4);
imshow (whiteBlobs)
impixelinfo;
轴(“上”,“图像”);
标题(“黑点”,“字形大小”、字形大小);
drawnow;
%找到黑点的重心。
道具= regionprops (whiteBlobs,“重心”,“区域”);
allAreas = [props.Area];
%跳过它如果点不能被发现,喜欢它太模糊。
如果isempty(道具)
流(“没有点上发现帧# % d % d。\ n '、frameIndex numberOfFrames);
继续;
结束
%得到x和y
图(3)
xDot (frameIndex) = props.Centroid (1);
yDot (frameIndex) = props.Centroid (2);
次要情节(2、3、6);
情节(xDot yDot,“r”);
持有;
网格;
标题(“verticalplot_4”);
包含(“x”,“字形大小”、字形大小);
ylabel (“y”,“字形大小”、字形大小);
xlim(500年[100])
ylim(2000年[1000])
如果frameIndex = = 1
%图窗口最大化。
g = gcf;
g。WindowState =“最大化”;
结束
drawnow;
结束
%插入任何失踪的。
missingIndexes = isnan (xDot);
如果任何(missingIndexes)
xFit = 1: numberOfFrames;
xDot = interp1(找到(~ missingIndexes), xDot (~ missingIndexes) xFit,样条的);
yDot = interp1(找到(~ missingIndexes), yDot (~ missingIndexes) xFit,样条的);
次要情节(2、3、6);
情节(xDot yDot);
持有;
网格;
标题(“horizontal_plot1。蓝色X = y =红',“字形大小”、字形大小);
包含(的帧数,“字形大小”、字形大小);
ylabel (的列或行,“字形大小”、字形大小);
结束
% %
xyDot = [xDot; yDot];
保存(”v16 xyDot”)
文件名=“v16.mat”;
保存(文件名,“xyDot”);
这是视频我用:
有谁知道我为什么得到这个错误?

接受的答案

图像分析
图像分析 2023年4月1日
@Sara K Takiguchi 这似乎能够很好地寻找一个白皮书在你的手。
%演示跟踪绿色。发现并注释质心和边界框绿色斑点。
%修改阈值来检测不同的颜色。
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
imtool关闭所有;%关闭所有imtool数字图像处理工具箱。
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 20;
%指定输入视频文件名称。
文件夹= pwd;
% fullFileName =“rhinos.avi”;
% fullFileName =“traffic.avi”;
baseFileName =“hand.mp4”;
fullFileName = fullfile(文件夹,baseFileName);
%检查是否实际存在的视频文件在当前文件夹或搜索路径。
如果~存在(fullFileName“文件”)
%文件不存在,没有发现它。检查它的搜索路径。
fullFileNameOnSearchPath = baseFileName;%没有路径。
如果~存在(fullFileNameOnSearchPath“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (的错误:% s在搜索路径的文件夹不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
%实例化一个视频视频读者对象。
videoObject = VideoReader (fullFileName);
%设置其他参数
numberOfFrames = videoObject.NumberOfFrame;
% Preallocate x和y形心。
xCentroid =南(numberOfFrames, 1);
yCentroid =南(numberOfFrames, 1);
%一次读取一帧,并找到指定的颜色。
k = 1: numberOfFrames
%读取一帧
thisFrame =阅读(videoObject k);
hImage =次要情节(2 2 1);
%显示它。
imshow (thisFrame);
;
标题= sprintf (“原始RGB图像帧# % d % d 'k numberOfFrames);
标题(标题,“字形大小”、字形大小);
drawnow;
%得到这个框架的面具。
[面具,maskedRGBImage] = createMask (thisFrame);
%得到最大团。
掩码= bwareafilt(面具,1);
次要情节(2,2,2);
imshow(面具,[]);
impixelinfo ();
;
标题(“面具”,“字形大小”、字形大小);
次要情节(2、2、3);
如果k = = 1
%全屏放大图。
集(gcf,“单位”,“归一化”,“OuterPosition”,(0 0 1 1));
%的标题栏提供一个名称。
集(gcf,“名字”,“由ImageAnalyst演示”,“NumberTitle”,“关闭”)
hCheckbox = uicontrol (“风格”,“复选框”,
“单位”,“归一化”,
“字符串”,现在完成的,
“价值”0,“位置”,(。02 .5 .4 .05],
“字形大小”30岁的“ForegroundColor”,“r”);
结束
[labeledImage, numberOfRegions] = bwlabel(面具);
如果numberOfRegions > = 1
统计= regionprops (labeledImage,的边界框(“大小),“重心”);
%删除旧的文本和矩形
如果存在(“hRect”,“var”)
删除(hRect);
结束
如果存在(“hText”,“var”)
删除(hText);
结束
%显示原始图像。
hImage =次要情节(2、2、3);
imshow (thisFrame);
;
持有;
标题= sprintf (' % d blob中发现帧# % d % d ',k numberOfRegions numberOfFrames);
标题(标题,“字形大小”、字形大小);
drawnow;
%这是一个循环来绑定的对象在一个长方形的盒子。
r = 1: numberOfRegions
%为这团找到位置。
thisBB =统计(r) .BoundingBox;
thisCentroid =统计(r) .Centroid;
hRect矩形(r) = (“位置”thisBB,“EdgeColor”,“r”,“线宽”2);
hSpot =情节(thisCentroid (1) thisCentroid (2),“y +”,“MarkerSize”10“线宽”2);
hText (r) =文本(thisBB (1) thisBB(2) -20年,strcat (“X:“,num2str(圆(thisCentroid (1))),Y:“,num2str(圆(thisCentroid (2)))));
集(hText (r),“字体名”,“天线”,“FontWeight”,“大胆”,“字形大小”12“颜色”,“黄色”);
结束
持有
drawnow;
%的阴谋重心在情节# 4
次要情节(2、2、4);
xCentroid (k) =统计(1).Centroid (1);
yCentroid (k) =统计(1).Centroid (2);
情节(xCentroid yCentroid,“b -”,“线宽”2);
网格;
标题(“质心跟踪”,“字形大小”、字形大小);
包含(“X形心”,“字形大小”、字形大小);
ylabel (“Y”形心,“字形大小”、字形大小);
ij;%垂直翻转
结束
%看到如果他们想救助
如果get (hCheckbox,“价值”)
%完成现在复选框选中。
对话框(完成了演示。);
返回;
结束
结束
对话框(完成了演示。);
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
函数[BW, maskedRGBImage] = createMask (RGB)
% createMask阈值从colorThresholder应用RGB图像使用自动生成的代码。
% (BW, MASKEDRGBIMAGE] = createMask (RGB)阈值图像RGB使用
%从colorThresholder应用。色彩和自动生成的代码
%范围内设置每个通道的色彩应用。
在BW %分割掩模返回,面具和复合
%在maskedRGBImage返回原始RGB图像。
%自动生成colorThresholder应用在01 - 4月- 2023
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%将RGB图像转换为选择的颜色空间
我= RGB;
%定义通道1基于直方图的阈值设置
channel1Min = 231.000;
channel1Max = 255.000;
%定义通道2基于直方图的阈值设置
channel2Min = 221.000;
channel2Max = 255.000;
%定义通道3基于直方图的阈值设置
channel3Min = 189.000;
channel3Max = 255.000;
%基于直方图阈值选择创建蒙版
sliderBW =(我(::1)> = channel1Min) &(我(:,:1)< = channel1Max) &
(我(::2)> = channel2Min) &(我(:,:2)< = channel2Max) &
(我(::3)> = channel3Min) &(我(:,:,3)< = channel3Max);
BW = sliderBW;
%初始化输出掩盖图像基于输入图像。
maskedRGBImage = RGB;
%设置背景像素,BW假为零。
maskedRGBImage (repmat (~ BW, [1 1 3])) = 0;
结束

更多的答案(2)

图像分析
图像分析 2023年3月22日
没有运行代码,它看起来像你的二进制图像可能有两个团。即使你使用bwareafilt只有一个团,然后侵蚀它可能产生两个或两个以上的斑点。如果你期待一个blob,那么你最好叫bwareafilt再一次得到一个blob。
8的评论
莎拉K Takiguchi
莎拉K Takiguchi 2023年3月31日
嗨,我跑你的演示,但我不确定如何提取每个框架的两个重心的坐标,这样我可以画出它的运动。

登录置评。


s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!