2

皆様、ご挨拶申し上げます。

私はこのやや苛立たしい問題を抱えています。あなたが私がそれを解決するのを手伝ってくれることを願っています。

私はMATLABで人間追跡システムを開発しており、その結果を魅力的なGUIで表示したいと思います(MATLABでもGUIDEを使用)。

サイズ320x240の約2500のグレースケール画像の画像シーケンスがビデオのように再生されるが、人間がそれらの中でうまく輪郭を描かれるこのメインウィンドウがあります。

課題は次のとおりです。これらの画像は、ウィンドウに表示される前に少し処理(人間の輪郭を検出)する必要があります。

さて、画像のセットを表示すると同時に、後で表示される別のセットの処理を行うことは可能ですか?

通常のビデオのように再生したいのですが、それはどういうわけか野心的なことだと思います。

4

1 に答える 1

2

これは、あなたが説明したのと同様のシナリオを示す例です。これは、コメントで述べたデモから採用されました。

function ImgSeqDemo()
    figure()
    for i=1:10
        %# read image
        img = imread( sprintf('AT3_1m4_%02d.tif',i) );

        %# process image to extract some object of interest
        [BW,rect] = detectLargestCell(img);

        %# show image
        imshow(img), hold on

        %# overlay mask in red color showing object
        RGB = cat(3, BW.*255, zeros(size(BW),'uint8'), zeros(size(BW),'uint8'));
        hImg = imshow(RGB); set(hImg, 'AlphaData',0.5);

        %# show bounding rectangle
        rectangle('Position', rect, 'EdgeColor','g');
        hold off

        drawnow
    end
end

上記で使用した処理関数は次のとおりです。あなたの場合、代わりにアルゴリズムを挿入します:

function [BW,rect] = detectLargestCell(I)
    %# OUTPUT
    %#    BW    binary mask of largest detected cell
    %#    rect  bounding box of largest detected cell

    %# find components
    [~, threshold] = edge(I, 'sobel');
    BW = edge(I,'sobel', threshold*0.5);
    se90 = strel('line', 3, 90);
    se0 = strel('line', 3, 0);
    BW = imdilate(BW, [se90 se0]);
    BW = imclearborder(BW, 4);
    BW = bwareaopen(BW, 200);
    BW = bwmorph(BW, 'close');
    BW = imfill(BW, 'holes');

    %# keep largest component
    CC = bwconncomp(BW);
    stats = regionprops(CC, {'Area','BoundingBox'});
    [~,idx] = max([stats.Area]);
    rect = stats(idx).BoundingBox;
    BW(:) = 0;
    BW(CC.PixelIdxList{idx}) = 1;
end

スクリーンショット

于 2012-06-01T07:36:58.647 に答える