2
私は "車の追跡"に関するプロジェクトを行っています。リアルタイムで実行されるコードを開発しようとしており、ジャンクションに近づいている車を検出できるようになります。 Ιは連続した2つのフレームを減算し、次にthresholding.Implement
の形態学的閉鎖を行い、移動する車を見つける。私の問題は、暗い車を検出できないことです。このプロジェクトを正常に完了するためのガイドラインを教えていただければ幸いです。移動する車の検出と追跡
%Code for tracking
vid = videoinput('winvideo', '1', 'RGB24_640x360');
set(vid,'ReturnedColorSpace','rgb');
set(vid,'TriggerRepeat',Inf);
src = getselectedsource(vid);
src.FocusMode = 'manual';
%pause(0.02);
[i rect]=imcrop(getsnapshot(vid));
set(vid,'ROIPosition',rect);
h = fspecial('gaussian',[3,3],5);
%structial element
se90 = strel('line',5, 90);
se0 = strel('line', 5, 0);
ss=strel('diamond',10);
var=3;
start(vid);
for i=1:500
tic
im1= getsnapshot(vid);
imrgb=im1;
im1=im1(:,:,1);
if var==3
im2= getsnapshot(vid);
im2=im2(:,:,1);
im2=imfilter(im2,h);
var=0;
end
%-------------------------------------------------
if 1
m1=imfilter(im1,h);
% c2=im2-im1
%cbw=im2bw(c2);
%allagi stin evais8isia tou threshold
cbw=imsub(im1,im2,14,h);
end
cbw1 = imerode(cbw, [se90,se0]); %sistoli
% cbw1 = imerode(cbw1, [se901,se01]);
%diastoli
cbw1= imdilate(cbw1,ss);
%fill holes
cbw2= imfill(cbw1, 'holes');
cbw2= imfill(cbw2, 'holes');
if 1
cbw3 = imerode(cbw2, [se90 se0]); %sistoli
cbw3 = imerode(cbw3, [se90 se0]); %sistoli
cbw3 = imerode(cbw3, [se90 se0]); %sistoli
cbw3 = imerode(cbw3, [se90 se0]);
cbw3= imfill(cbw3, 'holes'); %fill hole
end
if 1
%Boundary box
s = regionprops(cbw3, 'BoundingBox');
if ~isempty(s)
cd = s.BoundingBox;
end
figure(1),
%imshow(cbw3);
imshow(imrgb)
hold on;
if ~isempty(s)
rectangle('Position',[cd(:,1) cd(:,2) cd(:,3) cd(:,4)],'LineWidth',2,'EdgeColor','b');
end
hold('off');
end
%empty ram
flushdata(vid)
var=var+1;
toc
end
stop(vid)
単純な閾値処理およびいくつかの形態学的演算は、通常、最良の条件以外のすべてにおいて良好な結果を提供するには不十分である。より信頼性の高い結果を得るには、より高度なコンピュータビジョンツールが必要です。トピック「セグメント化」でいくつかの調査を行い、問題の解決方法を選択することをお勧めします。 – vsz
Aはvszに同意します。しかし、これをダークカーセグメンテーションに適用したい場合は、イメージを無効にして同じアプローチを実行するのはどうですか? – petrichor
@petrichor私は、暗い車が道路に色が似ているという事実に起因すると思います。否定することは、その場合の問題を解決しません。そうでなければ、私もvszに同意します。 –