Python ile Mozaik Resimler
Python, her alanda çok güçlü kütüphanelere sahip bir dil. Grafik kütüphaneleri açısından da aynı durum geçerli. Bunların başında is “matplotlib” geliyor.
Bu yazımda, sözünü ettiğim kütüphanenin “scatter” metodunu ele alacağım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# -*- coding: utf-8 -*- from PIL import Image import numpy as np import matplotlib.pyplot as plt graf = 'angelinajolie3.jpg' ORAN=0.25 # .15 ARALIK=-0.05 # -0.15 DUZELTME =1.05 # Grafiği yeniden boyutlandır img = Image.open(graf) [xs,ys] = img.size [xs,ys] = [int(xs*ORAN/DUZELTME),int(ys*ORAN) ] img = img.resize((xs,ys)) # Yeni boyutlar [xs,ys] = img.size img = np.asarray(img, dtype="float") oran2 = xs/8.0 msize = 64.0*(1.0-ARALIK)/oran2 # Grid noktalarını belirle x, y = np.mgrid[0:(xs-1), 0:(ys-1)] # Y eksenini tersine çevir y = y.max() - y grid = np.vstack([x.ravel(), y.ravel()]).T fig = plt.figure( figsize=(int(xs/oran2), int(ys/oran2)) ) # Eksenler görünmesin plt.axis('off') plt.xlim((-1,xs-1)) plt.ylim((-1,ys-1)) # Nokta renklerini 256 ile sınırla cols = [img[ ys-1-y, x, ]/255 for [x,y] in grid] # Görüntüyü oluştur plt.scatter( grid[:,0], # x değerleri grid[:,1], # y değerleri marker='h', # marker c=cols, # renkler linewidths=0, edgecolors='black', # sınır rengi s=msize**2, # marker boyutu alpha=1.0 ) # saydamlık # Görüntü yerleşimini düzenle plt.subplots_adjust(left=0, right=1, bottom=0, top=1) # Görüntüyü göster plt.show() |
Matplotlib kütüphanesi çok geniş ve kapsamlıdır. İstatistik veya derin öğrenme çalışmalarının görselleştirilmesinde yoğun şekilde kullanılır.
Yazıyı fazla uzatmamak için kodların ayrıntılı açıklamasına girmeyeceğim. Satır aralarına bazı ipuçları koydum. Diğer ayrıntıları da ilgili kütüphanelere ait açıklamalardan bulabilirsiniz. Bu kütüphanelerden etkin bir şekilde yararlanabilmek için onları kullanmak gerekir. Farklı parametreleri, farklı değerlerle denemekte yarar var.
Scatter metodundaki “marker” parametresini burada biraz açmak istiyorum:
Bu marker (işaret) grafik üzerindeki işaretleme biçimini tarif eder. İki tür “marker” bulunur.
- 1- İçi dolu işaretler: ‘8><^vodDHh*ps'
- 2- İçi boş işaretler: ‘,.1234 _x+’ 01234567
Tırnak içinde grup halinde gösterilen işaretlerin her biri tek olarak seçilip kullanılmalıdır. Örneğin: ‘8’, ‘o’, ‘x’. Boş işaretlerden bazıları da tırnaksız rakamlar halindedir.
Kodları Python 3.5.2 ile test ettim.
Parametrelerle oynayarak çok ilginç sonuçlar elde edebilirsiniz.
Matplotlib, pillow ve numpy kütüphanelerini Ubuntu 16.04 üzerinde aşağıdaki komutlarla kurmanız gerekir:
- sudo apt install python3-matplotlib
- sudo apt install python3-pil
- sudo pip3 install numpy
Ahmet Aksoy
Not: Yukarıdaki kodlar için Christien Diener‘in github pyart sayfasında verdiği kodları temel alıp, biraz basitleştirdim.
Kaynaklar:
Nejdet Çağdaş Yücesoy tarafından hazırlanmış ve sadece pillow kütüphanesini kullanan örneğe https://gist.github.com/nejdetckenobi/d21047f478c3f18d3cb35ecd01aabcb2 adresinden erişebilirsiniz.