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.

 

Görüntü İşlemede Doku Analizi

Hortum üzerine sarılı kumaşın varlığının tesbiti

Görüntü işlemede son derece karmaşık ve hayli ileri derece algoritmalar gerektiren çoğu kontrol ve metodoloji, HALCON kullanarak basitçe çözülebilir. Bugün Kros Otomotivde, siyah EPDM boru üzerinde yine siyah renkli ipliklerle örülmek suretiyle oluşturulmuş dokunun var olup olmadığının kontrolünün yapılması gerekiyordu.

Görüntü işleme terminolojisinde, pattern matching, texture analysis, surface analysis vb. isimler altında ciddi çalışmalar olarak kendini gösteren bu konuya HALCON ile pratik bir yaklaşımda bulunalım.

Üzerinde çalıştığımız projeye ait orijinal görüntü solda yer almaktadır. Görüntüde, yeşil dörtgen ile belirtilmiş alanda kumaş örgünün varlığı, sarı dörtgen ile belirtilmiş alanda ise yokluğu araştırılacaktır.

Kumaşın varlığını test eden HALCON programı :

1. Resim Yüklenir, İlgilendiğimiz alan (ROI) oluşturulur ve resim bu ROI ye indirgenir

read_image (Image, 'D3.bmp')
*draw_rectangle2 (3600, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, 687, 406, -1.4, 128, 24)
reduce_domain (Image, Rectangle, ImageReduced)

indirgenmiş resimde (ImageReduced) histogram değerlerine baktığımızda soldaki gibi dağılmış olduğunu görürüz. İdeal olmayan bu dağılım, üzerinde çalıştığımız resmin fazla aydınlatılmış olmasından kaynaklanmaktadır. Fazla aydınlatma, kumaş dokusunu görebilmek açısından önemli. Aksi halde kumaş olan yerler siyaha yakın görüneceğinden, ayırdetmek daha da zorlaşacaktı.

Bu aşamada ilk yapılması gereken, belirli bir aralığa yığılmış olan histogramı 0-255 arası tüm aralığa yaymak. Bunun için HALCON’un scale_image_max fonksiyonunu kullanacağız.

2. İndirgenmiş Bölgenin belirginleştirilmesi

scale_image_max fonksiyonu uygulanmış bölge, solda görüldüğü gibi oldukça belirginleşti. Histogram 0-255 arasına düzgün olarak dağıldı. Aradaki kuantalanmış boşlukları gidermek ve yumuşak bir geçiş sağlamak için mean_image filtresi uygulanabilir. Bunu uygulamadan hemen önce emphasize komutu ile birlikte, resim iyice belirginleştirilir. Artık bin_threshold ile seçim kolaylıkla yapılabilir.

3. Seçim ve Karar

solda, bin_threshold sonrası resmin son hali görülüyor. Artık kumaşı oluşturan doku iyice ortaya çıktı. Bundan sonrası ortaya çıkan bu yapıyı değerlendirmeye kalıyor. Ben bu örnekte basit olması açısından closing_circle ile boşlukları doldurmayı denedim ve gayet sağlıklı sonuçlar aldım. (Bu noktadan sonra sayısız alternatif olabilir)

Tüm HALCON kodunu listeliyorum

read_image (Image, 'D3.bmp')
*draw_rectangle2 (3600, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, 687, 606, -1.4, 128, 24)
reduce_domain (Image, Rectangle, ImageReduced)
scale_image_max(ImageReduced, ImageScaleMax)
emphasize(ImageScaleMax, ImageEmphasize, 40, 40, 20)
mean_image(ImageEmphasize, ImageMean, 5, 5)
bin_threshold(ImageEmphasize, Region)
closing_circle(Region, RegionClosing, 5)
connection(RegionClosing, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 4000, 25000)
count_obj(SelectedRegions, Number)
if (Number = 1)
    write_string(3600, 'Örgü Belirlendi.')
else
    write_string(3600, 'Örgü Belirlenemedi!')
endif

3. satırda yer alan gen_rectangle2 fonksiyonunu

gen_rectangle2 (Rectangle, 687, 606, -1.4, 128, 24)

şeklinde değiştirirseniz, örgü olmayan bölümde örgünün yokluğunu düzgün olarak test edebildiğini göreceksiniz.

Programı çalıştırmak isteyenler için, örnek olarak kullandığım D3 isimli dosyayı ekliyorum. Aşağıdaki resimler arasından D3 isimli dosyayı seçerek kendi makinanıza kaydedebilirsiniz.

Görüldüğü gibi, sadece 17 satırlık basit bir HALCON kodu ile, son derece karmaşık sayılabilecek metodolojilere pratik bir yaklaşım getirmiş olduk.