Image Processing (Görüntü İşleme) tekniklerinin video dosyalarına uygulanması işlemi HALCON ile mümkündür. Video, her biri işlenebilir bir görüntü içeren ardışıl frame lerden meydana gelmektedir. Dolayısıyla, tek tek bu frame lere erişmek mümkün ise, istenen “video processing” HALCON komutları ile gerçekleştirilebilir.
Video işleme neden gerekli olabilir?
- Görüntü alınırken, işlemek için yeterli süre yoksa
- Tüm senaryonun kaydedilip, en sonunda karar verilmesi gerekiyorsa
- Tek tek Frame olarak görüntü alınamıyorsa
- Kamera çıktısı video formatında ise
- Real Time / (Canlı) işleme gerekiyorsa
vb. sebepler sayılabilir.
Sürpriz yumurtadan çıkan motosikletin, arka tekerleğini çıkartıp kamera altında fırıldak gibi döndürdüm. Tekerlek, kendi ekseni üzerinde kamera altında fırıldak gibi dönerken, görüntüyü avi formatında kaydettim. Tekerlek, yüzeyde hangi noktalardan geçti? gibi bir soru aklıma geldi. Tüm görüntü kaydetme işi bittikten sonra, bu avi formatındaki videoyu HALCON da işledim ve cevabı buldum 🙂
Fırıldak gibi dönen tekerleğe ait avi formatlı video (tıklanarak indirilebilir)
HALCON içinde video processing işlemi için, öncelikle video dosyasının open_frame_grabber ile açılması gerekir. Grabber adı olarak “DirectFile” en uygun seçenektir. CameraType değişkeni olarak avi dosyasının adı seçilmelidir. DirectFile için HALCON sürücü dosyasının versiyonu 5.1 olmalıdır. Eski versiyonlar bazı avi dosyalarını iyi tanımayabilir. (HALCON 11 ile 5.0 gelmektedir. MVTec web sitesinden indirilip, 5.1 e yükseltilmelidir)
Tekerleğe ait video içinden ayıklanmış tek bir frame
Tekerleğin geçtiği tüm yollarin deviation_n komutu ile çıkartılmış hali.
şimdi basit bir threshold ile, tekerleğin taradığı tüm alanları belirleyebiliriz.
ve ağırlıklı olarak tekerleğin taradığı alanları belirlemek için, distnace_transform komutundan yararlanabiliriz.
Bütün programın HALCON kodu
gName := 'C:/Users/Mustafa/Desktop/don4.avi' open_framegrabber ('DirectFile', 1, 1, 0, 0, 0, 0, 'default', 8, 'default', -1, 'false', gName, 'default', 0, -1, AcqHandle) gen_empty_obj(Images) for i := 1 to 132 by 1 grab_image(Image, AcqHandle) concat_obj(Images, Image, Images) endfor close_framegrabber (AcqHandle) channels_to_image (Images, MultiChannelImage) deviation_n (MultiChannelImage, ImageDeviation) threshold(ImageDeviation, Region, 28, 255) distance_transform (Region, DistanceImage, 'euclidean', 'true', 1280, 1024)