Ich habe Probleme mit dem optischen Fluss, wenn die Rahmengröße in irgendeiner Weise manipuliert wurde, dies gibt mir einen Fehler. Es gibt zwei Möglichkeiten, entweder die Auflösung des Videos am Anfang zu ändern oder irgendwie die Rahmengröße so zu ändern, dass der optische Fluss funktioniert. Ich werde ein Kaskadenobjekt hinzufügen, um Nase, Mund und Augen in der weiteren Entwicklung zu erkennen, daher brauche ich eine Lösung, die für einzelne Regionen funktioniert, ohne den optischen Fluss für diese Bereiche individuell einzustellen, insbesondere, dass eine Bounding-Box keine feste Größe hat wird sich von Rahmen zu Rahmen leicht verschieben. Hier ist mein Code so weit, der Fehler ist, dass es Matrixdimensionen überschreitet.Größe ändern Rahmen für optischen Fluss
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);
Das 'vision.opticalFlow' System-Objekt wird in einer zukünftigen Version entfernt. http://se.mathworks.com/help/vision/ref/opticalflow-class.html Die Alternativen sprechen mich mehr an. Das heißt, Sie sollten den Fluss von dezimierten 'fraRes' berechnen und dann den Fluss (' of') zuschneiden. Aber vielleicht möchten Sie auf die genaue Fehlerlinie hinweisen. Ich kann nur raten. – mainactual
Die Alternativen funktionieren auf die gleiche Weise wie die implementierte, es ist nur eine Methode zu implementieren, und ich werde mit denen experimentieren, sobald ich in der Lage sein werde, das Gesicht zu beschneiden und den optischen Fluss darauf anzuwenden. Ich könnte das machen, aber der optische Fluss wird schneller auf einem kleineren Bild berechnet und ich denke, es wäre präziser, anstatt es auf einem vollen Video zu machen, wo ich nur an den Gesichtsregionen interessiert bin. – UZIERSKI