[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/jaychow/softwarestudies/master/scripts/imageScatterplot.py [Back]  [Original]

#!/usr/bin/env python

import time
import threading
import sys
import os
from PIL import Image
import math
from random import random

#from pygame.locals import *

#if not pygame.font: print 'Warning, fonts disabled'
#if not pygame.mixer: print 'Warning, sound disabled'


from optparse import OptionParser


parser = OptionParser()
parser.add_option("-d", dest="imageDir",
                  help="Image Directory. Default is the current directory", default=os.path.curdir, metavar="DIR")
parser.add_option("-x", dest="thumbWidth",
		  help="Thumbnail width. Default is 20", default = 20)
parser.add_option("-o", dest="outFile",
                  help="Output file for the scatter plot. Default is ./plot.jpg", default = "plot.jpg", metavar="OUTFILE")
parser.add_option("-v", dest="view",
                  help="Opens the plot in the default image viewer when done.", default = False, action="store_true", metavar="VIEW")
parser.add_option("-s", dest="space",
                  help="Spacing factor of the thumbnails on the plot. defalut = 1", default = 1, metavar="VIEW")


(options, args) = parser.parse_args()

global ops 
ops = options
ops.thumbWidth = float(ops.thumbWidth)
ops.space = float(ops.space)

thumbsize = (20, 20)

############ Image Analysis Functions #######
def findBrightness(picture):
    print "Calculating Brightness:", os.path.basename(picture),
    image = Image.open(picture)
    print "Converting...",
    image = image.convert("L") #converts to luminence
    pixels = list(image.getdata())
    print "Averaging...",
    brightness = sum(pixels) / len(pixels)
    print "Done"
    return brightness

def findSize(picture):
    print "Counting Pixels:", picture
    image = Image.open(picture)
    size = image.size[0] * image.size[1]
    return size

def findXSize(picture):
    image = Image.open(picture)
    size = image.size[0]
    return size

def findYSize(picture):
    image = Image.open(picture)
    size = image.size[1]
    return size
  	
def findEntropy(picture):
    True

def findAvgHue(picture):
    print "Getting Avg Hue:", os.path.basename(picture),
    image = Image.open(picture)

    image = image.convert("RGB")
    
    image = image.split()

    R = list(image[0].getdata())
    G = list(image[1].getdata())
    B = list(image[2].getdata())

    avgRed = sum(R) / len(R)
    avgGreen = sum(G) / len(G)
    avgBlue = sum(B) / len(B)

    print "R:", avgRed, "G:", avgGreen ,"B:" ,avgBlue, "H:",

    xR = avgRed * math.cos(math.radians(60))
    yR = avgRed * math.sin(math.radians(60))

    xG = -avgGreen
    yG = 0

    xB = avgBlue * math.cos(math.radians(60))
    yB = -avgBlue * math.sin(math.radians(60))

    xH = xR + xG + xB
    yH = yR + yG + yB

    hue = math.degrees(math.atan(yH/xH))

    if hue < 0:
        hue += 360

    if xH < 0 and yH < 0:
	hue += 180

    if xH < 0 and yH > 0:
	hue -= 180

    print hue
    return hue


################ Getting Images ###################
print "Getting Images..."
pictureFileNames = os.listdir(ops.imageDir)

picturePathNames = []
for fileName in pictureFileNames:
    if (fileName.endswith(".jpg")):
	picturePathNames.append(os.path.join(ops.imageDir, fileName))


#make images strings for pygame sprites
imageStrs = []
thumbs = []
for path in picturePathNames:
    print "Making Thumbnail:", os.path.basename(path),
    if (path.endswith(".jpg")):
	im = Image.open(path)
    else:
	print "Not a valid image"
	continue
    
    #im = cutOffEdges(im)
    print "Resizing...",
    im = im.resize((ops.thumbWidth, (im.size[1]*ops.thumbWidth/im.size[0])), Image.ANTIALIAS)
    print "Converting...",
    im = im.convert("RGB")
    print "Done"
    imageStrs.append(im.tostring())
    thumbs.append(im)


############## Processing Images ###################
doBrightness = True
doSize = False
doXSize = False
doYSize = False
doEntropy = True
doAvgHue = True

if doBrightness:
    pictureBrightness = []
    for picture in picturePathNames:
	pictureBrightness.append ( findBrightness(picture) )
    print "Brightness:", str(pictureBrightness)

if doSize:
    pictureSize = []
    for picture in picturePathNames:
        pictureSize.append ( findSize(picture))
    print "Size:", str(pictureSize)

if doXSize:
    pictureXSize = []
    for picture in picturePathNames:
        pictureXSize.append ( findXSize(picture))
    print "XSize:", str(pictureXSize)

if doYSize:
    pictureYSize = []
    for picture in picturePathNames:
        pictureYSize.append ( findYSize(picture))
    print "YSize:", str(pictureYSize)

if doEntropy:
    pictureEntropy = []
    for picture in picturePathNames:
        pictureEntropy.append ( findEntropy(picture))
    print "Entropy:", str(pictureEntropy)

if doAvgHue:
    pictureAvgHue = []
    for picture in picturePathNames:
        pictureAvgHue.append ( findAvgHue(picture))
    print "Hue:", str(pictureAvgHue)


###########3 Setting Up The Window #############
#pygame.init()

#window = pygame.display.set_mode((500, 500)) #makes window

#pygame.display.set_caption('Image Messarounder') #sets title

#screen = pygame.display.get_surface()


############ Classes ##########################
#class canvas(pygame.sprite.Sprite):
#    def __init__(self, imageStr, size):
#        pygame.sprite.Sprite.__init__(self) #call Sprite initializer
#        self.image = pygame.image.fromstring(imageStr, (), "RGB")
#        self.rect = self.image.get_rect()
#        self.rect.topleft = (0, 0)
#
#    def update(self, imageStr, size):
#        self.image = pygame.image.fromstring(imageStr, (), "RGB")
#        self.rect = self.image.get_rect()


############ Plot #############################
plot = Image.new("RGB", (800, 800), "black")
for thumb in thumbs:
    plot.paste(thumb, (ops.space*pictureAvgHue[thumbs.index(thumb)], ops.space*1.5*pictureBrightness[thumbs.index(thumb)]))

if ops.view:
    plot.show()

plot.save(ops.outFile)

############3 Sprites #########################

#pictures = []
#for imageStr in imageStrs:
#    pictures.append(canvas(imageStr, thumbsize))
#
#for picture in pictures:
#    picture.rect = picture.rect.move((pictureAvgHue[pictures.index(picture)], pictureBrightness[pictures.index(picture)]))
#
#allsprites = pygame.sprite.OrderedUpdates(pictures)

################ Stuff #########################

#clock = pygame.time.Clock()

#while True:
#    clock.tick(30)
    #allsprites.draw(screen)
    #pygame.display.flip()
    #print clock.get_fps()

Web Proxy Viewer  |  New URL  |  Original Page