在确定坐标以计算图像中线条的斜率时使用find()时出错

时间:2011-10-22 21:12:50

标签: matlab image-processing

我从视频中提取帧并绘制在每帧中检测到的每一行中获得的坐标的斜率值,如下所示

将“斜率”值与“帧”进行绘制。

从视频中提取帧

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)给出空数组,并且没有计算斜率显示错误。   我的要求是当下一帧中没有线时,斜率值应该为零,否则它应该计算斜率值。 有人可以帮忙吗

2 个答案:

答案 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函数测试是否属于这种情况,并手动将ycoordxcoord设置为不会导致错误的值。

isempty() MATLAB Documentation

希望这有帮助!