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:
1 a1 b


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

No Proses Background Frame
1 Baca Citra
1 a

1 b
2 Konversi ruang warna RGB menjadi HSV
2 a

2 b
3 Thresholding pada masing-masing kanal H, S, dan V dengan nilai threshold 0.5
3 a

3 b
4 Operasi X-OR antara background dengan frame
4
5 Konversi citra menjadi grayscale
5
6 Konversi citra menjadi biner
6
7 Filtering citra menggunakan filter median 5 x 5
7
8 Menghilangkan objek yang memiliki luasan di bawah 1000
8
9 Membuat masking berdasarkan hasil deteksi foreground
9
10 Menampilkan hasil deteksi foreground pada frame
10
11 Menampilkan cropping hasil deteksi foreground
11

Source code dan citra mengenai background subtraction (foreground detection) dapat diunduh melalui laman berikut ini: Source Code

Sedangkan tampilan source code nya adalah:

clc;
close all;
clear;

%Read Background Image
Background=imread('Stationary Camera Ball Kick.mp4_20151012_104534.327.jpg');

%Read Current Frame
CurrentFrame=imread('Stationary Camera Ball Kick.mp4_20151012_104406.537.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
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',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);

%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. 28 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..

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s

%d bloggers like this: