Şub 022017
 
5.225 views

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.

Python ile Mozaik Resimler

Angelina Jolie

# -*- 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:

  Bir yanıt - “Python ile Mozaik Resimler”

  1. 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.

 Bir yanıt bırakın

Bu HTML tagleri ve özellikleri kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(gerekli)

(gerekli)

This site uses Akismet to reduce spam. Learn how your comment data is processed.