예제 #1
0
def make_raw(animal='cat', show=True):

    files = glob.glob('myimages/*.jpg')
    files.sort()

    im_list = []

    if animal == 'cat':  # can be picky about images
        #        files=[files[i] for i in [ 0,1,2,3,4,5,29,32,35,36,46,54,57,58,84]]
        files = [
            files[i] for i in [
                0, 1, 2, 3, 4, 5, 6, 10, 12, 15, 17, 19, 20, 29, 32, 33, 35,
                36, 46, 38, 40, 44, 54, 57, 58, 60, 69, 72, 80, 84
            ]
        ]

    print "Image files: %d" % len(files)
    print "Animal:", animal
    w = Waitbar(True)

    file_count = len(files)
    for count, fname in enumerate(files):

        im = Image.open(fname)
        orig_size = im.size

        if animal == 'cat':
            new_size = [
                int(o * 60. / 0.5 * 5.5 / orig_size[0]) for o in orig_size
            ]
        elif animal == 'mouse':
            new_size = [
                int(o * 60. / 7. * 13 / orig_size[0]) for o in orig_size
            ]
        else:
            raise ValueError

        im = im.convert("L")

        if fname == files[0]:
            print "Resize: %dx%d --> %dx%d" % (orig_size[0], orig_size[1],
                                               new_size[0], new_size[1])
        im = im.resize(new_size)

        if show:
            im.show()

        a = numpy.asarray(im.getdata(), dtype='B')
        a.shape = im.size[::-1]

        im_list.append(a)

        w.update((count + 1) / float(file_count))
        print w,
        sys.stdout.flush()

    var = {'im': im_list, 'im_scale_shift': [1.0, 0.0]}
    print

    return var
예제 #2
0
def make_dog(var,sd1=1,sd2=3,size=32,shape='valid'):
    
    im2_list=[]
    
    im_scale_shift=var['im_scale_shift']
    
    im_count=len(var['im'])
    
    w = Waitbar(True)
    for count,im in enumerate(var['im']):
        orig_size=im.shape
        im2=dog_filter(im*im_scale_shift[0]+im_scale_shift[1],sd1,sd2,size,shape)
        new_size=im2.shape
        
        im2=im2/im2.std()
        im2=im2-im2.mean()
        
        if count==0:
            print "Dog %d,%d: %dx%d --> %dx%d" % (sd1,sd2,
                                                orig_size[0],orig_size[1],
                                                new_size[0],new_size[1])
        im2_list.append(im2)
        
        w.update((count+1)/float(im_count))
        print w,
        sys.stdout.flush()
    
    var2={'im':im2_list,'im_scale_shift':[1.0,0.0]}
    print
    return var2
예제 #3
0
def make_norm(var, mu=0, sd=1):

    im2_list = []

    im_scale_shift = var['im_scale_shift']

    im_count = len(var['im'])

    w = Waitbar(True)
    for count, im in enumerate(var['im']):
        im2 = im.copy()

        im2 = im2 - im2.mean()
        im2 = im2 / im2.std()

        if count == 0:
            print "Norm %.1f,%.1f" % (mu, sd)
        im2_list.append(im2)

        w.update((count + 1) / float(im_count))
        print w,
        sys.stdout.flush()

    var2 = {'im': im2_list, 'im_scale_shift': [1.0, 0.0]}
    print
    return var2
예제 #4
0
def make_sigmoid(var):

    im2_list = []

    im_scale_shift = var['im_scale_shift']

    im_count = len(var['im'])

    w = Waitbar(True)

    bottom = 0.0
    top = 5.0

    for count, imm in enumerate(var['im']):
        im = imm * im_scale_shift[0] + im_scale_shift[1]
        im2 = copy.copy(im)
        im2[im < 0] = bottom * (2.0 /
                                (1.0 + numpy.exp(-2.0 *
                                                 (im[im < 0] / bottom))) - 1.0)
        im2[im >= 0] = top * (2.0 /
                              (1.0 + numpy.exp(-2.0 *
                                               (im[im >= 0] / top))) - 1.0)

        new_size = im2.shape

        im2 = im2 / im2.std()
        im2_list.append(im2)

        w.update((count + 1) / float(im_count))
        print w,
        sys.stdout.flush()

    var2 = {'im': im2_list, 'im_scale_shift': [1.0, 0.0]}
    print
    return var2
예제 #5
0
def make_sigmoid(var):
    
    im2_list=[]
    
    im_scale_shift=var['im_scale_shift']
    
    im_count=len(var['im'])
    
    w = Waitbar(True)
    
    bottom=0.0
    top=5.0
    
    for count,imm in enumerate(var['im']):
        im=imm*im_scale_shift[0]+im_scale_shift[1]
        im2=copy.copy(im)
        im2[im<0]=bottom*(2.0/(1.0+numpy.exp(-2.0*(im[im<0]/bottom)))-1.0)
        im2[im>=0]=top*(2.0/(1.0+numpy.exp(-2.0*(im[im>=0]/top)))-1.0)
        
        new_size=im2.shape

        im2=im2/im2.std()
        im2_list.append(im2)
        
        w.update((count+1)/float(im_count))
        print w,
        sys.stdout.flush()
    
    var2={'im':im2_list,'im_scale_shift':[1.0,0.0]}
    print
    return var2
예제 #6
0
def add_noise(var, sd=1.0):
    im2_list = []

    im_scale_shift = var['im_scale_shift']

    im_count = len(var['im'])

    w = Waitbar(True)
    for count, im in enumerate(var['im']):
        orig_size = im.shape
        im2 = im * im_scale_shift[0] + im_scale_shift[
            1] + sd * numpy.random.randn(im.shape[0], im.shape[1])

        im2 = im2 - im2.mean()
        im2 = im2 / im2.std()
        im2_list.append(im2)

        w.update((count + 1) / float(im_count))
        print w,
        sys.stdout.flush()

    print

    var2 = {'im': im2_list, 'im_scale_shift': [1.0, 0.0]}
    return var2
예제 #7
0
def make_pos(var, type='ON', offset=5, min=0):

    im2_list = []

    im_scale_shift = var['im_scale_shift']

    im_count = len(var['im'])

    w = Waitbar(True)

    for count, imm in enumerate(var['im']):
        im = imm * im_scale_shift[0] + im_scale_shift[1]

        im2 = copy.copy(im)

        if type == 'OFF':
            im2 = -im2

        im2 = im2 + offset
        im2[im2 < min] = min

        new_size = im2.shape

        im2_list.append(im2)

        w.update((count + 1) / float(im_count))
        print w,
        sys.stdout.flush()

    var2 = {'im': im2_list, 'im_scale_shift': [1.0, 0.0]}
    print
    return var2
예제 #8
0
def make_white(var):

    im_scale_shift = var['im_scale_shift']
    im2_list = []

    im_count = len(var['im'])

    w = Waitbar(True)
    for count, im in enumerate(var['im']):

        im = im - im.mean() + 1  # add a little DC to get rid of nans

        yf = fftshift(fft2(im * im_scale_shift[0] + im_scale_shift[1]))
        fl = 1.0 / absolute(yf)

        yffl = yf * fl
        im2 = real(ifft2(ifftshift(yffl)))

        im2 = im2 - im2.mean()
        im2 = im2 / im2.std()

        if count == 0:
            print "Whiten."
        im2_list.append(im2)

        w.update((count + 1) / float(im_count))
        print w,
        sys.stdout.flush()

    print
    var2 = {'im': im2_list, 'im_scale_shift': [1.0, 0.0]}
    return var2
예제 #9
0
def make_white(var):
    
    im_scale_shift=var['im_scale_shift']
    im2_list=[]
    
    
    im_count=len(var['im'])
    
    w = Waitbar(True)
    for count,im in enumerate(var['im']):
        yf=fftshift(fft2(im*im_scale_shift[0]+im_scale_shift[1]))
        fl=1.0/absolute(yf)
        
        yffl=yf*fl;  
        im2=real(ifft2(ifftshift(yffl)))
        
        im2=im2/im2.std()
        im2=im2-im2.mean()

        if count==0:
            print "Whiten."
        im2_list.append(im2)
    
        w.update((count+1)/float(im_count))
        print w,
        sys.stdout.flush()

    print
    var2={'im':im2_list,'im_scale_shift':[1.0,0.0]}
    return var2
예제 #10
0
def make_blur(var,sd=1.0,radius=None):
    
    if not radius:
        radius=sd*3.0
    
    im2_list=[]
    
    im_scale_shift=var['im_scale_shift']
    
    im_count=len(var['im'])
    
    w = Waitbar(True)
    for count,im in enumerate(var['im']):
        orig_size=im.shape
        im2=dog_filter(im*im_scale_shift[0]+im_scale_shift[1],sd,0,2*radius+1,shape='same')
        new_size=im2.shape
        
        im2=im2/im2.std()
        im2=im2-im2.mean()
        if count==0:
            print "Blur %d,%d: %dx%d --> %dx%d" % (sd,radius,
                                            orig_size[0],orig_size[1],
                                            new_size[0],new_size[1])
        im2_list.append(im2)
    
        w.update((count+1)/float(im_count))
        print w,
        sys.stdout.flush()

    print
    
    var2={'im':im2_list,'im_scale_shift':[1.0,0.0]}
    return var2
예제 #11
0
def make_pos(var,type='ON',offset=5,min=0):
    
    im2_list=[]
    
    im_scale_shift=var['im_scale_shift']
    
    im_count=len(var['im'])
    
    w = Waitbar(True)
    
    for count,imm in enumerate(var['im']):
        im=imm*im_scale_shift[0]+im_scale_shift[1]
        
        im2=copy.copy(im)
        
        if type=='OFF':
            im2=-im2
            
        im2=im2+offset
        im2[im2<min]=min
        
        new_size=im2.shape

        im2_list.append(im2)
        
        w.update((count+1)/float(im_count))
        print w,
        sys.stdout.flush()
    
    var2={'im':im2_list,'im_scale_shift':[1.0,0.0]}
    print
    return var2
예제 #12
0
def make_dog(var, sd1=1, sd2=3, size=32, shape='valid'):

    im2_list = []

    im_scale_shift = var['im_scale_shift']

    im_count = len(var['im'])

    w = Waitbar(True)
    for count, im in enumerate(var['im']):
        orig_size = im.shape
        im2 = dog_filter(im * im_scale_shift[0] + im_scale_shift[1], sd1, sd2,
                         size, shape)
        new_size = im2.shape

        im2 = im2 - im2.mean()
        im2 = im2 / im2.std()

        if count == 0:
            print "Dog %d,%d: %dx%d --> %dx%d" % (
                sd1, sd2, orig_size[0], orig_size[1], new_size[0], new_size[1])
        im2_list.append(im2)

        w.update((count + 1) / float(im_count))
        print w,
        sys.stdout.flush()

    var2 = {'im': im2_list, 'im_scale_shift': [1.0, 0.0]}
    print
    return var2
예제 #13
0
def make_raw(animal='cat',show=True):
    
    files=glob.glob('/home/bblais/Pictures/natural_images/*.jpg')
    files.sort()
    
    im_list=[]
    
    if animal=='cat': # can be picky about images
#        files=[files[i] for i in [ 0,1,2,3,4,5,29,32,35,36,46,54,57,58,84]]
        files=[files[i] for i in [ 0,1,2,3,4,5,6,10,12,15,17,19,20,29,32,33,35,36,46,38,40,44,54,57,58,60,69,72,80,84]]
    
    print "Image files: %d" % len(files)
    print "Animal:", animal
    w = Waitbar(True)
    
    file_count=len(files)
    for count,fname in enumerate(files):

        im=Image.open(fname)
        orig_size=im.size
        
        
        if animal=='cat':
            new_size=[int(o*60./0.5*5.5/orig_size[0]) for o in orig_size]
        elif animal=='mouse':
            new_size=[int(o*60./7.*13/orig_size[0]) for o in orig_size]
        else:
            raise ValueError
        
        im=im.convert("L")
        
        if fname==files[0]:
            print "Resize: %dx%d --> %dx%d" % (orig_size[0],orig_size[1],
                                                new_size[0],new_size[1])
        im=im.resize(new_size)
        
        if show:
            im.show()
        
        a=numpy.asarray(im.getdata(),dtype='B')
        a.shape=im.size[::-1]
    
        im_list.append(a)
        
        w.update((count+1)/float(file_count))
        print w,
        sys.stdout.flush()
        
    var={'im':im_list,'im_scale_shift':[1.0,0.0]}
    print
    
    return var
예제 #14
0
def make_raw_vanhateren100():
    fnames = glob.glob('iml/*.iml')
    im_list = []
    w = Waitbar(True)

    for i, filename in enumerate(fnames):
        fin = open(filename, 'rb')
        s = fin.read()
        fin.close()
        arr = array.array('H', s)
        arr.byteswap()
        img = numpy.array(arr, dtype='uint16').reshape(1024, 1536)

        im_list.append(img)

        w.update((i + 1) / 100.0)
        print w,
        sys.stdout.flush()

    var = {'im': im_list, 'im_scale_shift': [1.0, 0.0]}
    return var
예제 #15
0
def eqn_images(var,eqn='x'):
    
    im2_list=[]
    
    im_scale_shift=var['im_scale_shift']
    
    im_count=len(var['im'])
    
    w = Waitbar(True)
    for count,im in enumerate(var['im']):
        x=im
        im2=eval(eqn)
        im2_list.append(im2)
        
        w.update((count+1)/float(im_count))
        print w,
        sys.stdout.flush()
    
    var2={'im':im2_list,'im_scale_shift':[1.0,0.0]}
    print
    return var2
예제 #16
0
def eqn_images(var, eqn='x'):

    im2_list = []

    im_scale_shift = var['im_scale_shift']

    im_count = len(var['im'])

    w = Waitbar(True)
    for count, im in enumerate(var['im']):
        x = im
        im2 = eval(eqn)
        im2_list.append(im2)

        w.update((count + 1) / float(im_count))
        print w,
        sys.stdout.flush()

    var2 = {'im': im2_list, 'im_scale_shift': [1.0, 0.0]}
    print
    return var2
예제 #17
0
def make_log(var):
    
    im2_list=[]
    
    im_scale_shift=var['im_scale_shift']
    
    im_count=len(var['im'])
    
    w = Waitbar(True)
    for count,im in enumerate(var['im']):
        im2=numpy.log(im+1.0)
        new_size=im2.shape
        
        im2=im2/im2.std()
        im2_list.append(im2)
        
        w.update((count+1)/float(im_count))
        print w,
        sys.stdout.flush()
    
    var2={'im':im2_list,'im_scale_shift':[1.0,0.0]}
    print
    return var2
예제 #18
0
def make_log(var):

    im2_list = []

    im_scale_shift = var['im_scale_shift']

    im_count = len(var['im'])

    w = Waitbar(True)
    for count, im in enumerate(var['im']):
        im2 = numpy.log(im + 1.0)
        new_size = im2.shape

        im2 = im2 / im2.std()
        im2_list.append(im2)

        w.update((count + 1) / float(im_count))
        print w,
        sys.stdout.flush()

    var2 = {'im': im2_list, 'im_scale_shift': [1.0, 0.0]}
    print
    return var2
예제 #19
0
def make_blur(var, sd=1.0, radius=None):

    if not radius:
        radius = sd * 3.0

    im2_list = []

    im_scale_shift = var['im_scale_shift']

    im_count = len(var['im'])

    w = Waitbar(True)
    for count, im in enumerate(var['im']):
        orig_size = im.shape
        im2 = dog_filter(im * im_scale_shift[0] + im_scale_shift[1],
                         sd,
                         0,
                         2 * radius + 1,
                         shape='same')
        new_size = im2.shape

        im2 = im2 - im2.mean()
        im2 = im2 / im2.std()
        if count == 0:
            print "Blur %d,%d: %dx%d --> %dx%d" % (sd, radius, orig_size[0],
                                                   orig_size[1], new_size[0],
                                                   new_size[1])
        im2_list.append(im2)

        w.update((count + 1) / float(im_count))
        print w,
        sys.stdout.flush()

    print

    var2 = {'im': im2_list, 'im_scale_shift': [1.0, 0.0]}
    return var2
예제 #20
0
def read_raw_vanhateren100(show=True):
    fnames=glob.glob('original/vanhateren_iml/*.iml')
    im_list=[]
    w = Waitbar(True)
    
    for i,filename in enumerate(fnames):
        fin = open( filename, 'rb' )
        s = fin.read()
        fin.close()
        arr = array.array('H', s)
        arr.byteswap()
        img = numpy.array(arr, dtype='uint16').reshape(1024,1536)
        
        im_list.append(img)
        if show:
            imm=Image.fromarray(img)
            imm.show(command='display')
        
        w.update((i+1)/100.0)
        print w,
        sys.stdout.flush()
    
    var={'im':im_list,'im_scale_shift':[1.0,0.0]}
    return var
예제 #21
0
def make_rot(var, which_angles, more=False):
    def radians(deg):
        return deg * numpy.pi / 180.0

    im_scale_shift = var['im_scale_shift']
    im2_list = []

    for a in which_angles:
        print "Rotate ", a
        im_count = len(var['im'])

        w = Waitbar(True)
        for count, imm in enumerate(var['im']):
            im = imm * im_scale_shift[0] + im_scale_shift[1]

            orig_size = im.shape
            im = im[:, :orig_size[0]]  # crop to square
            sz = im.shape
            new_size = sz

            Im = pn.array2image(im).rotate(a)
            im2 = pn.image2array(Im)

            # assume square images, and worst case (45 deg)
            s = sz[0]
            l = int(numpy.ceil(s / numpy.sqrt(2)))
            i1 = int((s - l) / 2)
            im2 = im2[i1:(i1 + l), i1:(i1 + l)]

            im2 = im2 - im2.mean()
            im2 = im2 / im2.std()

            if count == 0:
                print "Rotate %d: %dx%d --> %dx%d" % (
                    a, orig_size[0], orig_size[1], new_size[0], new_size[1])
            im2_list.append(im2)

            if more:
                im = imm * im_scale_shift[0] + im_scale_shift[1]

                orig_size = im.shape
                im = im[:, -orig_size[0]:]  # crop to square
                sz = im.shape
                new_size = sz

                Im = pn.array2image(im).rotate(a)
                im2 = pn.image2array(Im)

                # assume square images, and worst case (45 deg)
                s = sz[0]
                l = int(numpy.ceil(s / numpy.sqrt(2)))
                i1 = int((s - l) / 2)
                im2 = im2[i1:(i1 + l), i1:(i1 + l)]

                im2 = im2 / im2.std()
                im2 = im2 - im2.mean()

                im2_list.append(im2)

                if count == 0:
                    print "Rotate more %d: %dx%d --> %dx%d" % (
                        a, orig_size[0], orig_size[1], new_size[0],
                        new_size[1])

            w.update((count + 1) / float(im_count))
            print w,
            sys.stdout.flush()

        print

    var2 = {'im': im2_list, 'im_scale_shift': [1.0, 0.0]}
    return var2
예제 #22
0
def make_rot(var,which_angles,more=False):
    
    def radians(deg):
        return deg*numpy.pi/180.0
    
    im_scale_shift=var['im_scale_shift']
    im2_list=[]
    

    for a in which_angles:
        print "Rotate ",a
        im_count=len(var['im'])
        
        w = Waitbar(True)
        for count,imm in enumerate(var['im']):
            im=imm*im_scale_shift[0]+im_scale_shift[1]
            
            orig_size=im.shape
            im=im[:,:orig_size[0]]  # crop to square
            sz=im.shape
            new_size=sz
            
            Im=pn.array2image(im).rotate(a)
            im2=pn.image2array(Im)
            
            
            # assume square images, and worst case (45 deg)
            s=sz[0]
            l=int(numpy.ceil(s/numpy.sqrt(2)))
            i1=int((s-l)/2)
            im2=im2[i1:(i1+l),i1:(i1+l)]
            
            im2=im2/im2.std()
            im2=im2-im2.mean()
    
            if count==0:
                print "Rotate %d: %dx%d --> %dx%d" % (a,
                                            orig_size[0],orig_size[1],
                                            new_size[0],new_size[1])
            im2_list.append(im2)
            
            if more:
                im=imm*im_scale_shift[0]+im_scale_shift[1]
                
                orig_size=im.shape
                im=im[:,-orig_size[0]:]  # crop to square
                sz=im.shape
                new_size=sz
                
                Im=pn.array2image(im).rotate(a)
                im2=pn.image2array(Im)
                
                
                # assume square images, and worst case (45 deg)
                s=sz[0]
                l=int(numpy.ceil(s/numpy.sqrt(2)))
                i1=int((s-l)/2)
                im2=im2[i1:(i1+l),i1:(i1+l)]
                
                im2=im2/im2.std()
                im2=im2-im2.mean()
        
                im2_list.append(im2)
                
                if count==0:
                    print "Rotate more %d: %dx%d --> %dx%d" % (a,
                                                    orig_size[0],orig_size[1],
                                                    new_size[0],new_size[1])
            
            
            w.update((count+1)/float(im_count))
            print w,
            sys.stdout.flush()

        print
        
    var2={'im':im2_list,'im_scale_shift':[1.0,0.0]}
    return var2
예제 #23
0
def read_raw_bbsk(animal='cat',subset=True,show=True):
    
    if subset:
        files=glob.glob('original/subset_bbsk081604/*.jpg')
    else:
        files=glob.glob('original/all_bbsk081604/*.jpg')
    
    files.sort()
    
    im_list=[]
    
    print "Image files: %d" % len(files)
    print "Animal:", animal
    w = Waitbar(True)
    
    file_count=len(files)
    for count,fname in enumerate(files):

        im=Image.open(fname)
        orig_size=im.size
        
        # the bbsk images are angular size 60 degrees x 40 degrees
        # the raw images are resized so that 
        #   5.5 pixels ~ 0.5 degrees (cat retina)  - default
        # 
        #            ...or...
        #
        #   13 pixels ~ 7 degrees (mouse retina)
        #
        # see the contained iccns.pdf
        #
        
        if animal=='cat':
            new_size=[int(o*60./0.5*5.5/orig_size[0]) for o in orig_size]
        elif animal=='mouse':
            new_size=[int(o*60./7.*13/orig_size[0]) for o in orig_size]
        else:
            raise ValueError
        
        im=im.convert("L")
        
        if fname==files[0]:
            print "Resize: %dx%d --> %dx%d" % (orig_size[0],orig_size[1],
                                                new_size[0],new_size[1])
        im=im.resize(new_size)
        
        if show:
            im.show()
        
        # I know these have a max value of 255, so 'B' will work
        a=numpy.asarray(im.getdata(),dtype='B')
        a.shape=im.size[::-1]
    
        im_list.append(a)
        
        w.update((count+1)/float(file_count))
        print w,
        sys.stdout.flush()
        
    var={'im':im_list,'im_scale_shift':[1.0,0.0]}
    print
    
    return var