def find_object_values(mask):
	'''
	object_values = find_object_values(mask)
	Find pixel values of each of the objects in an object mask
	Returns a numpy array containing the values. 
	len(object_values) = total number of objects in the mask
	'''
	from numpy import unique, array
	return unique(array(mask))


while im_ids:
  ##instantiate montage with random geometry
  obj_comp = imo.simple_composition(SIDE, 1, min_radius=min_obj_size, max_radius=max_obj_size)
  m = imo.montage(SIDE, background_image, obj_comp, mask_margin = mask_margin, object_background=background_contrast, reveal_corners = 5)
  ##loop over number of objects
  while not m.full():
    ##sample an object
    im, mask, object_id, imdx = grab_image(im_dir, im_ids)
    m.add_one_object(im, mask, object_id)
  ##print picture to file
  m.picture.save(save_to+imdx)
  m.background_picture.save(save_to+'background.'+imdx)
  labeled = imo.put_text(m.background_picture, message = labels.pop(), position = (.5, .5), size = font_size)
  labeled.save(save_to+'label.background.'+imdx)
  
  
    tc = imo.boring_composition(SIDE=SIDE, locations=box_centers, radius = radius)
    ##create a montage for presenting the object
    mo = imo.montage(SIDE, background_image, tc)
    ##create the list
    mo.object_list = [oo]*tc.number_of_objects 
    ##make the pictures with objects, location cues and no labels for pcp runs
    try:
    	object_pictures = mo.show_picture(mask_margin=mask_margin)
    except:
		    1/0
    ##show them for good measure
    mo.show_picture(flat=True)[0].show()
    cnt = 0
    ##add text to each pasted object frame and save
    for ii,op in enumerate(object_pictures):
      imo.put_text(op.resize((ENLARGE_TO,ENLARGE_TO),imo.Image.ANTIALIAS), message = lbl, position = (.5, .5), fill=box_colors[ii],size = category_cue_font_size).save(save_to+'/frame_files/'+image_file_names % (image_id,  object_id, cnt,'image'))
      copy_background = Image.open(background_image_file)
      imo.put_text(copy_background.resize((ENLARGE_TO,ENLARGE_TO), imo.Image.ANTIALIAS), message = lbl, position = (.5, .5), fill=box_colors[ii],size = category_cue_font_size).save(save_to+'/frame_files/'+image_file_names % (image_id,  object_id, cnt,'cue'))
      cnt += 1
  # ##make "rest" frames  
  jitters = [(0,0),(1,0),(0,1),(1,1)]
  cnt = 0
  for offsets in jitters:
    copy_background = Image.open(background_image_file).offset(offsets[0],offsets[1])
    imo.put_text(copy_background.resize((ENLARGE_TO,ENLARGE_TO),imo.Image.ANTIALIAS), message=rest_label, position=(0.5,0.5)).save(save_to+'/frame_files/'+'rest_frame_%d.png' % (cnt))
    cnt += 1
    ##make pictures with location cues only for both the pcp and img runs
#     cue_pictures = mo.show_picture(mask_margin=mask_margin, reveal_corners = location_cue_size, locations_only = True)
#     cnt = 0
#     for cp in cue_pictures:
#       ##location cues only for img.
    tc = imo.boring_composition(SIDE=SIDE, locations=box_centers, radius = radius)
    ##create a montage for presenting the object
    mo = imo.montage(SIDE, background_image, tc)
    ##create the list
    mo.object_list = [oo]*tc.number_of_objects 
    ##make the pictures with objects, location cues and no labels for pcp runs
    try:
    	object_pictures = mo.show_picture(mask_margin=mask_margin)
    except:
		1/0
    ##show them for good measure
    mo.show_picture(flat=True)[0].show()
    cnt = 0
    ##add text to each pasted object frame and save
    for ii,op in enumerate(object_pictures):
      imo.put_text(op, message = lbl, position = (.5, .5), fill=box_colors[ii],size = category_cue_font_size).save(save_to+'/frame_files/'+image_file_names % (image_id,  object_id, cnt,'image'))
      copy_background = Image.open('/Users/tnaselar/Data/Presentation/single.object.boxes/Boxes2.png')
      imo.put_text(copy_background, message = lbl, position = (.5, .5), fill=box_colors[ii],size = category_cue_font_size).save(save_to+'/frame_files/'+image_file_names % (image_id,  object_id, cnt,'cue'))
      cnt += 1
  ##make a "rest" frame
  copy_background = Image.open('/Users/tnaselar/Data/Presentation/single.object.boxes/Boxes2.png')
  imo.put_text(copy_background, message=rest_label, position=(0.5,0.5)).save(save_to+'/frame_files/'+'rest_frame.png')
      
    ##make pictures with location cues only for both the pcp and img runs
#     cue_pictures = mo.show_picture(mask_margin=mask_margin, reveal_corners = location_cue_size, locations_only = True)
#     cnt = 0
#     for cp in cue_pictures:
#       ##location cues only for img.
#       imo.reveal_center(cp, fixation_dot_size, fill=fixation_dot_color).save(save_to+'/frame_files/'+image_file_names % (image_id, object_id, cnt, 'location'))
#       ##location cues + labels for img and pcp
#       imo.put_text(cp, message = lbl, position = (.5, .5), size = category_cue_font_size).save(save_to+'/frame_files/'+image_file_names % (image_id, object_id, cnt,'cue'))
            imo.reveal_center(op, fixation_dot_size, fill=fixation_dot_color).save(
                save_to + "/frame_files/" + image_file_names % (image_id, object_id, cnt, "image")
            )
            cnt += 1

        ##make pictures with location cues only for both the pcp and img runs
        cue_pictures = mo.show_picture(mask_margin=mask_margin, reveal_corners=location_cue_size, locations_only=True)
        cnt = 0
        for cp in cue_pictures:
            ##location cues only for img.
            imo.reveal_center(cp, fixation_dot_size, fill=fixation_dot_color).save(
                save_to + "/frame_files/" + image_file_names % (image_id, object_id, cnt, "location")
            )
            ##location cues + labels for img and pcp
            imo.put_text(cp, message=lbl, position=(0.5, 0.5), size=category_cue_font_size).save(
                save_to + "/frame_files/" + image_file_names % (image_id, object_id, cnt, "cue")
            )
            cnt += 1

    # mo.dump(save_to+montage_object_file...)

##for the trn runs

##create a "simple_composition" and a montage
# sc = imo.simple_composition(len(list_of_trn_objects), max_radius = max_object_radius, min_radius=min_object_radius)
# mo = imo.montage(SIDE, imo.make_a_blank(SIDE,background_image_color,'RGB'), sc) ##<< this will probably kill memory
# while list_of_trn_objects:
# object_specs = list_of_trn_objects.pop()
# image_id = object_specs[0]
# object_id = object_specs[1]
# number_of_locations = object_specs[2]