¿Hay alguna forma en el procesamiento de imágenes que identifique solo automóviles de una transmisión de video, dado que el video puede contener peatones?

% Dado es el código MATLAB que puede usar para identificación
% Paso 1: Acceda al video con VideoReader
trafficVid = VideoReader (‘traffic.mj2’);
obtener (trafficVid);
%%
% Paso 2: Explore el video con IMPLAY
implay (‘traffic.mj2’);
%%
% Paso 3: Desarrolle su algoritmo
darkCarValue = 50;
darkCar = rgb2gray (read (trafficVid, 71));
noDarkCar = imextendedmax (darkCar, darkCarValue);
imshow (darkCar);
figura, imshow (noDarkCar);

sedisk = strel (‘disco’, 2);
noSmallStructures = imopen (noDarkCar, sedisk);
imshow (noSmallStructures)
%%
% Paso 4: aplicar el algoritmo al video
nframes = trafficVid.NumberOfFrames;
I = leer (trafficVid, 1);
taggedCars = ceros ([tamaño (I, 1) tamaño (I, 2) 3 nframes], clase (I));

para k = 1: nframes
singleFrame = read (trafficVid, k);

% Convertir a escala de grises para realizar el procesamiento morfológico.
I = rgb2gray (singleFrame);

% Retirar autos oscuros.
noDarkCars = imextendedmax (I, darkCarValue);

% Eliminar las marcas de carril y otras estructuras sin forma de disco.
noSmallStructures = imopen (noDarkCars, sedisk);

% Eliminar estructuras pequeñas.
noSmallStructures = bwareaopen (noSmallStructures, 150);

% Obtenga el área y el centroide de cada objeto restante en el marco. los
El% objeto con el área más grande es el automóvil de color claro. Crear una copia
% del cuadro original y etiquetar el automóvil cambiando el píxel del centroide
% valor a rojo.
taggedCars (:,:,:, k) = singleFrame;

stats = regionprops (noSmallStructures, {‘Centroid’, ‘Area’});
if ~ isempty ([stats.Area])
areaArray = [stats.Area];
[basura, idx] = max (areaArray);
c = stats (idx) .Centroid;
c = piso (fliplr (c));
ancho = 2;
fila = c (1) -ancho: c (1) + ancho;
col = c (2) -ancho: c (2) + ancho;
taggedCars (fila, col, 1, k) = 255;
taggedCars (fila, col, 2, k) = 0;
taggedCars (fila, col, 3, k) = 0;
fin
fin
%%
% Paso 5: Visualizar resultados
frameRate = trafficVid.FrameRate;
implay (taggedCars, frameRate);