def main( img_filename=os.path.join('image', '2.jpg'), nPixels_on_side=15, i_std=20 # std dev for color Gaussian ): if img_filename is None: raise ValueError("img_filename cannot be None") # img_filename = os.path.join(HOME,'Desktop','stairs2.jpg') FilesDirs.raise_if_file_does_not_exist(img_filename) # Part 1: Specify the parameters: prior_count_const = 5 # the weight of Inverse-Wishart prior of space covariance(ex:1,5,10) use_hex = True # toggle between hexagons and squares (for the init) prior_weight = 0.5 # in the segmentation, # we do argmax w * log_prior + (1-w) *log_likelihood. # Keeping w (i.e., prior_weight) at 0.5 means we are trying # to maximize the true posterior. # We keep the paramter here in case the user will like # to tweak it. calc_s_cov = True # If this is False, then we avoid estimating the spatial cov. num_EM_iters = nPixels_on_side num_inner_iters = 10 # Part 2 : prepare for segmentation sp_size = nPixels_on_side * nPixels_on_side img = misc.imread(img_filename) dimx = img.shape[1] dimy = img.shape[0] tic = time.clock() sw = SuperpixelsWrapper(dimy=dimy, dimx=dimx, nPixels_in_square_side=nPixels_on_side, i_std=i_std, s_std=nPixels_on_side, prior_count=prior_count_const * sp_size, use_hex=use_hex) toc = time.clock() print('init time = ', toc - tic) print('nSuperpixels =', sw.nSuperpixels) sw.set_img(img) # you can use the same SuperpixelsWrapper object with different imgs and/or, # i_std, s_std, prior_count. # Just call sw.set_img(new_img), sw.initialize_seg(), and/or # sw.set_superpixels(i_std=..., s_std = ..., prior_count = ...) # again and recompute the seg. # Please see demo_for_direc for an example # Part 3: Do the superpixel segmentation print("Actual works starts now") tic = time.clock() # actual work sw.calc_seg(nEMIters=num_EM_iters, nItersInner=num_inner_iters, calc_s_cov=calc_s_cov, prior_weight=prior_weight) # Copy the parameters from gpu to cpu sw.gpu2cpu() toc = time.clock() print('superpixel calculation time = ', toc - tic) # Part 4: Save the mean/boundary image and the resulting parameters # Results will be save in the /result directory. You can change it. root_slash_img_num = os.path.splitext(img_filename)[0] image_direc = os.path.split(root_slash_img_num)[0] img_num = os.path.split(root_slash_img_num)[1] save_path_root = os.path.join(image_direc, 'result') print("I am going to save results into", save_path_root) FilesDirs.mkdirs_if_needed(save_path_root) img_overlaid = sw.get_img_overlaid() # get the boundary image img_cartoon = sw.get_cartoon() # get the cartoon image grid = ['square', 'hex'][sw.use_hex] fname_res_border = os.path.join( save_path_root, '_'.join([ img_num, 'n', '{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std), 'border', grid + '.png' ])) fname_res_cartoon = os.path.join( save_path_root, '_'.join([ img_num, 'n', '{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std), 'mean', grid + '.png' ])) print('saving', fname_res_border) misc.imsave(fname_res_border, img_overlaid) print('saving', fname_res_cartoon) misc.imsave(fname_res_cartoon, img_cartoon) # save the resulting parameters to MATLAB .mat file mat_filename = os.path.join( save_path_root # , img_num + '_std_'+str(i_std)+'.mat') , '_'.join([ img_num, 'n', '{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std) + '.mat' ])) print('Saving params to ', mat_filename) pm = sw.superpixels.params sio.savemat( mat_filename, { 'pixel_to_super': sw.seg.cpu, 'count': pm.counts.cpu, 'mu_i': pm.mu_i.cpu, 'mu_s': pm.mu_s.cpu, 'sigma_s': pm.Sigma_s.cpu, 'sigma_i': pm.Sigma_i.cpu })
def main(image_direc = 'image', nPixels_on_side = 15, i_std = 15, # std dev for color Gaussian imgs_of_the_same_size=None ): if image_direc is None: raise ValueError("image_direc cannot be None") image_direc = os.path.expanduser(image_direc) image_direc = os.path.abspath(image_direc) FilesDirs.raise_if_dir_does_not_exist(image_direc) imgs = get_list_of_all_imgs_dir(image_direc) if not imgs: raise Exception("\n\nDirectory \n{}\ncontains no images.\n".format(image_direc)) # Results will be saved in the /results folder under input directory. You can change it. save_path_root = os.path.join(image_direc , 'result') print "I am going to save results into",save_path_root FilesDirs.mkdirs_if_needed(save_path_root) # Part 1: Specify the parameters: prior_count_const = 5 # the weight of Inverse-Wishart prior of space covariance(ex:1,5,10) use_hex = True # toggle between hexagons and squares (for the init) prior_weight = 0.5 # in the segmentation, # we do argmax w * log_prior + (1-w) *log_likelihood. # Keeping w (i.e., prior_weight) at 0.5 means we are trying # to maximize the true posterior. # We keep the paramter here in case the user will like # to tweak it. calc_s_cov = True # If this is False, then we avoid estimating the spatial cov. num_EM_iters = nPixels_on_side num_inner_iters = 10 sp_size = nPixels_on_side*nPixels_on_side for i,img_filename in enumerate(imgs): # Part 2 : prepare for segmentation print img_filename fullfilename = os.path.join(image_direc,img_filename) FilesDirs.raise_if_file_does_not_exist(fullfilename) img = misc.imread(fullfilename) dimx=img.shape[1] dimy=img.shape[0] if not((img.ndim in [1,3]) and (img.shape[2] in [1,3])): raise ValueError("\n\nProblem with {0}\n\nI was expecting 3 channels, but img.shape = {1}\n\n".format(fullfilename,img.shape)) tic = time.clock() if (imgs_of_the_same_size and i !=0): sw.initialize_seg() # you can use the same SuperpixelsWrapper object with different imgs and/or, # i_std, s_std, prior_count. # Just call sw.set_img(new_img), sw.initialize_seg(), and/or # sw.set_superpixels(i_std=..., s_std = ..., prior_count = ...) # again and recompute the seg. else: sw = SuperpixelsWrapper(dimy=dimy,dimx=dimx, nPixels_in_square_side=nPixels_on_side, i_std = i_std , s_std = nPixels_on_side, prior_count = prior_count_const*sp_size, use_hex = use_hex ) toc = time.clock() print 'init time = ', toc-tic print 'nSuperpixels =', sw.nSuperpixels sw.set_img(img) # Part 3: Do the superpixel segmentation tic = time.clock() #actual work sw.calc_seg(nEMIters=num_EM_iters, nItersInner=num_inner_iters, calc_s_cov=calc_s_cov, prior_weight=prior_weight) # Copy the parameters from gpu to cpu sw.gpu2cpu() toc = time.clock() print 'superpixel calculation time = ',toc-tic # Part 4: Save the mean/boundary image and the resulting parameters img_overlaid = sw.get_img_overlaid() # get the boundary image img_cartoon = sw.get_cartoon() # get the cartoon image grid = ['square','hex'][sw.use_hex] root_slash_img_num = os.path.splitext(img_filename)[0] img_num = os.path.split(root_slash_img_num)[1] #fname_res_border = '_'.join([img_num , 'std', str(i_std), 'border', grid+'.png']) #fname_res_cartoon = '_'.join([img_num , 'std', str(i_std), 'mean', grid+'.png']) fname_res_border = '_'.join([img_num,'n','{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std), 'border', grid+'.png']) fname_res_cartoon = '_'.join([img_num, 'n','{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std), 'mean', grid+'.png']) fname_res_border = os.path.join(save_path_root,fname_res_border) fname_res_cartoon = os.path.join(save_path_root,fname_res_cartoon) print 'saving',fname_res_border misc.imsave(fname_res_border, img_overlaid) print 'saving',fname_res_cartoon misc.imsave(fname_res_cartoon, img_cartoon) #save the resulting parameters to MATLAB .mat file #mat_filename = os.path.join(save_path_root , img_num + '_std_'+str(i_std)+'.mat') mat_filename = os.path.join(save_path_root#, img_num + '_std_'+str(i_std)+'.mat') ,'_'.join([img_num,'n','{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std)+'.mat'])) print 'Saving params to ',mat_filename pm = sw.superpixels.params sio.savemat(mat_filename,{'pixel_to_super':sw.seg.cpu, 'count':pm.counts.cpu, 'mu_i': pm.mu_i.cpu, 'mu_s':pm.mu_s.cpu, 'sigma_s':pm.Sigma_s.cpu, 'sigma_i':pm.Sigma_i.cpu}) if (not imgs_of_the_same_size): del sw
def main(img_filename = os.path.join('image','2.jpg'), nPixels_on_side = 15, i_std = 20 # std dev for color Gaussian ): if img_filename is None: raise ValueError("img_filename cannot be None") #img_filename = os.path.join(HOME,'Desktop','stairs2.jpg') FilesDirs.raise_if_file_does_not_exist(img_filename) # Part 1: Specify the parameters: prior_count_const = 5 # the weight of Inverse-Wishart prior of space covariance(ex:1,5,10) use_hex = True # toggle between hexagons and squares (for the init) prior_weight = 0.5 # in the segmentation, # we do argmax w * log_prior + (1-w) *log_likelihood. # Keeping w (i.e., prior_weight) at 0.5 means we are trying # to maximize the true posterior. # We keep the paramter here in case the user will like # to tweak it. calc_s_cov = True # If this is False, then we avoid estimating the spatial cov. num_EM_iters = nPixels_on_side num_inner_iters = 10 # Part 2 : prepare for segmentation sp_size = nPixels_on_side*nPixels_on_side img = misc.imread(img_filename) dimx=img.shape[1] dimy=img.shape[0] tic = time.clock() sw = SuperpixelsWrapper(dimy=dimy,dimx=dimx, nPixels_in_square_side=nPixels_on_side, i_std = i_std , s_std = nPixels_on_side, prior_count = prior_count_const*sp_size, use_hex = use_hex ) toc = time.clock() print 'init time = ', toc-tic print 'nSuperpixels =', sw.nSuperpixels sw.set_img(img) # you can use the same SuperpixelsWrapper object with different imgs and/or, # i_std, s_std, prior_count. # Just call sw.set_img(new_img), sw.initialize_seg(), and/or # sw.set_superpixels(i_std=..., s_std = ..., prior_count = ...) # again and recompute the seg. # Please see demo_for_direc for an example # Part 3: Do the superpixel segmentation print "Actual works starts now" tic = time.clock() #actual work sw.calc_seg(nEMIters=num_EM_iters, nItersInner=num_inner_iters, calc_s_cov=calc_s_cov, prior_weight=prior_weight) # Copy the parameters from gpu to cpu sw.gpu2cpu() toc = time.clock() print 'superpixel calculation time = ',toc-tic # Part 4: Save the mean/boundary image and the resulting parameters # Results will be save in the /result directory. You can change it. root_slash_img_num = os.path.splitext(img_filename)[0] image_direc = os.path.split(root_slash_img_num)[0] img_num = os.path.split(root_slash_img_num)[1] save_path_root = os.path.join(image_direc , 'result') print "I am going to save results into",save_path_root FilesDirs.mkdirs_if_needed(save_path_root) img_overlaid = sw.get_img_overlaid() # get the boundary image img_cartoon = sw.get_cartoon() # get the cartoon image grid = ['square','hex'][sw.use_hex] fname_res_border = os.path.join(save_path_root, '_'.join([img_num,'n','{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std), 'border', grid+'.png'])) fname_res_cartoon = os.path.join(save_path_root, '_'.join([img_num, 'n','{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std), 'mean', grid+'.png'])) print 'saving',fname_res_border misc.imsave(fname_res_border, img_overlaid) print 'saving',fname_res_cartoon misc.imsave(fname_res_cartoon, img_cartoon) #save the resulting parameters to MATLAB .mat file mat_filename = os.path.join(save_path_root#, img_num + '_std_'+str(i_std)+'.mat') ,'_'.join([img_num,'n','{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std)+'.mat'])) print 'Saving params to ',mat_filename pm = sw.superpixels.params sio.savemat(mat_filename,{'pixel_to_super':sw.seg.cpu, 'count':pm.counts.cpu, 'mu_i': pm.mu_i.cpu, 'mu_s':pm.mu_s.cpu, 'sigma_s':pm.Sigma_s.cpu, 'sigma_i':pm.Sigma_i.cpu})
def main( image_direc='image', nPixels_on_side=15, i_std=15, # std dev for color Gaussian imgs_of_the_same_size=None): if image_direc is None: raise ValueError("image_direc cannot be None") image_direc = os.path.expanduser(image_direc) image_direc = os.path.abspath(image_direc) FilesDirs.raise_if_dir_does_not_exist(image_direc) imgs = get_list_of_all_imgs_dir(image_direc) if not imgs: raise Exception( "\n\nDirectory \n{}\ncontains no images.\n".format(image_direc)) # Results will be saved in the /results folder under input directory. You can change it. save_path_root = os.path.join(image_direc, 'result') print("I am going to save results into", save_path_root) FilesDirs.mkdirs_if_needed(save_path_root) # Part 1: Specify the parameters: prior_count_const = 5 # the weight of Inverse-Wishart prior of space covariance(ex:1,5,10) use_hex = True # toggle between hexagons and squares (for the init) prior_weight = 0.5 # in the segmentation, # we do argmax w * log_prior + (1-w) *log_likelihood. # Keeping w (i.e., prior_weight) at 0.5 means we are trying # to maximize the true posterior. # We keep the paramter here in case the user will like # to tweak it. calc_s_cov = True # If this is False, then we avoid estimating the spatial cov. num_EM_iters = nPixels_on_side num_inner_iters = 10 sp_size = nPixels_on_side * nPixels_on_side for i, img_filename in enumerate(imgs): # Part 2 : prepare for segmentation print(img_filename) fullfilename = os.path.join(image_direc, img_filename) FilesDirs.raise_if_file_does_not_exist(fullfilename) img = misc.imread(fullfilename) dimx = img.shape[1] dimy = img.shape[0] if not ((img.ndim in [1, 3]) and (img.shape[2] in [1, 3])): raise ValueError( "\n\nProblem with {0}\n\nI was expecting 3 channels, but img.shape = {1}\n\n" .format(fullfilename, img.shape)) tic = time.clock() if (imgs_of_the_same_size and i != 0): sw.initialize_seg() # you can use the same SuperpixelsWrapper object with different imgs and/or, # i_std, s_std, prior_count. # Just call sw.set_img(new_img), sw.initialize_seg(), and/or # sw.set_superpixels(i_std=..., s_std = ..., prior_count = ...) # again and recompute the seg. else: sw = SuperpixelsWrapper(dimy=dimy, dimx=dimx, nPixels_in_square_side=nPixels_on_side, i_std=i_std, s_std=nPixels_on_side, prior_count=prior_count_const * sp_size, use_hex=use_hex) toc = time.clock() print('init time = ', toc - tic) print('nSuperpixels =', sw.nSuperpixels) sw.set_img(img) # Part 3: Do the superpixel segmentation tic = time.clock() # actual work sw.calc_seg(nEMIters=num_EM_iters, nItersInner=num_inner_iters, calc_s_cov=calc_s_cov, prior_weight=prior_weight) # Copy the parameters from gpu to cpu sw.gpu2cpu() toc = time.clock() print('superpixel calculation time = ', toc - tic) # Part 4: Save the mean/boundary image and the resulting parameters img_overlaid = sw.get_img_overlaid() # get the boundary image img_cartoon = sw.get_cartoon() # get the cartoon image grid = ['square', 'hex'][sw.use_hex] root_slash_img_num = os.path.splitext(img_filename)[0] img_num = os.path.split(root_slash_img_num)[1] # fname_res_border = '_'.join([img_num , 'std', str(i_std), 'border', grid+'.png']) # fname_res_cartoon = '_'.join([img_num , 'std', str(i_std), 'mean', grid+'.png']) fname_res_border = '_'.join([ img_num, 'n', '{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std), 'border', grid + '.png' ]) fname_res_cartoon = '_'.join([ img_num, 'n', '{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std), 'mean', grid + '.png' ]) fname_res_border = os.path.join(save_path_root, fname_res_border) fname_res_cartoon = os.path.join(save_path_root, fname_res_cartoon) print('saving', fname_res_border) misc.imsave(fname_res_border, img_overlaid) print('saving', fname_res_cartoon) misc.imsave(fname_res_cartoon, img_cartoon) # save the resulting parameters to MATLAB .mat file # mat_filename = os.path.join(save_path_root , img_num + '_std_'+str(i_std)+'.mat') mat_filename = os.path.join( save_path_root # , img_num + '_std_'+str(i_std)+'.mat') , '_'.join([ img_num, 'n', '{0:03}'.format(nPixels_on_side), 'std', '{0:02}'.format(i_std) + '.mat' ])) print('Saving params to ', mat_filename) pm = sw.superpixels.params sio.savemat( mat_filename, { 'pixel_to_super': sw.seg.cpu, 'count': pm.counts.cpu, 'mu_i': pm.mu_i.cpu, 'mu_s': pm.mu_s.cpu, 'sigma_s': pm.Sigma_s.cpu, 'sigma_i': pm.Sigma_i.cpu }) if (not imgs_of_the_same_size): del sw