ошибка при использовании find () при определении координат для вычисления наклона линии на изображении - PullRequest
0 голосов
/ 23 октября 2011

Я извлекаю кадры из видео и строю график значения наклона для координат, полученных в каждой строке, обнаруженной в каждом кадре, как показано ниже

Я строю график зависимости значения «наклона» от «кадров».

Извлечение кадров из видео

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 ]

1 голос
/ 23 октября 2011

Вы можете векторизовать код:

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
0 голосов
/ 23 октября 2011

Я не совсем понимаю ваш код, но в общем случае, когда find не может что-то найти, он возвращает пустую матрицу.Вы можете использовать функцию isempty, чтобы проверить, так ли это, и вручную установить для ycoord и xcoord значения, которые не приведут к ошибке.

isempty () Документация MATLAB

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...