10
Menggunakan Kalman Filter untuk objek pelacakan Contoh ini menunjukkan cara menggunakan visi vision.KalmanFilterobjek dan configureKalmanFilterfungsi untuk melacak benda. Contoh ini adalah fungsi dengan tubuh yang utama di atas dan penolong rutinitas dalam bentuk fungsi bersarang di bawah ini. function kalmanFilterForTracking Pengenalan Kalman filter memiliki banyak kegunaan, termasuk aplikasi kontrol, navigasi, komputer visi dan waktu seri ekonometri. Contoh ini menggambarkan cara menggunakan Kalman filter untuk melacak objek dan berfokus pada tiga fitur penting: Prediksi objek lokasi di masa mendatang Pengurangan kebisingan yang diperkenalkan oleh pendeteksian tidak akurat Memfasilitasi proses Asosiasi beberapa objek untuk jejak mereka Tantangan objek pelacakan Sebelum menampilkan penggunaan Kalman filter, mari kita pertama Periksa tantangan pelacakan objek dalam video. Video berikut ini menunjukkan sebuah bola hijau yang bergerak dari kiri ke kanan di lantai. showDetections(); Wilayah putih atas bola menyoroti pixel terdeteksi menggunakan visivision.ForegroundDetector, yang memisahkan objek bergerak dari latar belakang.Pengurangan latar belakang hanya menemukan sebagian bola karena rendah kontras antara bola dan lantai. Dengan kata lain, proses deteksi tidak ideal dan memperkenalkan kebisingan. Untuk mudah memvisualisasikan seluruh objek lintasan, kita overlay semua frame video ke berkas tunggal. Tanda "+" menunjukkan centroids dihitung menggunakan analisis gumpalan. showTrajectory(); Open Script

Using kalman filter for object tracking matlab & simulink example r

Embed Size (px)

Citation preview

Page 1: Using kalman filter for object tracking   matlab & simulink example r

Menggunakan Kalman Filter untuk objek pelacakan

Contoh ini menunjukkan cara menggunakanvisi vision.KalmanFilterobjek dan configureKalmanFilterfungsiuntuk melacak benda.

Contoh ini adalah fungsi dengan tubuh yang utama di atas dan penolong rutinitas dalam bentuk fungsi bersarang dibawah ini.

function kalmanFilterForTracking 

PengenalanKalman filter memiliki banyak kegunaan, termasuk aplikasi kontrol, navigasi, komputer visi dan waktu seriekonometri. Contoh ini menggambarkan cara menggunakan Kalman filter untuk melacak objek dan berfokus padatiga fitur penting:

Prediksi objek lokasi di masa mendatang

Pengurangan kebisingan yang diperkenalkan oleh pendeteksian tidak akurat

Memfasilitasi proses Asosiasi beberapa objek untuk jejak mereka

Tantangan objek pelacakanSebelum menampilkan penggunaan Kalman filter, mari kita pertama Periksa tantangan pelacakan objek dalamvideo. Video berikut ini menunjukkan sebuah bola hijau yang bergerak dari kiri ke kanan di lantai.

showDetections(); 

Wilayah putih atas bola menyoroti pixel terdeteksi menggunakan visivision.ForegroundDetector, yangmemisahkan objek bergerak dari latar belakang.Pengurangan latar belakang hanya menemukan sebagian bolakarena rendah kontras antara bola dan lantai. Dengan kata lain, proses deteksi tidak ideal dan memperkenalkankebisingan.

Untuk mudah memvisualisasikan seluruh objek lintasan, kita overlay semua frame video ke berkas tunggal. Tanda"+" menunjukkan centroids dihitung menggunakan analisis gumpalan.

showTrajectory(); 

Open Script

Page 2: Using kalman filter for object tracking   matlab & simulink example r

Dua masalah dapat diamati:

1. Pusat wilayah ini biasanya berbeda dari pusat bola. Dengan kata lain, ada kesalahan dalam pengukuran bolalokasi.

2. Lokasi bola tidak tersedia ketika itu adalah tersumbat oleh kotak, yaitu pengukuran hilang.

Kedua tantangan ini dapat diatasi dengan menggunakan Kalman filter.

Melacak objek tunggal menggunakan Kalman FilterMenggunakan video yang terlihat sebelumnya, fungsi trackSingleObjectmenunjukkan Anda bagaimana untuk:

Menciptakan visi vision.KalmanFilter dengan menggunakanconfigureKalmanFilter

Menggunakan metode predict dan correct dalam urutan yang untuk menghilangkan kebisingan hadir dalamsistem pelacakan

Menggunakan metode predict sendiri untuk memperkirakan lokasi bola ketika itu adalah tersumbat oleh kotak

Pemilihan Kalman filter parameter dapat menantang. Fungsi configureKalmanFiltermembantu menyederhanakanmasalah ini. Rincian lebih lanjut tentang ini dapat ditemukan lebih lanjut dalam contoh.

Fungsi trackSingleObject mencakup fungsi pembantu bersarang. Top­level variabel berikut digunakan untukmentransfer data antara fungsi bersarang.

frame            = [];  % A video frame detectedLocation = [];  % The detected location trackedLocation  = [];  % The tracked location label            = '';  % Label for the ball utilities        = [];  % Utilities used to process the video 

Prosedur untuk Pelacakan objek tunggal ditunjukkan di bawah.

function trackSingleObject(param)   % Create utilities used for reading video, detecting moving objects,   % and displaying the results.   utilities = createUtilities(param); 

  isTrackInitialized = false;   while ~isDone(utilities.videoReader)     frame = readFrame(); 

    % Detect the ball.     [detectedLocation, isObjectDetected] = detectObject(frame); 

Page 3: Using kalman filter for object tracking   matlab & simulink example r

    if ~isTrackInitialized       if isObjectDetected         % Initialize a track by creating a Kalman filter when the ball is        % detected for the first time.         initialLocation = computeInitialLocation(param, detectedLocation);        kalmanFilter = configureKalmanFilter(param.motionModel, ...           initialLocation, param.initialEstimateError, ...           param.motionNoise, param.measurementNoise); 

        isTrackInitialized = true;        trackedLocation = correct(kalmanFilter, detectedLocation);         label = 'Initial';       else         trackedLocation = [];         label = '';       end 

    else       % Use the Kalman filter to track the ball.       if isObjectDetected % The ball was detected.         % Reduce the measurement noise by calling predict followed by         % correct.         predict(kalmanFilter);         trackedLocation = correct(kalmanFilter, detectedLocation);         label = 'Corrected';       else % The ball was missing.         % Predict the ball's location.         trackedLocation = predict(kalmanFilter);         label = 'Predicted';       end     end 

    annotateTrackedObject();   end % while 

  showTrajectory(); end 

Ada dua skenario yang berbeda yang Kalman filter Alamat:

Ketika bola terdeteksi, Kalman filter pertama memprediksi negara pada saat ini video bingkai, dan kemudianmenggunakan lokasi objek baru terdeteksi untuk memperbaiki keadaan. Hal ini menghasilkan lokasi yangdisaring.

Ketika bola hilang, Kalman filter semata­mata bergantung pada keadaan sebelumnya untuk memprediksi bolalokasi saat ini.

Anda dapat melihat lintasan bola dengan overlaying semua video frame.

param = getDefaultParameters();  % get Kalman configuration that works well                                 % for this example 

trackSingleObject(param);  % visualize the results 

Page 4: Using kalman filter for object tracking   matlab & simulink example r

Menjelajahi opsi­opsi konfigurasi Kalman FilterKonfigurasi Kalman filter bisa sangat menantang. Selain pemahaman dasar filter Kalman, hal ini seringmembutuhkan eksperimen untuk datang dengan satu set parameter konfigurasicocok. Fungsi trackSingleObject , yang didefinisikan di atas, membantu Anda untuk menjelajahi berbagai pilihankonfigurasi yang ditawarkan oleh fungsi configureKalmanFilter .

Fungsi configureKalmanFilter mengembalikan sebuah objek filter Kalman. Anda harus memberikan limamasukan argumen.

kalmanFilter = configureKalmanFilter(MotionModel, InitialLocation,          InitialEstimateError, MotionNoise, MeasurementNoise) 

Pengaturan MotionModel harus sesuai dengan karakteristik fisik dari gerak benda.Anda dapat mengatur kecepatankonstan atau konstan percepatan model. Contoh berikut menggambarkan konsekuensi dari membuat pilihan sub­optimal.

param = getDefaultParameters();         % get parameters that work wellparam.motionModel = 'ConstantVelocity'; % switch from ConstantAcceleration                                        % to ConstantVelocity % After switching motion models, drop noise specification entries % corresponding to acceleration. param.initialEstimateError = param.initialEstimateError(1:2); param.motionNoise          = param.motionNoise(1:2); 

trackSingleObject(param); % visualize the results 

Page 5: Using kalman filter for object tracking   matlab & simulink example r

Perhatikan bahwa bola muncul di tempat yang berbeda dari lokasi yang diperkirakan.Dari waktu ketika bola dirilis, itutergantung konstan perlambatan karena perlawanan dari karpet. Oleh karena itu, model percepatan konstan adalahpilihan yang lebih baik.Jika Anda terus model kecepatan konstan, hasil pelacakan akan sub­optimal tidak peduli apayang Anda pilih untuk nilai­nilai lainnya.

Biasanya, Anda akan mengatur masukan InitialLocation ke lokasi mana objek pertama kali terdeteksi. Anda jugaakan mengatur vektor InitialEstimateError nilai­nilai besar karena keadaan awal mungkin sangat bising mengingatbahwa itu berasal dari deteksi tunggal. Gambar berikut menunjukkan efek dari misconfiguring parameter ini.

param = getDefaultParameters();  % get parameters that work well param.initialLocation = [0, 0];  % location that's not based on an actual detectionparam.initialEstimateError = 100*ones(1,3); % use relatively small values

trackSingleObject(param); % visualize the results 

Page 6: Using kalman filter for object tracking   matlab & simulink example r

Dengan parameter misconfigured, butuh beberapa langkah sebelum lokasi yang dikembalikan oleh Kalman filtersejajar dengan lintasan yang sebenarnya objek.

Nilai MeasurementNoise harus dipilih berdasarkan detektor akurasi. Mengatur pengukuran kebisingan dengan lebihbesar nilai untuk detektor kurang akurat. Contoh berikut menggambarkan pendeteksian bising dari ambangsegmentasi misconfigured.Meningkatkan pengukuran kebisingan menyebabkan Kalman filter dengan lebihmengandalkan pada keadaan internal daripada pengukuran masuk, dan dengan demikian mengkompensasi deteksikebisingan.

param = getDefaultParameters(); param.segmentationThreshold = 0.0005; % smaller value resulting in noisy detectionsparam.measurementNoise      = 12500;  % increase the value to compensate                                      % for the increase in measurement noise

trackSingleObject(param); % visualize the results 

Page 7: Using kalman filter for object tracking   matlab & simulink example r

Biasanya objek tidak bergerak dengan konstan percepatan atau kecepatan konstan.Andamenggunakan MotionNoise untuk menentukan jumlah penyimpangan dari model ideal gerak. Ketika Andameningkatkan suara gerak, Kalman filter lebih sangat bergantung pada pengukuran masuk daripada pada keadaaninternal. Mencoba bereksperimen dengan parameter MotionNoise untuk mempelajari lebih lanjut tentang efek.

Sekarang bahwa Anda sudah familiar dengan cara menggunakan Kalman filter dan bagaimana caramengkonfigurasinya, Bagian berikutnya akan membantu Anda belajar bagaimana hal itu dapat digunakan untukbeberapa objek pelacakan.

Catatan: Untuk menyederhanakan proses konfigurasi dalam contoh di atas, kita menggunakanfungsi configureKalmanFilter . Fungsi ini membuat beberapa asumsi.Lihat dokumentasi fungsi untukrincian. Jika Anda membutuhkan tingkat yang lebih besar kontrol atas proses konfigurasi, Anda dapat menggunakanvisivision.KalmanFilter objek secara langsung.

Melacak beberapa objek yang menggunakan Kalman FilterPelacakan beberapa objek pose beberapa tantangan tambahan:

Beberapa pendeteksian harus dihubungkan dengan benar trek

Anda harus menangani objek baru yang muncul di adegan

Identitas objek harus dipertahankan ketika beberapa objek bergabung menjadi satu deteksi

Visi vision.KalmanFilter objek bersama dengan fungsiassignDetectionsToTracks dapat membantumemecahkan masalah

Menetapkan pendeteksian ke trek

Dengan kata lain, menentukan apakah deteksi sesuai dengan objek baru, melacak penciptaan

Seperti dalam kasus objek tunggal occluded, prediksi dapat digunakan untuk membantu beberapa benda­bendayang dekat satu sama lain

Untuk mempelajari lebih lanjut tentang menggunakan Kalman filter untuk melacak beberapa objek, lihat contohberjudul berbasis gerakan beberapa objek pelacakan.

Fungsi utilitas yang digunakan dalam contohFungsi utilitas yang digunakan untuk mendeteksi objek dan menampilkan hasilnya.Bagian ini menggambarkanbagaimana contoh menerapkan fungsi­fungsi ini.

Mendapatkan parameter default untuk membuat penyaring Kalman dan segmentasi bola.

function param = getDefaultParameters   param.motionModel           = 'ConstantAcceleration';   param.initialLocation       = 'Same as first detection';   param.initialEstimateError  = 1E5 * ones(1, 3); 

Page 8: Using kalman filter for object tracking   matlab & simulink example r

  param.motionNoise           = [25, 10, 1];   param.measurementNoise      = 25;   param.segmentationThreshold = 0.05; end 

Membaca frame video berikutnya dari video file.

function frame = readFrame()   frame = step(utilities.videoReader); end 

Mendeteksi dan anotasi bola dalam video.

function showDetections()   param = getDefaultParameters();   utilities = createUtilities(param);   trackedLocation = []; 

  idx = 0;   while ~isDone(utilities.videoReader)     frame = readFrame();     detectedLocation = detectObject(frame);     % Show the detection result for the current video frame.     annotateTrackedObject(); 

    % To highlight the effects of the measurement noise, show the detection    % results for the 40th frame in a separate figure.     idx = idx + 1;     if idx == 40       combinedImage = max(repmat(utilities.foregroundMask, [1,1,3]), frame);      figure, imshow(combinedImage);     end   end % while 

  % Close the window which was used to show individual video frame.   uiscopes.close('All'); end 

Mendeteksi bola dalam bingkai video saat ini.

function [detection, isObjectDetected] = detectObject(frame)   grayImage = rgb2gray(frame);   utilities.foregroundMask = step(utilities.foregroundDetector, grayImage);  detection = step(utilities.blobAnalyzer, utilities.foregroundMask);   if isempty(detection)     isObjectDetected = false;   else     % To simplify the tracking process, only use the first detected object.    detection = detection(1, :);     isObjectDetected = true;   end end 

Menampilkan hasil Deteksi dan pelacakan saat ini.

function annotateTrackedObject()   accumulateResults();   % Combine the foreground mask with the current video frame in order to  % show the detection result.   combinedImage = max(repmat(utilities.foregroundMask, [1,1,3]), frame);

  if ~isempty(trackedLocation) 

Page 9: Using kalman filter for object tracking   matlab & simulink example r

    shape = 'circle';     region = trackedLocation;     region(:, 3) = 5;     combinedImage = insertObjectAnnotation(combinedImage, shape, ...       region, {label}, 'Color', 'red');   end   step(utilities.videoPlayer, combinedImage); end 

Menunjukkan lintasan bola dengan overlaying semua video bingkai di atas satu sama lain.

function showTrajectory   % Close the window which was used to show individual video frame.   uiscopes.close('All'); 

  % Create a figure to show the processing results for all video frames.  figure; imshow(utilities.accumulatedImage/2+0.5); hold on;   plot(utilities.accumulatedDetections(:,1), ...     utilities.accumulatedDetections(:,2), 'k+'); 

  if ~isempty(utilities.accumulatedTrackings)     plot(utilities.accumulatedTrackings(:,1), ...       utilities.accumulatedTrackings(:,2), 'r‐o');     legend('Detection', 'Tracking');   end end 

Mengumpulkan video frame, terdeteksi lokasi, dan lokasi yang dilacak untuk menunjukkan lintasan bola.

function accumulateResults()   utilities.accumulatedImage      = max(utilities.accumulatedImage, frame);  utilities.accumulatedDetections ...     = [utilities.accumulatedDetections; detectedLocation];   utilities.accumulatedTrackings  ...     = [utilities.accumulatedTrackings; trackedLocation]; end 

Untuk tujuan ilustrasi, pilih lokasi awal digunakan oleh penyaring Kalman.

function loc = computeInitialLocation(param, detectedLocation)   if strcmp(param.initialLocation, 'Same as first detection')     loc = detectedLocation;   else     loc = param.initialLocation;   end end 

Membuat utilitas untuk membaca video, mendeteksi objek bergerak, dan menampilkan hasilnya.

function utilities = createUtilities(param)   % Create System objects for reading video, displaying video, extracting  % foreground, and analyzing connected components.   utilities.videoReader = vision.VideoFileReader('singleball.mp4');   utilities.videoPlayer = vision.VideoPlayer('Position', [100,100,500,400]);  utilities.foregroundDetector = vision.ForegroundDetector(...     'NumTrainingFrames', 10, 'InitialVariance', param.segmentationThreshold);  utilities.blobAnalyzer = vision.BlobAnalysis('AreaOutputPort', false,     'MinimumBlobArea', 70, 'CentroidOutputPort', true); 

  utilities.accumulatedImage      = 0;   utilities.accumulatedDetections = zeros(0, 2);   utilities.accumulatedTrackings  = zeros(0, 2); 

Page 10: Using kalman filter for object tracking   matlab & simulink example r

end 

end 

Apakah topik ini berma