You are on page 1of 3

1

[IMAGE PROCESSING]

MOTION DETECTION USING SIMPLE IMAGE DIFFERENCE

Dalam artikel ini akan coba dibahas mengenai motion detection menggunakan cara yang paling sederhana yakni mencari Image Difference. Dalam motion detection hal yang paling utama adalah Background dan Foreground. Sebisa mungkin kita melakukan ekstraksi dari citra sehingga didapat foreground. Dengan menggunakan Image Difference yang kita lakukan adalah substraksi citra antar frame, frame sesudah dan sebelum sehingga didapat perubahan nilai intensitas piksel. Perlu diingat bahwa dengan teknik ini kita sangat tergantung sekali pada nilai intensitas. Sehingga video yang akan diolah semestinya rentan terhadap perubahan intensitas yang dikarenakan cahaya pada skala kecil. Perubahan intensitas pada skala kecil tetap dianggap sebagai sesuatu yang bergerak. Nah untuk permasalahan itu, kita bisa melakukan filtering atau bisa juga thresholding (ini paling diminati). Thresholding bisa berupa pengambangan pada tiap-tiap piksel (nilai intensitas) atau bisa juga pada luasan cakupannya. Dalam artikel ini kita menggunakan thresholding untuk luasannya, sehingga pengolahan diharapkan bisa lebih cepat (tidak memakan waktu dan jumlah komputasi yang banyak). Saya membuat 2 buah program untuk kasus ini. Program pertama merupakan motion detection terhadap semua piksel yang mengalami perubahan nilai dan itu dianggap sebagai motion. Dalam hal ini saya melakukan pengambangan (thresholding) dalam skala sehingga memang untuk piksel yang berubah dalam skala kecil tidak akan dianggap. Pada program kedua yang ambil sebagai motion detection output hanya perubahan piksel dalam skala besar (paling besar) sehingga yang ditampilkan hanya 1 item saja. Dalam tiap program, saya membuat kembali sebuah video hasil pengolahan dengan menggunakan kompresi Indeo 5. Silakan juga membaca artikel saya tentang mengaktifkan jenis codec ini pada windows tanpa install program apa-apa. Agar lebih jelas, perhatikan program di bawah ini: Program 1
clear all; close all; clc; warning off; try

[janshendry@gmail.com]

Page 1

[IMAGE PROCESSING]

filename = '1.avi'; Vinfo = aviinfo(filename); numFrame = Vinfo.NumFrames; aviobj = aviread(filename); vidobj = avifile('tracked.avi', 'compression', 'Indeo5', 'fps', ... Vinfo.FramesPerSecond); s1 = strel('line', 7, 0); s2 = strel('line', 7, 90); for m = 2:numFrame movA = rgb2gray(frame2im(aviread(filename, m-1))); movB = rgb2gray(frame2im(aviread(filename, m))); temp = imabsdiff(movA,movB); temp = bwareaopen(imdilate(im2bw(temp,.1),[s1 s2]), 100); imshow(frame2im(aviread(filename, m))); CC = bwconncomp(temp); S = regionprops(CC,{'Centroid', 'BoundingBox'}); for bb = 1:numel(S) % numPixels = cellfun(@numel,CC.PixelIdxList); % [biggest,idx] = max(numPixels); hold on; plot(S(bb).Centroid(1),S(bb).Centroid(2),'ro'); k = S(bb).BoundingBox; x = [k(1) k(1)+k(3) k(1)+k(3) k(1) k(1)]; y = [k(2) k(2) k(2)+k(4) k(2)+k(4) k(2)]; hold on; line(x,y); end hh = getframe; vidobj = addframe(vidobj, hh); end hold off; vidobj = close(vidobj); catch end

program 2
clear all; close all; clc; warning off; try filename = '2.avi'; Vinfo = aviinfo(filename); numFrame = Vinfo.NumFrames;

[janshendry@gmail.com]

Page 2

[IMAGE PROCESSING]

aviobj = aviread(filename); vidobj = avifile('tracked.avi', 'compression', 'Indeo5', 'fps', ... Vinfo.FramesPerSecond); s1 = strel('line', 7, 0); s2 = strel('line', 7, 90); for m = 2:numFrame movA = rgb2gray(frame2im(aviread(filename, m-1))); movB = rgb2gray(frame2im(aviread(filename, m))); temp = imabsdiff(movA,movB); temp = bwareaopen(imdilate(im2bw(temp,.1),[s1 s2]), 100); CC = bwconncomp(temp); S = regionprops(CC,{'Centroid', 'BoundingBox'}); numPixels = cellfun(@numel,CC.PixelIdxList); [biggest,idx] = max(numPixels); imshow(frame2im(aviread(filename, m))); hold on; plot(S(idx).Centroid(1),S(idx).Centroid(2),'ro'); k = S(idx).BoundingBox; x = [k(1) k(1)+k(3) k(1)+k(3) k(1) k(1)]; y = [k(2) k(2) k(2)+k(4) k(2)+k(4) k(2)]; hold on; line(x,y); hh = getframe; vidobj = addframe(vidobj, hh); end hold off; vidobj = close(vidobj); catch end

demikianlah pembahasan tentang motion detection menggunakan simple image difference. Semoga bisa memberikan sesuatu untuk pembaca.

@ thanksss

[janshendry@gmail.com]

Page 3