首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在确定坐标以计算图像中线的斜率时,使用find()时出错

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

Stack Overflow用户
提问于 2011-10-23 05:12:50
回答 2查看 389关注 0票数 0

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

我绘制的“斜率”值与“帧”。

从视频中提取帧

代码语言:javascript
复制
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 )会给出空数组,并且没有计算出斜率,显示错误。我的要求是,当下一帧中没有直线时,斜率值应为零,否则应计算斜率值。有人能帮个忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-23 05:21:13

我真的不理解你的代码,但一般来说,当find找不到什么东西时,它会返回一个空矩阵。您可以使用isempty函数来测试是否属于这种情况,并手动将ycoordxcoord设置为不会在上导致错误的值。

isempty() MATLAB Documentation

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2011-10-23 07:13:29

您可以对代码进行矢量化:

代码语言:javascript
复制
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

给出输出:

代码语言:javascript
复制
slope =

    0.3333
         0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7862652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档