Pengolahan Video untuk Mendeteksi Objek Bergerak dengan Metode Background Subtraction
Berikut ini merupakan contoh aplikasi pemrograman matlab mengenai pengolahan video untuk mendeteksi objek bergerak (object tracking) dengan metode background subtraction.
Secara garis besar langkah-langkahnya adalah:
1. Mengekstrak semua frame pada video
2. Mencari frame background secara otomatis dengan cara menghitung nilai modus pada setiap frame
3. Mengkonversi CurrentFrame dan BackgroundFrame menjadi citra grayscale
4. Mengkurangkan antara kedua frame tersebut
5. Mengkonversi citra hasil pengurangan menjadi citra biner
6. Melakukan operasi morfologi untuk menghilangkan noise
7. Menjadikan citra hasil operasi morfologi sebagai masking untuk memvisualisasikan objek yang bergerak
8. Menjalankan setiap frame hasil deteksi secara sekuensial (video)
Pada contoh ini digunakan video dengan spesifikasi sebagai berikut:
Name: ‘SampleVideo.avi’
Duration: 5.3333
Width: 360
Height: 240
FrameRate: 15.0000
BitsPerPixel: 24
VideoFormat: ‘RGB24’
Video tersebut memiliki durasi selama 5.3333 detik dan frame rate sebesar 15 frame per detik sehingga banyaknya frame ketika diekstrak adalah 5.3333 x 15 = 80 frame. Tampilan frame pada setiap detik ditunjukkan pada gambar di bawah ini:
Detik ke- | Frame |
0 | ![]() |
1 | ![]() |
2 | ![]() |
3 | ![]() |
4 | ![]() |
5 | ![]() |
Langkah-langkah pemrogramannya adalah:
1. Membaca file video
clc;clear;close all; vid = VideoReader('SampleVideo.avi');
2. Mengekstrak semua frame yang ada pada video (80 frame)
vidWidth = vid.Width; vidHeight = vid.Height; mov = struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),... 'colormap',[]); frames = zeros(vidHeight,vidWidth,3,80); k = 1; while hasFrame(vid) frames(:,:,:,k) = readFrame(vid); k = k+1; end
3. Mencari BackgroundFrame secara otomatis dengan cara menghitung nilai modus pada setiap frame
R = squeeze(frames(:,:,1,:)); G = squeeze(frames(:,:,2,:)); B = squeeze(frames(:,:,3,:)); R_back = uint8(mode(R,3)); G_back = uint8(mode(G,3)); B_back = uint8(mode(B,3)); Background = cat(3,R_back,G_back,B_back);
sehingga diperoleh BackgroundFrame seperti ditunjukkan pada gambar di bawah ini
4. Melakukan operasi background subtraction dengan metode pengurangan citra grayscale pada setiap frame
for x = 1:80 CurrentFrame = uint8(frames(:,:,:,x)); % Mengkonversi citra menjadi grayscale Background_gray = rgb2gray(Background); CurrentFrame_gray = rgb2gray(CurrentFrame); % Pengurangan citra grayscale Subtraction = (double(Background_gray)-double(CurrentFrame_gray)); Min_S = min(Subtraction(:)); Max_S = max(Subtraction(:)); Subtraction = ((Subtraction-Min_S)/(Max_S-Min_S))*255; Subtraction = uint8(Subtraction); % Mengkonversi citra menjadi biner menggunakan metode Otsu Subtraction = ~im2bw(Subtraction,graythresh(Subtraction)); % Operasi Morfologi bw = imfill(Subtraction,'holes'); bw = bwareaopen(bw,10); % Pembuatan masking dan proses cropping [row,col] = find(bw==1); h_bw = imcrop(CurrentFrame,[min(col) min(row) max(col)-min(col) max(row)-min(row)]); [a,b] = size(bw); mask = false(a,b); mask(min(row):max(row),min(col):max(col)) = 1; mask = bwperim(mask,8); mask = imdilate(mask,strel('square',3)); R = CurrentFrame(:,:,1); G = CurrentFrame(:,:,2); B = CurrentFrame(:,:,3); R(mask) = 255; G(mask) = 0; B(mask) = 0; RGB = cat(3,R,G,B); mov(x).cdata = RGB; end
Gambaran pada proses koding di atas adalah sebagai berikut:
5. Menjalankan citra hasil deteksi secara sekuensial dalam bentuk video
hf = figure; set(hf,'position',[300 300 vidWidth vidHeight]); movie(hf,mov,1,vid.FrameRate); close
Sehingga diperoleh video seperti pada Gambar di bawah ini:
Tampilan video pada setiap detik adalah:
Detik ke- | Frame |
0 | ![]() |
1 | ![]() |
2 | ![]() |
3 | ![]() |
4 | ![]() |
5 | ![]() |
File source code lengkap beserta video pada pemrograman di atas dapat diperoleh melalui halaman berikut: Source Code
Tutorial untuk mendeteksi objek bergerak dengan metode background subtraction dapat dilihat pada video berikut ini:

Posted on July 6, 2016, in Pengolahan Video and tagged aplikasi pengolahan video menggunakan matlab, background subtraction matlab, cara membuat background subtraction menggunakan matlab, cara membuat object tracking matlab, contoh background subtraction menggunakan matlab, contoh pengolahan video matlab, deteksi objek menggunakan matlab, foreground detection matlab, object tracking matlab, pengolahan video menggunakan matlab, source code pengolahan video matlab, subtraksi background matlab, tutorial pengolahan video matlab, tutorial pengolahan video menggunakan matlab, video object detection matlab, video object tracking matlab, video processing matlab. Bookmark the permalink. 17 Comments.
mas aku mau deteksi gerakan tp pake ipcam, akuisisi video nya gimana ya? ipcam ku ga bisa kedetect sm laptop. makasih mas
cara mengintegrasikan kamera dengan matlab dapat dilihat pada laman berikut https://pemrogramanmatlab.com/2016/04/04/akuisisi-citra-digital-menggunakan-webcam/
mas besok senin ada di lab fisika undip? kalo iya boleh sy kesana mas?
iya boleh, ada di lab fisika undip
Mas lab fisika nya yg sebelah mana ya, ini aku di masjid dkt lab fisika tp kata orang2 lab nya ada banyak.
kalo video bkan dr kamera fixed alias kameranya bergerak jg tetep bisa tidak menggunakan background subtraction?
background subtraction merupakan algoritma dengan akuisisi video menggunakan kamera statis
mas mau tanya, kalo errornya dibagian pembacaan Video reader itu gimana ya mas,,,,??masih belum paham tentang pembacaan file videonya dan tempat video tersebut ditempatkan pada hdd,,,, apa disatukan dengan file .m -nya atau dipanggil berdasarkan tempat penyimpanan,,,??
ada banyak faktor penyebab error tsb
di antaranya file video yg ingin diolah tidak dalam satu folder dg file koding matlab
bisa juga karena software matlab yg diinstal tidak support dg toolbox video reader
mas, untuk melakukan seleksi pejalan kaki atau bukan gimana yaa ?
deteksi pejalan kaki bisa menggunakan algoritma viola jones untuk mendeteksi manusia
oke mas terimakasih
assalamualaikum mas, boleh request bahas tentang tracking menggunakan metode kalman filter kah? saya sedikit kesulitan memahami kalman filter untuk traking pejalan kaki menggunakan drone 🙂 terimakasih banyak 🙂
Waalaikumsalam
Mudah2an ke depan terdapat materi mengenai tracking menggunakan metode kalman filter
Mas, untuk function hasFrame untuk matlab 2014a bisa diganti dengan apa ya mas
Bisa dicoba menggunakan matlab dengan versi yang sesuai dengan penjelasan di atas
permisi mas selamat malam, saya sebagai pemula ,mau bertanya.
1. apa fungsi dari angka 3 di
mov = struct(‘cdata’,zeros(vidHeight,vidWidth,3,’uint8′)
2. perbedaan rgb squish(1,2,3) sama back (3,3,3) angka nya sebagai apa mas?
3. bukunya mas ada diproduksi lewat tokopedia gak??