C, C++, C#, VB, Delphi ile Profesyonel Görüntü İşlemeye Giriş – III

Yazı Dizimizin 3. bölümü ile tekrar merhaba;

HALCON bölüm II de anlatıldığı şekilde indirildi ise, bilgisayarınızda aşağıdaki resimde gösterdiğim gibi, 2 dosya olmalıdır. HALCON programı /halcon-11.0.1-windows.exe) ve örneklerin çalışması için gerekli olan resimler (halcon-11.0.1-images-windows.exe).

Şimdi halcon-11.0.1-windows.exe dosyasını çalıştırarak, HALCON u yüklemeye başlayabiliriz. Standart bir yükleme arayüzüne sahip HACON 11, sorunsuzca yüklenecektir. HALCON 11 yüklenirken, Full yüklemeyi seçebilirsiniz.

İleri dediğinizde, resimleri ayrı olarak yüklemeniz gerektiğini hatırlatan bir diyalog kutusu gösterecektir.

resimler, örneklerin çalışması için gereklidir. Daha önceden indirdiğiniz halcon-11.0.1-images-windows.exe programını, kurulum bitince çalıştırabilirsiniz.

aşağıdaki ekran geldiğinde, (dongle çin driver) hiçbir kutuya işaret koymayın.

 

Tüm kurulum bittikten sonra, resimleri de yükleyin. (halcon-11.0.1-images-windows.exe programını kurun) Bilgisayarınızda, C:\Program Files\MVTec\HALCON 11 klasörünün görünümü aşağıdaki gibi olmalıdır.

 

Şimdi, programın çalışması için lisansa ihtiyacınız olacaktır. Bizden temin edeceğiniz deneme lisansını (license_eval_halcon11_2013_07.dat gibi bir isimde, 670 byte uzunluğunda text dosya) buradaki license klasörüne kopyalayın. Artık HALCON çalışmaya hazırdır. Başlat menüsü görünümü aşağıdaki resimdeki gibi olacaktır.

 

Şimdi artık HALCON ile çalışmaya hazırız. Buradaki HDevelop isimli menü öğesini çalıştıracağız. HDevelop, HALCON geliştirme ortamıdır (IDE). Eğer lisans hatası yok ise, çalıştırdığımızda direk HDevelop IDE si karşımıza gelir.

Eğer, dil türkçe olarak gelmiş ve ingilizce ile çalışmak istiyorsanız, Düzenle menüsü –> Tercihler –> Dil sekmesinden ingilizceyi seçebilirsiniz. HDevelopu yeniden başlattığınızda bu yeni seçtiğiniz dil tercihi geçerli olacaktır.

HDevelop 4 ana pencereden oluşur

1. Graphics Window (Grafik Penceresi) Burada üzerinde çalışacağımız resim gösterilir. Büyültme, küçültme vb. araçlar ile.

2. Operator Window (Operatör Penceresi): Her bir görüntü işleme operatörünü ve parametrelerini gösteren penceredir.

3. Program window (Kod Penceresi) : program yazdığımız, HALCON kodu yazdığımız kod penceresidir.

4. Variable Window (Değişkenler penceresi) : Program çalışırken, her bir değişkeni görebileceğimiz penceredir.

Bu pencerelerin genelde hepsi sık sık kullanılır. Yanlışlıkla biri kapatılmışsa, Ana menüdeki Pencere menüsünden, kapatılmış olan seçilerek yeniden açılır. Artık buraya kadar gelinmiş ise, direk görüntü işleme uygulamaları geliştirmeye başlayabiliriz.

Program Editörde, sağ üstteki butonlardan 2. si, Use Full Text Editör olacak şekilde işaretli (yeşil çek) olsun. Bu durumda, tıpkı diğer programlama dillerinde aşina olduğumuz gibi, serbest olarak alt alta kod yazabiliriz. Aksi halde, diyalog penceresi yardımıyla kod yazılır. Başlangıçta, diyalog penceresi üzerinden kod yazmak daha mantıklı olsa da, ileri aşamalarda full text editör daha kullanışlı gelecektir.

Örneklerin Çalıştığını Teyit Etme

Ctrl-E tuşu ile, ya da araç çubuğundaki Browse Examples butonu ile, ya da Dosya menüsündeki Browse HDevelop Program Examples menü öğesi seçilerek, karşınıza aşağıdaki pencerenin çıkmasını sağlayın.

Yüzlerce HALCON örneğini inceleyebilirsiniz. Sağ taraftan herhangi birini seçip, Open butnuna bastığınızda, örnek HDevelop ekranında açılmış olmalıdır.

F5 tuşuna basarak, çalıştırabilirsiniz.

stop() komutunun olduğu yerde program sizden çalışabilmek için yeniden F5 tuşuna basmanızı bekler. Birkaç örneği incelemeniz, HALCON hakkında size fikir verecektir. Program penceresindeki kodlara genel bir göz atarak, HALCON kodlamasının neye benzediği konusunda fikir sahibi olabilirsiniz. Kodlar, gözünüzü korkutmasın. Zamanla aşina olacaksınız. Yapacağımız örnekler ile, kısa sürede siz de HALCON kodlamasına hakim olacaksınız. Örnekleri incelemek, çok iyi fikir verecektir. Bu yüzden sık sık örnekleri incelemenizi tavsiye ederim. Hemen hemen her konuda, her sektöre, her fikre uyan bir ya da daha çok örnek mevcuttur. Sırf bu örnekleri incelemek bile, size HALCON hakkında güçlü bir fikir verecektir. Tabi, biz sıfırdan başlayarak, HALCON kodu yazmayı, hemen arkasından bunu C#, VB gibi dillere export etmeyi ve kendi uygulamamızı geliştirmeyi adım adım göstereceğiz.

Eğer buaraya kadar geldiyseniz, bir sonraki makalede, kendi ilk özgün HALCON kodumuzu geliştireceğiz. Bir sorun yaşamışsanız, buradan bildirebilirsiniz.

Bir sonraki bölüme geçmek için tıklayınız…

C, C++, C#, VB, Delphi ile Profesyonel Görüntü İşlemeye Giriş – II

Yazı dizimizin, yeni bölümünde tekrar merhaba.

İlk bölümde, üzerine basarak vurguladığımız, profesyonel PC tabanlı görüntü işleme uygulaması oluşturabilmek için, öncelikle profesyonel bir kütüphane kullanacağız. Bu makaleler dizisinde, bu kütüphanenin yüklenmesinden, kurulumuna, uygulama geliştirmeden, exe (çalışan kod üretmeye) kadar her şeyi detaylı olarak uzun uzun anlatılacaktır.

Şimdi bir yazılımcı olarak, neden kütüphane? diye bir soru geliyor insanın aklına. Hiç ticari (profesyonel) bir kütüphane kullanmasak, her şeyiyle kendimiz geliştirsek daha iyi olmaz mı? Bunun en kısa yanıtı : Olmaz. Bir veritabanı uygulaması geliştireceğimiz zaman, SQL, Oracle, MySQL, Acces vb. bir ürün (onlar da bir kütüphane / framework nihayetinde) kullanmamız gerektiğini sorgulamıyorsak, görüntü işleme uygulamamızda da bir kütüphane kullanmamız gerektiğini sorgulamamalıyız.

Ancak belki aşağıdaki durumlarda ticari bir kütüphane yerine kendi kütüphanemizi geliştirmemiz mantıklı olabilir;

  • ArGe desteği alan bir şirket vardır ve bu destek yazılacak bu yeni kütüphane için verilmiştir.
  • Üniversitede yüksek lisans / doktora v.b. bir çalışma yapılıyordur ve yapılacak çalışmanın özgün olması istenmektedir.
  • Ticari bir ürün gerekmiyordur. Yavaş / eksik vb. olsa bile, amaç kendi yaptığımız iy/kötü basit bir görüntü işleme uygulamasıdır ve bu yüzden detaylı bir kütüphane kullanmaya/öğrenmeye gerek duyulmamaktadır.
  • Geliştirilecek ürün binlerce adet satılacaktır ve binlerce defa başka kütüphanelere lisans ücreti ödenmek istenmemektedir.
  • Geliştirilecek ürün çerçevesi çok net belirlenmiş tek bir üründür (Plaka Tanıma / Yüz tanıma vb.) Bu durumda bir kütüphanenin yüzde 1 lik fonksiyonlarını kullanıp para ödemek yerine, hiç kullanmamak daha mantıklı olabilir.
  • Askeri ya da çok çok gizli bir proje vardır ve siyah giysili adamlar başka bir kütüphane kullanılmasına izin vermemektedirler…

Ülkemizde bu yolu izleyen (kendi görüntü işleme kütüphanesini geliştiren), bir (ençok iki) elin parmakları kadar şirket vardır. Bunlar genelde üniversite bünyelerinde ya da teknoparklarda kurulmuşlardır. Bir şekilde teşviklerle (personel ya da devletin sunduğu proje destekleri (TEYDEB, Tübitak, Kosgeb, Avrupa Birliği vb.)) ayakta kalmaktadırlar.

Eğer yukarıdaki maddelerden herhangi biri size uyuyorsa, ya da benim bilmediğim/saymadığım herhangi bir sebepten dolayı kendi görüntü işlem kütüphanenizi geliştirmek/kullanmak konusunda ısrarlı iseniz, bu yazı dizisi artık size hitap etmeyecektir. (Bir mail ile haklı gerekçelerinizi bana bildirirseniz, burada memnuniyetle paylaşmaya hazırım)

Bu arada, görüntü işleme kütüphanesi yazmaya hevesli olan arkadaşlara bu işin çok ta kolay olmadığını hatırlatmak isterim. Mesela sadece kenar bulma üzerine, 20 ye yakın yaygın algoritma vardır (canny, lanser, deriche, shen, sobel …) ve bunların tek birini bile implemente etmek pek kolay bir iş değildir. Örneğin bu PDF, canny edge detection algoritmasının mantığını anlatmaktadır.

Diğer yandan, her bir görüntü kaynağı (kamera, fotoğraf makinesi vb.) kendi SDK sı ile gelmektedir. USB2, USB3, Gigabit, CameraLink, GenICam vb. çeşitli yöntemler ile bilgisayara bağlanabilen bu cihazlardan görüntü almak, bu cihazlara hükmedebilmek (pozlama, kazanç, AOI işlemleri vb.) için, işi gücü bırakıp her bir ayrı üreticinin kamera/fotoğraf makinesi detaylarını öğrenebilmek gerekmektedir ki, yüzlerce marka/model ve yazılım sürümleri arasında kaybolmadan bunları yapabilmek te pek kolay değildir)

Özetle, (bana inanın dostlar), profesyonel bir görüntü işleme uygulaması geliştirmek istiyorsanız, en iyi yol, güçlü bir ticari kütüphane kullanmaktır.

Bu durumda soru şuna indirgeniyor. Peki hangi kütüphane? Önce cevabı vereyim, sonra sebeplerini anlatayım. cevap : HALCON.

Neden HALCON?

Burada, pazarlamacı/reklamcı ağzı ile ifadeleri bir tarafa bırakıp, gerçek dünyadan bir örnek vermek istiyorum.

1960 lı yıllardan beri, kendi görüntü işleme teknolojileri üzerine geliştirmeler yapan NASA, 2010 yılından itibaren HALCON kullanmaya karar vermiştir. Robotik görme ve 3D vision dediğimiz teknolojilerde HALCON kullanan R2 robotunu uzaya göndermiştir.

Gizliliği ve üst düzey teknolojisi ile bilinen NASA gibi bir kurumun, kendi görüntü işleme tekniklerini bir yana bırakıp, Alman malı bir görüntü işleme kütüphanesi kullanmaya karar vermesi yeterince etkileyici bir örnek. Buna rağmen, biz yine de birkaç makul gerekçe sunalım.

  • HALCON halihazırda var olan en güçlü ve en hızlı görüntü işleme kütüphanesidir.
  • Çok gelişmiş programlama desteği sunar. (.NET, Linux, MacOS..)
  • Kendi geliştirme ortamı vardır. (Sadece görsel bir tool değil, kendi programlama dili ile kod yazabildiğiniz Visual Studio benzeri bir IDE sunar)
  • Sizin adınıza C#, VB, Delphi … için kod üretir.
  • Gerçek bir exe üretirsiniz. (Interpreter / yorumlayıcı vs. değil)
  • Üniversitelerde yaygın olarak kullanılmaktadır (standart hale gelmiştir)

gibi maddeler ilk aklıma gelenler (Tekrar ediyorum, pazarlamacı/reklamcı ifadelere yer vermek istemiyorum. Yapılan Benchmark testlerinde HALCON açık ara önde bir kütüphanedir fakat uzun uzun bunlara yer verip, operatör sayısı, işlemci kullanma yüzdesi, hızı vb. vb. şimdilik gereksiz)

Peki HALCON nasıl tedarik edilir, nasıl yüklenir, maliyeti nedir?

HALCON, aşağı yukarı 500 MB büyüklüğünde bir SDK dır. bir o kadar da örnek resimleri vardır. Ortalama olarak 1 GB civarı bir üründür.

Bu ürünü öncelikle kendi web sitesinden ücretsiz olarak indirebilirsiniz.

İndirme esnasında, register (kayıt) olmanızı isteyecektir. (Korkmadan register olabilirsiniz. Spam mail bombardımanına, gerekli gereksiz hatırlatmalara vb. maruz kalmazsınız.) Register olurken irtibatta olduğunuz firma v.b. bir yer varsa oraya MAVIS yazmanız tavsiye olunur. Girdiğiniz bilgiler, belirttiğiniz firmaya iletilecek ve eğer direk bize gelirse hızlıca size lisans verebiliriz. Aksi halde süreç biraz uzayabilir

Alternatif olarak, 2GB bir flash disk ile ofisimize gelip beni bulursanız size direk kopyalayıp / geçici lisanslayıp verebilirim.

webden yüklediyseniz, hem programı (32 ya da 64 bit) hem de resimleri ayrı ayrı yüklemeniz gerekmektedir.

Yükleme işlemi bittikten sonra, programın çalışabilmesi için sizden lisans isteyecektir. Bana ulaşarak (info@mavis.com.tr) geçici lisans alabilirsiniz.

HALCON 2 tip versiyona sahiptir.

Runtime ve Development. Runtime versiyonu son kullanıcının makinasına yüklenecek kısımdır. Development ise, geliştirme yapılacak bilgisayarda (programcının bilgisayarında) çalışacak olan versiyondur.

Lisanslama maliyeti, Runtime için kullanılacak modüllere göre değişim gösterebilmektedir. (Net rakamlar için şirketimizle irtibata geçiniz. Ben teknik bir personel olduğum için, çoğu kez lisans maliyetleri ile ilgilenmem.)

Development lisans maliyeti haliyle daha yüksektir. (Üniversiteler için gayet ciddi indirimler uygulanmaktadır.)

Şimdi, bir programcı olarak neye ihtiyacınız var. Herşeyden önce, tüm sistemi denemek, çalıştırmak için deneme lisansı ile, eksiksiz, tam fonksiyonalite ile çalışabilirsiniz. Ürününüz satılma noktasına geldiyse, o zaman net lisans rakamlarını öğrenirsiniz.

Görüntü işleme uygulamaları, çok ucuz uygulamalar değildir. Bence HALCON lisans maliyetleri, kesinlikle ürkütücü değildir. Yine de tekrar belirtmek isterim, HALCON ücretsiz bir ürün değildir. Böyle bir beklenti içinde olanlar, yazı dizisinin devamını beklemeden burada ayrılabilirler.

Programcı, kendi makinasına HALCON development ürününü kurar ve görüntü işleme dünyasına adımını atar.

Makalemizin 3. sayısına ulaşmak için tıklayınız…

Yakında Görüşmek Üzere.

 

C, C++, C#, VB, Delphi ile Profesyonel Görüntü İşlemeye Giriş

Görüntü işleme gün geçtikçe daha çok uygulama alani bulmaktadır. Bunun bir sonucu olarak, profesyonel veya amatör görüntü işlemeye ilgi duyan insan sayısı da artmaktadır. Bir yerlerden başlamak isteyenler için, boş vakitlerimde bu makaleler dizisini yazmaya karar verdim.

Görüntü işleme uygulamalarını, 2 ana başlık altında toplayabiliriz.

  1. Akıllı Kameralar (Smart Camera) ile yapılan görüntü işleme uygulamaları
  2. PC tabanlı görüntü işleme uygulamaları.

Akıllı kameralar ile yapılan uygulamalar, daha çok PLC programlama mantığına yakındır. Kamera üzerindeki işlemcide gömülü (embedded) bir yazılım ve çeşitli giriş – çıkış arabirimleri mevcuttur. Programcı, PLC programlar gibi kamerayı programlar ve programlanmış kamera bir nevi sensör gibi çalışarak, önceden belirlenmiş görevleri gerçekleştir. Daha çok önde gelen sensör firmaları tarafından üretilirler. (Festo, Cognex, Keyence, Sick, Omron, Banner … ilk aklıma gelen yaygın bilinen akıllı kamera / smart camera markalardır) Basit uygulamalarda, pratikliğinden dolayı tercih edilebilir olsalar da bu makalelerin konusu olmayacaklardır.

Biz burada, PC tabanlı, C, C++, C# veya VB ile profesyonel görüntü işleme uygulamaları geliştirmeye yönelik bilgiler vereceğiz. Tek başına çalışabilen (exe), istediğiniz yere kurulum yapabileceğiniz (dağıtılabilir) kendi yazılım kodunuz ile geliştirebileceğiniz görüntü işleme uygulamaları için yol göstereceğiz. Amaç, herhangi bir kamera kullanarak, o kameranın nitelikleri ile (bir yere kadar) bir şeyler yapmak değil, tamamen bağımsız çalışabilen kendi çözümünüzü geliştirebilmeniz olacaktır. Üstelik çoğu kez, akıllı kameralar ile yapılabilenden, çok daha fazlasını hedefleyeceğiz.

Profesyonel görüntü işleme uygulamaları, hemen her koşulda çalışabilecek, son derece hızlı ve tutarlı, belirli bir müşterisi olan (ya da paraya çevirilebilecek bir değer katan) uygulamalardır. İnternette, C# ya da VB ile görüntü işleme üzerine çeşitli fonksiyonların, bitmap işlemlerinin vb. anlatıldığı pek çok makale vardır. Bunlar, ya öğrenciler ya da konuya meraklı yazılım geliştiricileri içindir. Burada anlatılacak olanlar, bu gibi fonksiyonlar değildir. (Dolayısıyla bitirme projesi, dönem ödevi vb. bir amaçla bu makaleden yararlanmayı umuyorsanız, muhtemelen işinize yaramayacaktır.) Örneğin bir resimdeki dairenin alanını, iç içe for döngüleri ile vs. bulmaya kalkışmayacağız. Hemen her sektör için, endüstriyel ve profesyonel görüntü işleme uygulamaları geliştirebilmeyi anlatacağız.

Bu makaleler kimin için uygundur

  • Kendisine ait bir görüntü işleme uygulaması (exe) yapmak isteyenler
  • Akıllı kameralar ile yapılandan çok daha fazlasını yapmak isteyenler
  • İşyerinde / fabrikasında belirli işleri kendi geliştireceği sistemler ile kontrol etmek isteyenler
  • Yazılım bilgisi / tecrübesi olup, görüntü işleme konusunda yeni olanlar
  • Halihazırda geliştirdiği cihaz / elektronik aygıt vb. için akıllı görme yeteneği eklemek isteyenler vb.

Neye gereksinimiz var?

Neredeyse sadece bir PC. Muhtemelen Visual Studio (geliştirme ortamınıza göre) ya da en azından Visual Studio Express edition kurulu olmalıdır. Teknik bilgi olarak, temel yazılım bilgisi yeterlidir. (örneğin bir telefon defteri uygulaması yapabilecek düzeyde programlama bilginiz varsa, bu bilgi yeterlidir. Aksi halde, öncelikle programlama bilgisi edinmelisiniz.) Sanılanın aksine, herhangi bir kameraya gereksiniminiz yoktur. (İlerleyen makalelerde, kamera tavsiyesinde yeri geldikçe bulunacağım) Başlangıç için gerek yoktur ya da webcam bile olur.

Ne Tür Uygulamalar Yapabiliriz?

Hemen hemen her tür. Robotik, OCR, Ölçüm, Var-Yok, Bulma, Eşleştirme… Aklınıza ne geliyorsa.

Geliştireceğim Uygulama Nerelerde Çalışır?

PC ortamında. Genellikle Windows yüklü tüm PC lerde.

İleride, yazı dizisine devam edeceğim. Görüşleriniz/istekleriniz için yorum yapabilir ya da info@mavis.com.tr ye mail atabilirsiniz.

Yazı dizisinin 2. bölümü için tıklayınız…

Mosaicking yöntemi

Bir parçanın birden fazla kamera ile çekilmiş görüntülerindeki ortak noktaların bulunarak birleştirilmesidir. Yöntemin daha sağlıklı çalışması için kameraların birbirleri ile kalibre edilmesi gereklidir. Genellikle çözünürlüğün(hassasiyetlerin) arttırılması için kullanılır.

Örneğin: Bir cetvelin 2 farklı kamera ile görüntüsünü alalım. Bu görüntüleri alırken dikkat etmemiz gereken iki görüntü arasında benzer kısımların bulunması gerekliliğidir.

 

 

 

 

Mosaicking yöntemiyle birleştirilen görüntü :

 

 

 

 

 

 

HALCON Kodu :

ImgPath := 'deneme/'
ImgName := '5_'
Times := []
Colors := ['red','coral','yellow','lime green']
read_image (Images, ImgPath + ImgName + ['sag','sol'])
* The internal camera parameters of the used camera to eliminate radial distortions)
CamParam := [0.0049315,-649.238,5.32872e-006,5.3e-006,512.613,668.631,1280,1024]
change_radial_distortion_cam_par ('adaptive', CamParam, 0, CamParOut)
change_radial_distortion_image (Images, Images, Images, CamParam, CamParOut)
tile_images_offset (Images, TiledImage, [0,0], [0,1280], [-1,-1], [-1,-1], [-1,-1], [-1,-1], 2560, 1024)
From := 1
To := 2
select_obj (Images, ImageF, From)
select_obj (Images, ImageT, To)
NumLevels:=1
* Calculate the projection between the two images
proj_match_points_ransac_pyramid (ImageF, ImageT, NumLevels, RowFAll, ColFAll, RowTAll, ColTAll, ProjMatrix, Points1, Points2)
* Generate the mosaic image
gen_projective_mosaic (Images, MosaicImage, 1, From, To, ProjMatrix, [2,1], 'false',MosaicMatrices2D)

Plastik Üzerinde Klips Kontrolü

Aracın iç dizaynında kullanılmak üzere üretilen parçaların kontrolü yapılmak isteniyor. Bu siyah parçalar üzerinde yine siyah renkli klipsler takılıyor. Ancak bu klipslerin takılmaması problemine karşı, kameralı kontrol sistemi kurulacak.

Siyah üzerinde siyah kontrolü zor olsa da, parçaya göre uygun bir kabin, aydınlatma ve tek kameralı bir sistem tasarladık. Parçanın birden fazla modeli var ve kullanıcı tarafından kontrolü yapılacak ürün program üzerinden seçtiriliyor.

Ardından konulan parça üzerindeki klipslerin kontrolü yapılıyor. Yazılım, parçanın yönü farklı gelse bile doğru çalışacak edecek şekilde ayarlandı. Farklı ürünler geldiğinde ise tabi ki uyarı veriliyor.

Parça kontrolleri “NOK” ise program kendini kilitliyor ve “bakım” şifresini bilen birinin gelip programı şifre ile açması gerekiyor.

Aşağıdan ekran görüntülerini görebilirsiniz..

Klips kontrolü

Klips kontrolü - hatalı parça

Klips kontrolü - hatalı parça

HALCON ile Video Processing

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)

Plastik parçalar üzerindeki yüzüklerin kontrolü

Otomotiv sektöründe hizmet veren bir firma için yüzük kontrol sistemini devreye aldık. Sistemde 3 farklı ürün bulunmaktadır. Her bir üründe yüzüğün takılacağı yerler ve renkler farklılık göstermektedir. Bu ürünler modellenerek kontrol edilmesi istenen ürünlerin doğru veya hatalı olarak ayrıştırılması sağlanmıştır.

Operatör tarafından kullanıcı girişi yapılabilen, kontrol edilecek modelin listeden seçilebileceği ve sistemin çalıştırılması veya durdurulması gibi işlemleri içeren bir arayüz tasarlanmıştır.

Sistem, konveyör sistemi üzerinde bölmelere ayrılmış bir bandın ilerlerken mekanik sensör yardımıyla adım adım durdurulması, fotoğraf çekilmesi, bu fotoğrafın bilgisayar üzerindeki yazılım ile işlenerek ürünlerin doğru veya hatalı olarak tespit edilmesi, bu bilgilerin ekranda gösterilmesi ve farklı kovalara atılması işlemlerinden oluşmaktadır.

Kontrol edilecek ürünler farklı pozisyonlarda geleceği için bu ürünlerin ve yüzüklerin aranacağı bölgelerin modellenen ürünlere göre döndürülmesi gerekmektedir. Bu işlemi sağlayan HALCON kodu:

// Kontrol edilecek ürünün fotoğrafının okunması
read_image (Image, 'C:/Projects/M1_175740.bmp')
// Matching(Eşleştirme) için kullanılacak modelin okunması
read_shape_model ('C:/Projects/P1-N.shm', ModelId)
//  Matching(Eşleştirme) işlemi
find_shape_model (Image, ModelId, rad(0), rad(360), 0.5, 1, 0.5,['least_squares','max_deformation 2'], [7,1],0.75,ModelRow, ModelColumn, ModelAngle,ModelScore)
    if (ModelScore > 0.75)
        get_shape_model_contours (ModelContours, ModelId, 1)
        hom_mat2d_identity (HomMat)
        hom_mat2d_rotate (HomMat, ModelAngle, 0, 0, HomMat)
        hom_mat2d_translate (HomMat, ModelRow, ModelColumn, HomMat)
        affine_trans_contour_xld (ModelContours, TransContours, HomMat)
        gen_rectangle1 (ModelRegion, 396.643, 361.944, 816.643, 1134.52)
        area_center (ModelRegion, ModelRegionArea, RectificationRow, RectificationCol)
        hom_mat2d_identity (Rectification)
        hom_mat2d_translate (Rectification, RectificationRow-ModelRow, RectificationCol-ModelColumn, Rectification)
        // Ürünün döndürülmesi
        hom_mat2d_rotate (Rectification, -ModelAngle, RectificationRow, RectificationCol,Rectification)
        affine_trans_image (Image, RectifiedImage, Rectification, 'constant', 'false')
    endif

Doğru ve hatalı olarak tespit edilen ürünlerin ekran görüntüleri :

DXF (DWG) çizimlerinin resim üzerine oturtulması

CAD Destekli Görüntü İşleme

Cad programlarından (Autocad, Catia, Solidworks…) elde edilen çizim bilgilerilerinin alınan kamera görüntüsü ile eşleştirilmesi ve
bu eşleşim sonucu bazı işlemlere tabi tutulması cad destekli görüntü işleme olarak tanımlanabilir.

Cad Destekli görüntü işleme ile genelde aşağıdaki projeler yapılmaktadır

  • Cad görüntüsü ile belirtilen parçanın bulunması
  • Cad görüntüsü işe üretilen parça arasındaki farklılıkların bulunması
  • Cad görüntüsü bilinen parça ile üretilen parçanın ölçümlerinin yapılması
  • 3D eşleştirme (Cad verisi bilinen parçayı bulma) vb..

Cad verisini okumak ve yazmak için,  HALCON güçlü bir kütüphane desteği sunmaktadır. HALCON Cad dosyası içinde geçen POLYLINE, LWPOLYLINE, LINE, POINT, CIRCLE, ARC, ELLIPSE, SPLINE, BLOCK, INSERT gibi komutları okuyabilmekte, işleyebilmekte ve yazabilmektedir.

Aşağıdaki örnek, birden fala kamera ile alınan görüntülerin birleştirilip, pastal bilgilerini içeren CAD (DWG) dosyasının bu görüntünün üzerine yerleştirilmesi ve kumaştaki bozuk yerlerin (kirli, hatalı vb.) belirlenip, pastal bilgisinde bu yerlere gelen parçaların  işaretlenmesi amacıyla geliştirilmiş bir HALCON kodudur.

yukarıdaki resim, bir masa üzerine yerleştirilmiş kumaştan alınmış görüntüdür. Görüntü, 2×3 adet kamera kullanılarak alınmış ve morphology (mosaicking) kullanılarak birleştirilmiş ve tek bir görüntü olarak elde edilmiştir.

DWG(DXF) dosyasının bir kısmının görüntüsü ise

yukarıdaki gibidir. (DXF dosyası çok daha büyük olduğu için sadece bir kısmının önüzlemesini verdim)

HALCON programında yapılması gereken

  1. 2×3 adet matris şeklinde yerleştirilmiş kameralardan alınan görüntünün birleştirilip tek bir görüntü elde edilmesi (mosaicking dediğimiz bu işlem ileride bir makale konusu olabileceğinden burada detaya girilmeyecektir)
  2. Alınan kumaş görüntüsünün döndürülüp yatay eksene oturtulması (kumaş hafif eğimli/yan yerleştirilmiş olabilir
  3. DXF (Cad) dosyasındaki pastal bilgilerinin kumaş üzerine uyacak şekilde yerleştirilmesi
  4. Kumaştaki problemli yerlerin tespit edilmesi
  5. Kumaşta problemli yerlere denk gelen pastalların işaretlenmesi.

Programın çalışması

yukarıdaki gibi, yatay eksende 2 sıra, düşey eksende 3 sıra halinde yerleştirilmiş kameralardan alınmış görüntüler birleştirilir.

Kumaş eğik yerleştirilmiş dahi olsa, yatay eksene sıfır derece açı ile döndürülür.

CAD(DXF) dosyası okunur ve pastallar seçilir. (Cad dosyası gerekenden fazla veri içermektedir. etiketler, bilgiler, işaretler, çizgiler vb. Bunlar arasından sadece pastal bilgileri içerenler seçilir)

Sonunda, Cad dosyasındaki pastal bilgileri, kumaşa tam uyacak şekilde fit edilir. Kumaş üzerindeki hatalı yerler işaretlenir ve bunların hangi pastallara karşılık geldiği belirlenir.

Bu noktadan sonra kesim işlemi yapılacaksa, hangi parçaların hatalı olduğu bilinir ve otomatik olarak ayırt edilir.

Sistem, akıllı kesim otomasyonu gibi projelerde kullanılabilir.

Projede kullanılan resimler ve çalışan HALCON uygulaması için, bizimle (info@mavis.com.tr) iletişime geçebilirsiniz.

 

Kameralı Otomatik Halı Kesme Makinası

Günümüz halı üretim teknoloji gereği sürekli form şeklinde üretilen halıların hassas olarak kesilip halı haline getirilmesi gerekmektedir. Mavis olarak gerçekleştirdiğimiz kameralı halı kesme otomasyonunu, dünyanın en büyük halı üreticisi firmada devreye aldık.

Kameralar, dikey olarak yukarıdan aşağıya doğru kayan halıların arasındaki kesilecek rotayı belirler ve mikroişlemciye gönderir. Mikroişlemci her bir kesici kafayı sağa sola hareket ettirmek suretiyle rotayı izler.

Sonuç olarak sürekli form şeklindeki halılar, dikey olarak kesilmiş olur.

Sistemin çalışırhaldeki videosu :

Mavis Dikey Halı Kesme Makinası

Sistemin kameralı kontrol işlemleri Mavis tarafından yapılmıştır. Halı makinası, Anmak firması tarafından geliştirilmiştir.