Daha önce şurada belirttiğim üzere geçen dönem almış olduğum proje-3 ödevim buydu.

Dönem geçti gitti tabi artık , ben de projemi kendimce yaptım; şimdi onu burda anlatmak lazımdır.

Bu projede işlemlerimi daha hakim olduğum Matlab ile yaptım; algoritma oturduktan sonra da c# ile kodladım.

Matlab da webcam’den görüntü almak için ;
vid = videoinput('winvideo');
arkaplan = getsnapshot(vid);

satırları yeterli oldu.

Arka plan olarak alınan ilk resim bizim için sadece başlangıç referansını oluşturmakta; sonrasında bu resmi sürekli yenileyeceğiz.

Programımızın tamamı sonsuz bir döngü içerisinde çalışmaktadır. Döngü içerisinde webcam’den alınan görüntü bir önceki planla ( ilk aşamada bu arka plan oluyor) piksel bazında karşılaştırılarak, pikselin kırmızı bileşenin değerleri karşılaştırılıyor ve bizim belirlediğimiz bir eşiğin üzerinde fark varsa bunun bir hareketlilik olduğuna karar veriyoruz.
Burada bizim için problem olabilecek şey ise piksel düzeyinde karşılaştırma yaptığımız için en ufak titreşimler, kameranın kendi gürültüsü…  gibi etkenlerden kaynaklı farklılıklar aslında hareketlilik olmamasına karşın hareket olarak algılanacaktır; bunun önüne geçmek içinse bütün piksellerin kırmızı bileşenlerinin farklılığının toplamına bakarız: eğer bütün resimde ikinci eşik seviyemizin üzerinde bir değişim olmuşsa işte bu hareketliliktir deriz ve o resmi işleriz.

Resim işleme de piksel düzeyinde olmaktadır. Farklılığı tespit edilmiş piksellerin kırmızı bileşeni maksimum edilirken, diğer renk bileşenleri de belli oranda düşürülür (görülürlüğünü artırmak için). Böylece yeni plan üzerinde hareketli olan kısımlar kırmızıya boyanmış olarak saklanır ve bunu da picturebox’ a gönderdiğimizde o şekilde görürüz.
Dosya kaydetme kısmı ise Matlab da imwrite komutu ile sağlanır.

İşin C# tarafında biraz kolaya kaçtım ve Codeproject sitesinden edindiğim bir hazır projeyi geliştirdim; şöyleki hazır proje  webcam’den aldığı görüntüyü picturebox ‘ da yayınlıyordu. Ben onun yanına bir picturebox daha koydum ve Matlab ile hazırladığım algoritmaya uygun kodlarla resim işleyip, işlediğim resimi de 2. resim kutusunda yayınladım.

Diyeceksiniz ki hani senin projen güvenlik kamerasıydı nerde bunun güvenliği, sağladığı güvenlikten birtek kendinin haberi var başka kimseye bişey demio bu . Haklısınız projemde eksik kalan kısım 0 idi. Programın hareket algıladığında mail de atması gerekiyordu. Yetişmedi yahu naapayım :D . Eğer ilerde o kısmı da yazarsam eklerim buraya.

  • Bu Yazıyı sizden başka bugün 0 , toplamda 685 kişi okudu.
  • Benzer Yazılar

    9 yorum var: “Webcam’den Alınan Görüntüde Hareket Tespiti”
    1. Davut diyor ki:

      güzel çalışma devamını dörtgözümle bekliyorum, ayrıca bundan iyi birşeyler çıkabilir… DSP ye uygularsan falan :)
      bu arada açık pencerelerin gözüküyor orada kızlar klasörünü göremiyorum :D

    2. onur diyor ki:

      Güzel proje :)

      Fakat aklıma takılan bazı noktalar var. Özellikle hareket takibi için çerçeveden çerçeveye (frame by frame) px karşılaştırmasından daha mistik işlerin yapılması gerek sanırım ;) Bir de seçilen kanal mavi ya da yeşil değil de neden kırmızı merak ettim. Ayrıca eşik iyi belirlenmezse güvenlik kamerasını kapatan bir el de dikkatten kaçacaktır bu durumda. Benzer şekilde kameraya yakın objelerin belirlenmesi de güçleşecektir

    3. Metehan diyor ki:

      Onurcum öncelikle söylediklerinde haklısın. Yapılabilirdi dediklerin, diğer renklerin kontrolü de yapılabilirdi ya da bunun yerine alınan imgeler siyah beyaz a da çevirilebilirdi (ikisini de yaptım aslında) ama eklediğim her satır programımı biraz daha yavaşlattığı gibi amacım süper bir güvenlik kamerası yapmak değil sadece c# öğrenmekti ve kırmızı direk ışıklılık miktarının bilgisini verdiği için sadece kırmızı bileşenine baktım.
      Eşik seviyelerine gelince evet eşik seviyesi ile ilgili de sıkıntılar vardı : gündüz, güneş ışığı altında ve gece, lamba ışığı altında dahi aynı eşik seviyesini kullanamıyordum ( çalıştığım saate göre eşik seviyesini değiştiriyordum ). Bunun yerine resmin ortalama ışık miktarına göre sürekli değişen bir eşik seviyesi de belirlenebilirdi. Ama yine söylüyorum amacım c# öğrenmekti ( ha dersen ki “ulan iki de bir öğrenmek diyorsun : öğrendin mi bari ” ; o da ayrı bir konu)
      yakın nesneler için bişey aklıma gelmedi şuan :roll:

    4. mustafa diyor ki:

      afferim lan!
      cok guzel!
      ;)
      devam et boyle!

    5. süleyman diyor ki:

      keşke kodları da görebilseydik

    6. ufuk diyor ki:

      arkadaşlar proje yi bulamanadım nerden indirecem…

    7. Metehan diyor ki:

      bulamazsın çünkü koymadım kodlarını

    8. koray diyor ki:

      tebrik ederim çok güzel bir çalışma olmuş. Ben de görüntü işleme üzerine bitirme projesi yapıyorum. Yürüyen bantta kırık ve sağlam bardakları karşılaştırıyorum.iki resmi nasıl karşılaştıracağım konusunda yetersiz kaldım. bu konuda bana yardimci olabilirsen cok sevinirim.

    9. erhan nebil diyor ki:

      benim tezimde hareket takibiyle alakalı fakat matlab bilgim yeni yeni gelişiyor. bugün webcamden görüntü alırken 52488 elementten fazla görüntü değişkeni yayınlayamaz şeklinde bir hata verdi yani görüntü kaydedilmedi bunun sebebi ne olabilir?

    10.  
    Cevap verin


    Bu yazıyı okuyanlar şunları da okudu: