On Feb 21, 1:41 am, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > hi guys > i am trying out PCA analysis using python.I have a set of > jpeg(rgbcolor) images whose pixel data i need to extract and make a > matrix .( rows =num of images and cols=num of pixels) > For this i need to represent an image as an array. > i was able to do this using java's BufferedImage as below > > <javacode> > int[] rgbdata = new int[width * height]; > image.getRGB(0,0,width,height,rgbdata,0,width); > > doubles = new double[rgbdata.length]; > int i; > for ( i = 0; i < bytes.length; i++) { > doubles[i] = (double)(rgbdata[i]);} > > </javacode> > > this doubles[] now represent a single image's pixels > > then i can get a matrix of say 4 images ..(each of 4X3 size) > <sampledata> > images[][] rows=4,cols=12 > [ > [-4413029.0, -1.0463919E7,... -5201255.0] > > [-5399916.0, -9411231.0, ... -6583163.0] > > [-3886937.0, -1.0202292E7,... -6648444.0] > > [-5597295.0, -7901339.0,... -5989995.0] > ] > </sampledata> > i can normalise the above matrix to zeromean and then find covariance > matrix by > images * transpose(images) > > my problem is how i can use PIL to do the same thing..if i extract > imagedata using im.getdata() > i will get > <sampledata> > [ > [(188, 169, 155), (96, 85, 81),.. (176, 162, 153)] > > [(173, 154, 148), (112, 101, 97),.. (155, 140, 133)] > > [(196, 176, 167), (100, 83, 76), ... (154, 141, 132)] > > [(170, 151, 145), (135, 111, 101), ... (164, 153, 149)] > ] > </sampledata> > i donot know how to find covariance matrix from such a matrix..it > would'v been ideal if they were single values instead of tuples..i > can't use greyscale images since the unput images are all rgb jpeg > > can someone suggest a solution? > thanks > dn
I'm surprised PIL doesn't have a grayscale conversion, but here is one that can manipulate your RGB values: sampledata = [ [(188, 169, 155), (96, 85, 81), (176, 162, 153)], [(173, 154, 148), (112, 101, 97), (155, 140, 133)], [(196, 176, 167), (100, 83, 76), (154, 141, 132)], [(170, 151, 145), (135, 111, 101), (164, 153, 149)], ] # following approx from http://www.dfanning.com/ip_tips/color2gray.html grayscale = lambda (R,G,B) : int(0.3*R + 0.59*G + 0.11*B) print [ [ grayscale(rgb) for rgb in row ] for row in sampledata ] prints (reformatted to match your sampledata): [ [173, 87, 165], [159, 103, 143], [181, 87, 143], [156, 117, 155] ] -- http://mail.python.org/mailman/listinfo/python-list