Matlab и вычисление комплексных чисел

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

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

Откуда берутся переменные из bb?

Спасибо, Джейкоб


person Jacob Smusmu    schedule 29.07.2013    source источник
comment
Вы говорите, что переменная lines иногда бывает сложной, но так быть не должно? Глядя на содержимое videooptflowlines (edit videooptflowlines в командном окне) в R2012b, я не понимаю, как он вообще может возвращать сложные значения.   -  person horchler    schedule 29.07.2013
comment
Насколько я могу судить, этот вопрос вообще не имеет ничего общего с комплексными числами. Я думаю, что заголовок и теги следует отредактировать, чтобы отразить это, но хотелось бы получить дополнительные разъяснения от ОП, прежде чем приступить к редактированию.   -  person tmpearce    schedule 30.07.2013


Ответы (1)


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

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

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

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

person High Performance Mark    schedule 29.07.2013
comment
Я согласен, это, кажется, полностью связано с подавлением вывода, а не с комплексными числами. - person tmpearce; 30.07.2013
comment
Я намеренно опустил точку с запятой, потому что не хочу, чтобы эти конкретные выходные данные подавлялись. Я просто не понимаю, откуда берется вывод из переменной bb, я не вижу корреляции между ним и входными данными. - person Jacob Smusmu; 30.07.2013