Background Subtraction (Foreground Detection)


Background Subtraction, yang juga dikenal sebagai Foreground Detection, adalah salah satu teknik pada bidang pengolahan citra dan computer vision yang bertujuan untuk mendeteksi/mengambil foreground dari background untuk diproses lebih lanjut (seperti pada proses object recognition dll). Umumnya foreground yang diinginkan adalah berupa objek manusia, mobil, teks, dll. Background subtraction merupakan metode yang umumnya digunakan untuk mendeteksi objek bergerak pada video dari kamera statis (stationary camera). Proses deteksi objek bergerak dengan metode background subtraction didasarkan pada perbedaan antara background referensi dengan frame. Contoh citra background referensi dan citra current frame ditunjukkan pada gambar di bawah ini:

Berikut ini merupakan contoh aplikasi pemrograman matlab mengenai background subtraction (foreground detection) melalui transformasi ruang warna RGB menjadi HSV.

No Proses Background Frame
1 Baca Citra
2 Konversi ruang warna RGB menjadi HSV
3 Thresholding pada masing-masing kanal H, S, dan V dengan nilai threshold 0.5
4 Operasi X-OR antara background dengan frame
5 Konversi citra menjadi grayscale
6 Konversi citra menjadi biner
7 Filtering citra menggunakan filter median 5 x 5
8 Menghilangkan objek yang memiliki luasan di bawah 1000
9 Membuat masking berdasarkan hasil deteksi foreground
10 Menampilkan hasil deteksi foreground pada frame
11 Menampilkan cropping hasil deteksi foreground

File source code lengkap beserta citra mengenai background subtraction (foreground detection) dapat diperoleh melalui halaman berikut ini: Source Code

Sedangkan tampilan source code nya adalah:

clc; clear; close all;

%Read Background Image
Background = imread('background.jpg');

%Read Current Frame
CurrentFrame = imread('current frame.jpg');

% Display Background and Foreground
subplot(2,2,1);imshow(Background);title('Background');
subplot(2,2,2);imshow(CurrentFrame);title('Current Frame');

%Convert RGB 2 HSV Color conversion
[Background_hsv] = round(rgb2hsv(Background));
[CurrentFrame_hsv] = round(rgb2hsv(CurrentFrame));
Out = bitxor(Background_hsv,CurrentFrame_hsv);

%Convert RGB 2 GRAY
Out=rgb2gray(Out);

%Read Rows and Columns of the Image
[rows, columns] = size(Out);

%Convert to Binary Image
BinaryImage = false(rows,columns);
for i=1:rows
    for j=1:columns
        if Out(i,j) >0
            BinaryImage(i,j)=1;
        else
            BinaryImage(i,j)=0;
        end
    end
end

%Apply Median filter to remove Noise
FilteredImage = medfilt2(BinaryImage,[5 5]);

%Boundary Label the Filtered Image
[L, num] = bwlabel(FilteredImage);

STATS = regionprops(L,'all');
cc = [];
removed = 0;

%Remove the noisy regions
for i = 1:num
    dd = STATS(i).Area;
    if (dd < 1000)
        L(L==i)=0;
        removed = removed + 1;
        num = num-1;
    end
end

L = logical(L);
[row,col] = find(L==1);

h_bw = imcrop(CurrentFrame,[min(col) min(row) max(col)-min(col) max(row)-min(row)]);

[a,b] = size(L);
mask = false(a,b);
mask(min(row):max(row),min(col):max(col)) = 1;

mask = bwperim(mask,8);
mask = imdilate(mask,strel('square',5));

R = CurrentFrame(:,:,1);
G = CurrentFrame(:,:,2);
B = CurrentFrame(:,:,3);

R(mask) = 255;
G(mask) = 0;
B(mask) = 0;

RGB = cat(3,R,G,B);

%Display Result
subplot(2,2,3);imshow(L);title('Detected Foreground (binary)');
subplot(2,2,4);imshow(RGB);title('Detected Foreground (RGB)');

Posted on October 12, 2015, in Pengenalan Pola, Pengolahan Citra, Pengolahan Video and tagged , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 44 Comments.

  1. yo. salam kenal gan. sebagai sesama penulis bidang matlab.
    mau tanya gan, itu kan foreground detectionnya kalo liat dari langkahnya, harus ada foto background tanpa foreground. kira2 ada gak metode yg bisa deteksi foreground kalo gak ada foto backgroundnya dulu.

    • Salam kenal juga mas deki satria
      Ada mas, saya ada source code nya, kalau tertarik, bisa saya kirimkan via email
      Langkah pertamanya scanning seluruh frame video, kemudian dicari frame rata-ratanya, sehingga diperoleh citra background. Setelah itu dilakukan foreground detection

    • saya tertarik mas sama yang video, bila berkenan mohon bantuan juga mas terkait tugas akhir saya. Namun menggunakan metode running gaussian average, apakah bisa berdiskusi mengenai ini mas ? terima kasih banyak
      email : emush1994@gmail.com

  2. permisi gan, saya boleh minta sc programnnya gak? kalo boleh bisa kirim ke email saya ya ahmad.imam22@gmail.com
    makasih gan 🙂

  3. Hallo kak, saya boleh minta source codenya nga?
    dan mau tanya, ini di koding di matlab apa compileir lainnya kak?
    kalau boleh, mohon dikirim ke ciptaantuhanyme@gmail.com

  4. Punten kang, itu code diatas line 50 : if (dd &lt; 1000)
    maksudnya apa ya ? soalnya eror disitu, dan baru liat struktur seperti itu 😀

  5. maaf mas, boleh tanya2 seputar pengolahan citra digital menggunakan matlab gak? klu boleh, ini email saya khairilfitryadi@gmail.com. terimakasih sebelumnya

  6. alhamdulillah,,,, sangat bermanfaat sekali 😀
    terima kasih, bisa konsultasi masalah citra kan mas??? 🙂

  7. assalammualaikum mas… terimakasih webnya sangat membantu sekali.
    Melihat comment diatas, mas membahas tentang video, saya tertarik di pengolahan video tersebut. Kalau mas tidak berkeberatan, boleh tidak saya minta source code nya? tolong kirim ke email hendrapriyanamirantika99@gmail.com
    Sebelumnya, saya mengucapkan terimakasih, dan di tunggu postingan bermanfaat selanjutnya mas…
    Wassalammualaikum….

  8. Maaf mas, apa boleh tanya-tanya mengenai video processing menggunakan matlab? kebetulan skripsi saya membahas video processing menggunakan matlab terutama dalam bidang object tracking/detection dan estimating velocities, akan sangat membantu jika kita bisa berdiskusi mengenai hal tsb. email saya novia.angelita@yahoo.com
    Terima kasih sebelumnya

  9. maaf mas, boleh minta referensi tentang background subtraction-nya? saya perlu untuk pembahasan skripsi saya.
    kalo mas berkenan memberikan referensinya silahkan email ke bayufajar22@gmail.com terima kasih sebelumnya.

  10. Mas apakah ada ebook tentang penjalasan metode ini , kalau mas berkenan share ke email saya mas heymrreza@gmail.com untuk tambahan referensi Bab 2 saya

  11. mas saya kurang paham tentang tahapan-tahapan untuk metode background subtraction untuk referensi TA saya, mohon di share melalui email saya choirunnisak20@gmail.com

  12. sekalian juga ebook yang menjelaskan metode ini.. terima kasih..

  13. Assalamualaikum ka’
    Kalau mendeteksi warna bibir..ini bisa gk ka??

  14. Ini email sy ka’ plakplokk@gmail.com
    Maaf kalau bisa saya juga mau tanya bnyk hal..yg brkaitan dengan matlab.

  15. mau tanya itu untuk yang median filtering menghilangkan objek yang luasanya kurang dari 1000, maksudnya 1000 apa ya satuanya mas?

  16. mas bolehkah saya meminta referensi dan ebook untuk TA saya mengnai metode background substraction. bisa minta tolong kirim ke ciwaway@gmail.com terima kasih mas sebelumnya 🙂

  17. olivia safitri

    Assalammu’alaikum kak. mau tanya apakah ada sourcecode untuk menghitung kecepatan kendaraan tidak ya? untuk tugas akhir saya. kebetulan saya sudah coba deteksinya cuma centroid yang dihitung dari objek yang bergerak hanya satu. sedangkan objek dalam video tersebut banyak. sehingga ketika dihitung kecepatannya tiap bounding box itu semua nilainya sama. mohon bantuannya kak. terimakasih..

  18. kak, maaf mau tanya, itu kan foreground detectionnya kalau dilihat dari langkahnya, harus ada foto background tanpa foreground. kira2 ada nggak metode yg bisa deteksi foreground kalau nggak ada foto backgroundnya dulu

    soalnya objek di skripsi saya terllau mepet(tanaman kubis), mohon bantuannya kak, makasih

  19. Maaf Bang, saya mau nanya
    Kalo kita deteksi suatu objek itu, kita harus punya citra background nya ya kyk contoh d atas?
    Atau kita bisa deteksi lgsg dari satu citra bang, gk peru citra background?
    Mohon Bantuan nya bang

  20. bacground subtraction bisa di pakai di gambar atau hanya untuk vidio mas ?? trimakasi

  21. Ikhsan Faisal Adriansyah

    Mas saya mau bertanya TA saya, cara mendeteksi hujan berdasarkan rain streaks pada gambar bisa menggunakan background substraction ini?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: