2013-07-29 3 views
1

В настоящее время я пишу код в matlab для анализа оптического потока в ядрах выщелачивания, и по какой-то причине всякий раз, когда я запускаю это, он возвращает странные сложные функции. Я не уверен, откуда они родом, и мне хотелось бы помочь в этом.Matlab and Comp Number Computing

function [opticalFlow] = opticalflowanalysis(handles,hOpticalflow) 

videoReader = vision.VideoFileReader('jun07_0165_segment8to12_20.avi','ImageColorSpace','Intensity','VideoOutputDataType','single'); 
converter = vision.ImageDataTypeConverter; 
opticalFlow = vision.OpticalFlow('OutputValue', 'Horizontal and vertical components in complex form','ReferenceFrameDelay', 6); 
shapeInserter = vision.ShapeInserter('Shape','Lines','BorderColor','Custom', 'CustomBorderColor', 255); 
videoPlayer = vision.VideoPlayer('Name','Motion Vector'); 
%Convert the image to single precision, then compute optical flow for the video. Generate coordinate points and draw lines to indicate flow. 

i=0; 
mm = ones(1080,1920); 
%Display results.  
while ~isDone(videoReader) 
    frame = step(videoReader); 
    im = step(converter, frame); 
    of = step(opticalFlow, im); %always complex number 
    aa = size(of) 
    lines = videooptflowlines(of, 5); %complex number only sometimes - when lines appear? 
    bb = size(lines) 
    x = i+ 1; 
    if(x==2) 
     mm = of; 
    end 
    % show diff bw of and lines matrices 
    if (x == 2)||(x == 10) 
     for j=1:1:1080 %gives j = [1 2 ... 720] 
      for k=1:1:1920 %gives k = [1 2 ... 1280] 
       of(j,k) 
       lines(j,k) 
       if(of(j,k) ~= lines(j,k)) 
        disp(['of[',num2str(j),',',num2str(k),'] = ', num2str(of(j,k)), '...', 'lines[',num2str(j),',',num2str(k),'] = ', num2str(lines(j,k))]) 
       end 
      end 
     end 
    end 
    if ~isempty(lines) 
     out = step(shapeInserter, im, lines); 
     step(videoPlayer, out); 
    end 
end 
%Close the video reader and player , 
%handles.output = hObject; 
release(videoPlayer); 
release(videoReader); 

mm 

возвращает:

aa = 

     1080  1920 


bb = 

     36465   4 

Куда переменные из бб взялось?

Спасибо, Jacob

+0

Вы говорите, что переменная 'lines' иногда сложна, но этого не должно быть? Глядя на содержимое 'videooptflowlines' (' edit videooptflowlines' в командном окне) в R2012b, я не вижу, как он мог когда-либо возвращать сложные значения. – horchler

+0

Насколько я могу судить, этот вопрос фактически не имеет ничего общего с комплексными числами. Я думаю, что название и теги должны быть отредактированы, чтобы отразить это, но хотелось бы получить дополнительные разъяснения от OP до того, как продолжить редактирование. – tmpearce

ответ

1

Попробуйте положить точку с запятой (т.е. ;) на концах линий, в которых aa и bb присвоенных

aa = size(of); 
... 
bb = size(lines); 

и посмотреть, что происходит.

Имейте ввиду, что ни aa, ни bb, по-видимому, используются позже в программе, возможно, вы можете безопасно удалить обе эти линии.

+0

Я согласен, это, похоже, полностью из-за подавления вывода, и вообще ничего с комплексными числами. – tmpearce

+0

Я выбрал полуколонны специально, потому что я не хочу, чтобы эти конкретные выходные данные были подавлены. Я просто смущен относительно того, откуда идет выход из «переменной bb», я не вижу корреляции между ним и входами. –