Herhangi bir nedenden dolayı, alınan görüntüler dikey ya da yatay eksende bir miktar uzama/çekme şeklinde deformasyona uğramış ise, ölçüm gibi uygulamalar bazı istenmeyen sonuçlar verebilir.
Dikey/Yatay bozulmalar neden meydana gelir?
- Kameraların yatay ve dikey çözünürlüğü birbirinden farklı olabilir
- Hareketli bir cismin görüntüsü alındığı için, görüntüde uzama meydana gelmiş olabilir
- Çizgi taramalı (linescan) kameralarda, konveyör ya da dönme hızından çok daha yüksek hızda fotoğraf alınmış olabilir
Özetle, bir çok farklı sebepten dolayı görüntü olması gerekenden farklı çıkmış olabilir. İdealde, bu tür görüntüleri, kaynağında (kamera tarafı) düzeltmek ve yazılıma (görüntü işleme uygulaması) düzgün halini vermek gerekir. Ne yazık ki bu durum her zaman mümkün olmayabilir. Bu tür durumlarda, yazılım ile görüntüyü düzeltmek mümkündür.
Aşağıdaki kod, eliptik şekilde uzamış bir görüntünün, tekrar mükemmel daire şekline getirilmesini göstermektedir. (Eğer, üzerinde çalıştığımız nesnenin tam dairesel olduğunu biliyorsak, alınan görüntü eliptik bile olsa, bunu tam daire şekline getirme işlemi)
Soldaki şekli paint ile çizdim. Mükemmel daire yerine yatay eksende biraz genişleterek, elips haline getirdim. İstediğim, bir HALCON kodu ile, bu şekli tekrar mükemmel daire haline getirmek. Şeklin sadece yatay eksende bozulduğunu varsayıyoruz. Yani yüksekliği (boyu) sabit fakat yana doğru uzamış olan bu elipsi, boy ve en oranı korunacak şekilde ideal daireye geri dönüştürmek istiyoruz. Yazmamız gereken kısa HALCON kodu aşağıdaki gibi olabilir.
read_image (E, 'E.png') bin_threshold (E, Region) smallest_rectangle1(Region, Row1, Column1, Row2, Column2) W := Column2 - Column1 H := Row2 - Row1 R := 1.0 * W / H hom_mat2d_identity(HomMat2DIdentity) hom_mat2d_scale_local (HomMat2DIdentity, R, 1, HomMat2DScale) affine_trans_image (E, ImageAffinTrans, HomMat2DScale, 'constant', 'false') affine_trans_region(Region, RegionAffineTrans, HomMat2DScale, 'false')