Whatsapp Tekstil Kursları Destek Hattı

İki Boyutlu Resim Üzerinde Desen Simülasyon Programı

 

İ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