2

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

faceDetector = vision.CascadeObjectDetector(); 

vidObj = vision.VideoFileReader('MEXTest.mp4','ImageColorSpace','Intensity','VideoOutputDataType','uint8'); 
converter = vision.ImageDataTypeConverter; 
opticalFlow = vision.OpticalFlow('ReferenceFrameDelay', 1); 
opticalFlow.OutputValue = 'Horizontal and vertical components in complex form'; 
shapeInserter = vision.ShapeInserter('Shape','Lines','BorderColor','Custom','CustomBorderColor', 255); 
vidPlayer = vision.VideoPlayer('Name','Motion Vector'); 

while ~isDone(vidObj); 
    frame = step(vidObj); 
    fraRes = imresize(frame,0.5); 
    fbbox = step(faceDetector,fraRes); 

    I = imcrop(fraRes,fbbox); 

    im = step(converter,I); 
    of = step(opticalFlow,im); 
    lines = videooptflowlines(of, 20); 
    if ~isempty(lines) 
     out = step(shapeInserter,im,lines); 
     step(vidPlayer,out); 
    end 
end 
release(vidPlayer); 
release(VidObj); 
+1

Объект 'vision.opticalFlow' System будет удален в следующей версии. http://se.mathworks.com/help/vision/ref/opticalflow-class.html Альтернативы больше нравятся мне. Тем не менее, вы должны вычислить поток из decimated 'fraRes', а затем обрезать поток (' of'). Но, возможно, вы хотите указать точную строку ошибки. Я просто догадываюсь. – mainactual

+0

Альтернативы будут работать так же, как и реализованный метод, а именно эксперимент с ними, когда я смогу обрезать лицо и применить к нему оптический поток. Я мог бы это сделать, однако оптический поток будет быстрее вычисляться на меньшем изображении, и я думаю, что это было бы более точно, чем делать это на полном видео, где меня интересуют только области лица. – UZIERSKI

ответ

1

UPDATE: Я пошел и редактировал функцию оптического потока, который создает линию и это сортирует некоторые проблемы размера, однако необходимо ввести вручную для каждого объекта (так что если есть любой другой способ, пусть я знаю). Я думаю, что лучшим решением будет установлен фиксированный размер для cascadeObjectDetector, кто-нибудь знает, как это сделать? Или есть какая-то другая идея?

faceDetector = vision.CascadeObjectDetector(); %I need fixed size for this 
faceDetector.MinSize = [150 150]; 

vidRead = vision.VideoFileReader('MEXTest.mp4','ImageColorSpace','Intensity','VideoOutputDataType','uint8'); 
convert = vision.ImageDataTypeConverter; 
optFlo = vision.OpticalFlow('ReferenceFrameDelay', 1); 
optFlo.OutputValue = 'Horizontal and vertical components in complex form'; 
shapeInserter = vision.ShapeInserter('Shape','Lines','BorderColor','Custom', 'CustomBorderColor', 255); 

while ~isDone(vidRead) 
    frame = step(vidRead); 
    fraRes = imresize(frame,0.3); 
    fraSin = im2single(fraRes); 

    bbox = step(faceDetector,fraSin); 

    I = imcrop(fraSin, bbox); 

    im = step(convert, I); 
    release(optFlo); 
    of = step(optFlo, im); 
    lines = optfloo(of, 50); %use videooptflowlines instead of (optfloo) 
    out = step(shapeInserter, im, lines); 
    imshow(out); 
end 
+0

Каковы характеристики ваших видеокадров? Зачем вам их изменять? – 16per9

+0

они слишком велики, так как видеофайл 1080x1920, а детектор лица работает лучше на меньшем размере кадра, поскольку он более точен. Я думаю, что можно изменить некоторые свойства размера видео с помощью «vision.VideoFileWriter», однако я не знаю, насколько хорошо он сжимает его до предпочтительного размера. – UZIERSKI

+0

Я использовал 'scaleFactor', чтобы сделать его более стабильным, но кажется, что рамка постоянно изменяется и перемещается. Возможно, если верхний левый пиксель был распознан в первом кадре и применен к другим кадрам, чтобы стабилизировать его для идеального результата, но не уверен. – UZIERSKI

 Смежные вопросы

  • Нет связанных вопросов^_^