現在、画像処理をより効率的にするためにコードを最適化しています。私の最初の問題は、各フレームを開くのに長い時間がかかったことが原因でしvision.VideoFileReader
たstep
。グレースケール イメージを 1 つの RGB フレームで 3 つのフレームに圧縮することで、コードを高速化します。このようにして、 を使用vid.step()
して 1 つの RGB フレームをロードし、3 つのフレームをインポートして処理できる状態にすることができました。
これで、ラプラシアン オブ ガウス (LoG) フィルタリングでコードの実行が遅くなりました。関数imfilter
を使用して LoG を実行できることを読みましたが、次のレート制限ステップのようです。
さらに読むと、これimfilter
は速度の面で最適なオプションではないようです。どうやらMATLABはLoG関数を導入しましたが、R2016bで導入されたもので、残念ながらR2016aを使用しています。
高速化する方法imfilter
はありますか、または Log フィルタリングを実行するために使用するより良い機能はありますか?
プロセスを高速化するには、pythonを呼び出す必要がありますか?
コード:
Hei = gh.Video.reader.info.VideoSize(2);
Wid = gh.Video.reader.info.VideoSize(1);
Log_filter = fspecial('log', filterdot, thresh); % fspecial creat predefined filter.Return a filter.
% 25X25 Gaussian filter with SD =25 is created.
tic
ii = 1;
bkgd = zeros(Hei,Wid,3);
bkgd(:,:,1) = gh.Bkgd;
bkgd(:,:,2) = gh.Bkgd;
bkgd(:,:,3) = gh.Bkgd;
bkgdmod = reshape(bkgd,720,[]);
while ~isDone(gh.Video.reader)
frame = gh.readFrame();
img_temp = double(frame);
img_temp2 = reshape(img_temp,720,[]);
subbk = img_temp2 - bkgdmod;
img_LOG = imfilter(subbk, Log_filter, 'symmetric', 'conv');
img_LOG = imbinarize(img_LOG,.002);
[~, centroids, ~] = gh.Video.blobAnalyser.step(img_LOG);
toc
end