3

現在、画像処理をより効率的にするためにコードを最適化しています。私の最初の問題は、各フレームを開くのに長い時間がかかったことが原因でしvision.VideoFileReaderstep。グレースケール イメージを 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
4

1 に答える 1