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.