OpenCV de arka plan temizleme işlemini absdiff metodu yapmaktadır. Absdiff metodu verilen iki matris arasında çıkarma işlemi yapar bu çıkarma işlemi sonucunda değişen kısımlar yani hareketli kısımlar gösterilir.Çıkarma işlemi sonucu mutlak değer olarak döndürülür. Şöyle özetleyebiliriz bir manzara resmi var bu kaynak resmimiz olsun , bu manzara resminden ikinci bir kare aldık ve bu ikinci karede bir kuş belirdi,bizim amacımız arka planı temizlemek bunu ise iki resim arasında çıkarma işlemi yapıyoruz kuş hariç diğer yerler aynı olduğu için ekstra olarak bu matris içerisinde kuşun renkleri olacaktır ve bu bize sonucu verecektir.Çıkarma sonucu oluşan yeni matrise thresholding uygulayarak görünürlülüğünü arttırabilir tamamen beyaz yapılarak kaç adet değişiklik olmuş sayılabilir yada ekstra morfolojik filtreler ile ihtiyacınıza uygun hale getirebilirsiniz.
Java örneğini inceleyelim;
import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.highgui.Highgui; import org.opencv.imgproc.Imgproc; public class ArkaplanTemizle { public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Mat kaynakMatris = Highgui.imread("/home/mesutpiskin/Masaüstü/1.jpg"); Mat kaynakMatrisGray = new Mat(); //RGB UZAYINDAN GRAY UZAYINA ÇEVİRME Imgproc.cvtColor(kaynakMatris, kaynakMatrisGray,Imgproc.COLOR_RGB2GRAY); Mat hedefMatris = Highgui.imread("/home/mesutpiskin/Masaüstü/2.jpg"); Mat hedefMatrisGray = new Mat(); //RGB UZAYINDAN GRAY UZAYINA ÇEVİRME Imgproc.cvtColor(hedefMatris, hedefMatrisGray,Imgproc.COLOR_RGB2GRAY); //ARKA PLAN TEMİZLENDİKTEN SONRAKİ VERİLERİ TUTACAK MATRİS Mat yeni=new Mat(); /* * hedefMatrisGray: Yakalanan anlık resim * kaynakMatrisGray: Temel alınacak bir önceki resim * yeni: Çıkarma işlemi sonucunda oluşacak verileri tutacak matris * absdiff metodu matrisler arası bir çıkarma işlemi yapıyor. */ Core.absdiff(hedefMatrisGray,kaynakMatrisGray, yeni); //ÇIKARMA İŞLEMİ SONUCU OLUŞAN MATRİSİ KAYDET Highgui.imwrite("/home/mesutpiskin/Masaüstü/yeni.jpg", yeni); } }
Sonuç