フレームサイズが何らかの方法で操作された場合、オプティカルフローに問題があります。これによりエラーが発生します。最初にビデオの解像度を変更する方法と、オプティカルフローが機能するようにフレームサイズを変更する方法の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);
'vision.opticalFlow'システムオブジェクトは、将来のリリースで削除されます。 http://se.mathworks.com/help/vision/ref/opticalflow-class.html代替案は、私にもっとアピールします。つまり、間引かれた 'fraRes'からのフローを計算し、フロー(' of')をトリミングする必要があります。しかし、エラーの正確な行を指摘したいかもしれません。私はちょうど推測している。 – mainactual
代替案は、実装された方法と同じ方法で動作します。実装する方法についてのみ説明します。顔をトリミングしてオプティカルフローを適用できるようになると、それらを試してみましょう。私はそれを行うことができますが、オプティカルフローは小さな画像でより速く計算され、顔領域にしか興味がないフルビデオではなく、より正確になると思います。 – UZIERSKI