İki Boyutlu Resim Üzerinde Desen Simülasyon Programı
Özet
Son yıllarda online ürün alışverişlerinde ciddi ölçüde artışlar yaşanmaktadır. Bu alışverişte tüketiciler, alacakları
tekstil ürününün farklı desenli kumaşlarında nasıl görüneceğini gerçeğe yakın bir şekilde görmek isteyeceklerdir.
Bu çalışmada, 2 boyutlu bir desenin, çekilen 2 boyutlu bir fotoğraftaki model üzerinde kıvrımlı ve gölgeli
bölgelerdeki farklılaşmaları kaybetmeyecek şekilde simülasyonu sağlanmıştır. Model fotoğrafı üstündeki
tüm pikseller yorumlanarak gölge tonlamaları ve kıvrımlar gerçeğe uygun bir şekilde simüle edilir.
Anahtar Kelimeler: simülasyon, konfeksiyon, programlama, 2 boyutlu resim
1. GİRİŞ
Popülerliği giderek artan e-ticaret sistemlerinde, tüketiciler alacakları ürünün farklı türlerini ve farklı
desenlerdeki görünümlerini görmek istemektedirler. Ayrıca, üreticiler de aynı şekilde ürünün üretim
aşaması öncesinde o ürünün gerçekte neye benzeyeceğini, üretilecek kumaşın ve o kumaştaki desenin
ilgili ürüne uyup uymadığını görmek istemektedirler. Bu nedenle tüketicilerin ürünü satın almadan önce,
üretici firmaların ise, üretimi gerçekleştirmeden önce ürünün simülasyonunu görmeleri büyük bir avantaj
sağlayacaktır.
Tasarımcılar, üretici firmalar için bu simülasyonu resim işleme programları yardımıyla yapmaya
çalışmaktadırlar. Fakat bu işlem hem uzun zaman almaktadır, hem de bu iş için ayrıca bir kişinin
çalışması gerekmektedir. Ayrıca, bu şekilde yapılan üründe gölgeler ve kıvrımlar malesef tam anlamıyla
simüle edilememektedir. Üreticiler için bu şekilde bir çözüm varken, tüketiciler için ise bir çözüm
bulunmamaktadır. Tüketiciler kısa sürede pek çok ürün denemek isteyeceklerdir. Çalışmamız kısa sürede
bir ürünün çok çeşitli şekillerini görmeyi sağlamaktadır. Ayrıca farklı çalışma kolları için de
uyarlanabilmektedir. Örneğin; elbise gibi konfeksiyon sektörlerinde, koltuk gibi mobilya sektöründe,
perde gibi ev tekstili sektöründe vb. bir çok sektör için kullanılabilir.
2. MODELİN OLUŞTURULMASI
İşlenecek model resminin ve desenin RGB color modunda olması gerekmektedir. Ayrıca model resminde
işlenecek modelin, açık renkli -tercihen beyaz- olması gerekmektedir. Bunun nedeni ise, desen
piksellerinin model pikselleriyle girişim yaptırılmasıdır. Örneğin; sarı elbiseli bir model tercih ettiğimizde
desendeki beyaz kısımlar bu modele giydirilmek istendiğinde, beyaz olan yerlerin elbise rengi olan sarı
ile beyaz arasında bir renk olduğu görülecektir. Dolayısıyla model fotoğrafında giydirilecek bölgenin
beyaz renkte olması tercih edilmelidir. Açık renk kıyafetli bir modelin giydirilecek bölgesi resim editör
programlarıyla siyah-beyaz hale getirilebilir. Bu sayede yine renk tonlamalarında çok fazla bir kayıp
yaşanmayacaktır.
Simülasyon programımızda ürünün fotoğrafı piksel piksel okunarak yorumlanmaktadır. Bu yorumu
fotoğrafın RGB (Red-Green-Blue) kanallarının değerlerine bakarak çıkarmaktayız. Bu RGB değerleri ne
kadar koyuysa o kadar fazla kıvrım oluşmuş demektir. Fotoğraftaki Red değeri ile x ekseni doğrultusuna
(yatay) desenin pikselleri koyu yere doğru çekilmiş, bu sayede orada bir kıvrım görünümü verilmesi
sağlanmıştır. Green değeri de aynı şekilde red değeri gibi pikselleri y ekseni doğrultusunda (dikey) desen
çekilerek kıvrım görünümü oluşturulmuştur.
Bir fotoğrafta desenin giydirilmek istenen alanı dışında fotoğrafta tablo, koltuk, çanta vb. farklı objeler
bulunabilir. Programın bu objeler dışında yalnızca desenle girişim yaptırılacak bölgeyle ilgilenmesini
sağlamamız gerekiyor. İşte bu noktada fotoğrafın blue kanalının değeri ise desenin fotoğraf üzerinde
nereye giydirileceğini programa bildirmektedir.
Bu RGB değerleri 0-255 arasında değerler almaktadırlar. Red ve green kanallarındaki bu değer 0' a ne
kadar yaklaşırsa yani ne kadar koyulaşırsa o yoğunlukta desen çekilerek kıvrımlar oluşturulmuştur. Blue
değerinde ise 0' a yakın olduğu yerlerde desenin giydirilmesi gerektiği, 255 e yakın olan yerlerde ise
desenin giydirilmeyeceği yerler programa bildirilmiş olacaktır.
Çekilen bir fotoğrafta programın simülasyon işlemini gerçekleştirmesi için sadece blue değeri
belirtilebilir. Ancak bazı yerlerde nadir de olsa bu desenin çekilme işlemi bozulmalara neden olabilir.
Daha gerçekçi bir simülasyon oluşturmak için red ve green değerlerinin de düzeltilmesinin yararı vardır.
Fakat red ve green kanallarının değerlerinin değiştirilmesi opsiyoneldir.
Bu ayarlamaların dışında, fotoğrafımızı parçalara ayırmakta yine gerçekçi bir simülasyon için uygundur.
Örneğin; bir koltuk düşündüğümüzde, bu koltuğun üzerine bir desen giydirilmek istendiğinde, fotoğraf
tek parça olduğu için kumaşında düz bir şekilde desenin devamı seklinde yerleştirilecektir. Fakat bu
koltuğun kolları, yastıkları ayrı parçalar olarak hazırlandığında desen direk resim editör programlarıyla
giydirilmiş gibi görünmek yerine, desenin farklı parçaları koltuğun farklı parçalarında farklı yerlerde
bulunacak, bu sayede daha gerçekçi bir simülasyon yapılmış olacaktır. Programımız, parçalar üzerindeki
deseni hareket ettirip, desenin farklı konumlarını uygulamaya imkan vermektedir.
Şekil 1- Örnek koltuk modeli ve parçaları
Şekil 2- Koltuğun minder parçasının RGB kanallarının değerleri gösterilmiştir.
Şekil 3 - Solda oluşturmuş olduğumuz model, sağda ise programımız tarafından giydirilmiş model
görülmektedir.
Şekil 4 - Solda red kanalı, sağda ise green kanalı görülmektedir. Green kanalının daha beyaz
olduğuna dikkat ediniz. Bunun nedeni yatay çekme miktarının azaltılmak istenmesidir.
3. PROGRAMLAMA
3.1 Piksel Hesaplama
Programımız içinde bir x koordinatı için, bir de y koordinatı için toplamda 2 adet trackbar (slider)
bulunmaktadır. Bu trackbarlar desende yapılacak olan çekmelerin şiddetini belirlemek için
oluşturulmuştur.
Program öncelikle, sayısal olarak (x, y) koordinatında bulunan desen pikseli yerine (x1, y1) koordinatında
bulunan desen pikselini kullanılacağını hesaplayacaktır. Yani normal bir giydirme işleminde modelde
karşılık gelen (x, y) koordinatı, yine desende (x, y) koordinatına denk gelmektedir. Fakat programımız 0'a
yakın olan red ve green kanal değerlerinde yine (x, y) koordinatını kullanmak yerine yeni bir (x1, y1)
koordinatı hesaplayacaktır. Aşağıdaki formülle her (x, y) koordinatındaki pikselin yeni (x1, y1)
koordinatları belirlenir;
buradaki hesaplanan pikselin red renk değeri, g ise hesaplanan pikselin green renk değeridir,xShift
ve yShift trackbarlarımızdan okunan 0-3 arasında değişen ondalıklı sayıdır. Bu hesaplama sayesinde
modelin (x, y) koordinatına karşılık desende (x1, y1) koordinatı sayısal olarak bir dizi halinde alınacak ve
bir sonraki bölümde, modelin renk tonuyla desenin renk tonu girişime sokulacaktır.
Denemelerimizde desen piksel piksel taranırken (0, 0)'ıncı pikselden başlandığında desenin sürekli sola
doğru çekildiği görülmüştür. Dolayısıyla, bu hesaplama, desenin tam orta noktası referans alınarak y için
bu noktadan yukarı ve aşağı, x için ise sağa ve sola doğru taranarak yapılmıştır.
3.2 Desenin modele uygulanması
Piksel hesaplamaları sayesinde, modelin hangi pikselinin, desenin hangi pikseline denk geldiğini bulmuş
olduk. Şimdi ise, yapılması gereken bu desen piksellerinin model pikselleri üzerine giriştirilmesi
işlemidir. Bunun için,z o alandaki renk değeri ne kadar koyuysa desenimizdeki pikselimizde o kadar koyu
olmalı ki gölge efektini kaybetmeden verebilmemizi sağlamalıdır. Bunu yapmak için bu koyuluğu orjinal
(RGB değerleriyle oynanmamış olan) modelimizin RGB renk değerlerini okuyarak almamız gerekiyor.
İşlenecek alanın belirlenmesi için modelin ilgili parçasının blue renk değerine bakmalıyız. Bunun için
kullandığımız formül ise;
Blue için;
Green için;
Red için;
Formüllerin anlaşılabilirliğini kolaylaştırmak amacıyla parçalara böldük. Bu denklemler yerine if-else
bloklarıyla programımızı çalıştırdığımızda performansında çok fazla düşüş yaşadığımız için if-else
blokları yerine renk girişimi formülleştirerek oluşturduk (Yalçın Kuş, Kişisel Görüşme, Temmuz 2012).
Bu sayede gözle görülür bir performans artışı olmuştur.Burada maskParcaB modelin ilgili pikselindeki
parçasının blue renk değeri yani piksele girişim yaptırılıp yaptırılmayacağının belirlendiği değerdir,hedefB
girişim yaptırılacak görüntünün blue değeri, hedefG girişim yaptırılacak görüntünün green
değeri,hedefR de aynı şekilde girişim yaptırılacak görüntünün red değeridir, maskB orjinal model
fotoğrafının (RGB değerleriyle oynanmayan) blue değeri , maskG green değeri, maskR red değeridir, desenR ,desenG ve desenB , ise desenimizin red, green ve blue değerleridir.
Şekil 5 - Programımızla giydirilmiş koltuk desenleri
4. SONUÇ ve DEĞERLENDİRME
Sonuç olarak, hem online alışveriş yapan tüketiciler hem de üreticiler için kısa sürede ürünlerin
simülasyonlarını görmeleri açısından oldukça yararlı bir proje olmuştur. Üreticiler için zaman ve maliyet
kaybını önlemeyi, tüketiciler için ise alacakları ürünün gerçeğe yakın simülasyonunu görerek karar
vermelerini kolaylaştırmayı sağlayacaktır.
5. KAYNAKLAR
1. Algan,S., İstanbul 2012, Her Yönüyle C# 4.0
2. http://msdn.microsoft.com/en-us/library/5ey6h79d.aspx
3. http://www.aurigma.com/docs/gm/M_Aurigma_GraphicsMill_Bitmap_LockBits.htm
4. https://github.com/steveniles/MandelZoom/wiki/Using-LockBits-to-speed-up-image-processing
5. http://stackoverflow.com/questions/1563038/fast-work-with-bitmaps-in-c-sharp