我从视频中提取帧并绘制在每帧中检测到的每一行中获得的坐标的斜率值,如下所示
将“斜率”值与“帧”进行绘制。
从视频中提取帧
for k = 1 :240 %no.of frames
%Here in loop am extracting the line from each frame then
[ycoord,xcoord]=find(line);%finding the coordinates of line
Ymax(k)=max(ycoord);
Ymin(k)=min(ycoord);
Xmax(k)=max(xcoord);
Xmin(k)=min(xcoord);
slope(k)=(Ymax(k)-Ymin(k)/Xmax(k)-Xmin(k));
end;
plot(slope,'-ro');%plotting slope values of frames
但是当帧中没有找到行时,find(line)给出空数组,并且没有计算斜率显示错误。 我的要求是当下一帧中没有线时,斜率值应该为零,否则它应该计算斜率值。 有人可以帮忙吗
答案 0 :(得分:1)
您可以对代码进行矢量化:
lines=[0,0,0,0,0,0; %# lines for example
0,0,1,2,3,0;
0,3,4,5,0,0];
lines(:,:,2)=[0,0,0,0,0,0;
0,0,0,0,0,0;
0,0,0,0,0,0];
bool_mask = double(lines ~= 0);
bool_mask(bool_mask == 0) = NaN; %# for later min function
[row_grid, col_grid] = ndgrid(1:size(lines,1), ...
1:size(lines,2), ....
1:size(lines,3));
min_row = squeeze(min(min(row_grid .* bool_mask,[],1)));
max_row = squeeze(max(max(row_grid .* bool_mask,[],1)));
min_col = squeeze(min(min(col_grid .* bool_mask,[],2)));
max_col = squeeze(max(max(col_grid .* bool_mask,[],2)));
slope = (max_row-min_row)./(max_col-min_col);
slope(isnan(slope)) = 0; %# x/0 is NaN, and absent line is NaN. Turn to 0.
slope
提供输出:
slope =
0.3333
0
答案 1 :(得分:0)
我真的不了解你的代码,但一般来说,当find找不到东西时,它会返回一个空矩阵。您可以使用isempty
函数测试是否属于这种情况,并手动将ycoord
和xcoord
设置为不会导致错误的值。
isempty() MATLAB Documentation
希望这有帮助!