我正在从视频中提取帧,并绘制在每个帧中检测到的每条线中获得的坐标的斜率值,如下所示
我绘制的“斜率”值与“帧”。
从视频中提取帧
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 )会给出空数组,并且没有计算出斜率,显示错误。我的要求是,当下一帧中没有直线时,斜率值应为零,否则应计算斜率值。有人能帮个忙吗?
发布于 2011-10-23 05:21:13
我真的不理解你的代码,但一般来说,当find找不到什么东西时,它会返回一个空矩阵。您可以使用isempty函数来测试是否属于这种情况,并手动将ycoord和xcoord设置为不会在上导致错误的值。
isempty() MATLAB Documentation
希望这能有所帮助!
发布于 2011-10-23 07:13:29
您可以对代码进行矢量化:
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
0https://stackoverflow.com/questions/7862652
复制相似问题