def include_image_level_features(orig_imga,fvector_l,featsel): # include grayscale values ? f_input_gray = featsel['input_gray'] if f_input_gray is not None: shape = f_input_gray #print orig_imga.shape fvector_l += [sp.misc.imresize(colorconv.gray_convert(orig_imga), shape).ravel()] # include color histograms ? f_input_colorhists = featsel['input_colorhists'] if f_input_colorhists is not None: nbins = f_input_colorhists colorhists = sp.empty((3,nbins), 'f') if orig_imga.ndim == 3: for d in xrange(3): h = sp.histogram(orig_imga[:,:,d].ravel(), bins=nbins, range=[0,255]) binvals = h[0].astype('f') colorhists[d] = binvals else: raise ValueError, "orig_imga.ndim == 3" #h = sp.histogram(orig_imga[:,:].ravel(), # bins=nbins, # range=[0,255]) #binvals = h[0].astype('f') #colorhists[:] = binvals #feat_l += [colorhists.ravel()] fvector_l += [colorhists.ravel()] return fvector_l
def image_preprocessing(arr,params): arr = sp.atleast_3d(arr) smallest_edge = min(arr.shape[:2]) rep = params preproc_lsum = rep['preproc']['lsum_ksize'] if preproc_lsum is None: preproc_lsum = 1 smallest_edge -= (preproc_lsum-1) normin_kshape = rep['normin']['kshape'] smallest_edge -= (normin_kshape[0]-1) filter_kshape = rep['filter']['kshape'] smallest_edge -= (filter_kshape[0]-1) normout_kshape = rep['normout']['kshape'] smallest_edge -= (normout_kshape[0]-1) pool_lsum = rep['pool']['lsum_ksize'] smallest_edge -= (pool_lsum-1) arrh, arrw, _ = arr.shape if smallest_edge <= 0 and rep['conv_mode'] == 'valid': if arrh > arrw: new_w = arrw - smallest_edge + 1 new_h = int(np.round(1.*new_w * arrh/arrw)) print new_w, new_h raise elif arrh < arrw: new_h = arrh - smallest_edge + 1 new_w = int(np.round(1.*new_h * arrw/arrh)) print new_w, new_h raise else: pass # TODO: finish image size adjustment assert min(arr.shape[:2]) > 0 # use the first 3 channels only orig_imga = arr.astype("float32")[:,:,:3] # make sure that we don't have a 3-channel (pseudo) gray image if orig_imga.shape[2] == 3 \ and (orig_imga[:,:,0]-orig_imga.mean(2) < 0.1*orig_imga.max()).all() \ and (orig_imga[:,:,1]-orig_imga.mean(2) < 0.1*orig_imga.max()).all() \ and (orig_imga[:,:,2]-orig_imga.mean(2) < 0.1*orig_imga.max()).all(): orig_imga = sp.atleast_3d(orig_imga[:,:,0]) # rescale to [0,1] #print orig_imga.min(), orig_imga.max() if orig_imga.min() == orig_imga.max(): raise MinMaxError("[ERROR] orig_imga.min() == orig_imga.max() " "orig_imga.min() = %f, orig_imga.max() = %f" % (orig_imga.min(), orig_imga.max()) ) orig_imga -= orig_imga.min() orig_imga /= orig_imga.max() # -- color conversion # insure 3 dims #print orig_imga.shape if orig_imga.ndim == 2 or orig_imga.shape[2] == 1: orig_imga_new = sp.empty(orig_imga.shape[:2] + (3,), dtype="float32") orig_imga.shape = orig_imga_new[:,:,0].shape orig_imga_new[:,:,0] = 0.2989*orig_imga orig_imga_new[:,:,1] = 0.5870*orig_imga orig_imga_new[:,:,2] = 0.1141*orig_imga orig_imga = orig_imga_new if params['color_space'] == 'rgb': orig_imga_conv = orig_imga # elif params['color_space'] == 'rg': # orig_imga_conv = colorconv.rg_convert(orig_imga) elif params['color_space'] == 'rg2': orig_imga_conv = colorconv.rg2_convert(orig_imga) elif params['color_space'] == 'gray': orig_imga_conv = colorconv.gray_convert(orig_imga) orig_imga_conv.shape = orig_imga_conv.shape + (1,) elif params['color_space'] == 'opp': orig_imga_conv = colorconv.opp_convert(orig_imga) elif params['color_space'] == 'oppnorm': orig_imga_conv = colorconv.oppnorm_convert(orig_imga) elif params['color_space'] == 'chrom': orig_imga_conv = colorconv.chrom_convert(orig_imga) # elif params['color_space'] == 'opponent': # orig_imga_conv = colorconv.opponent_convert(orig_imga) # elif params['color_space'] == 'W': # orig_imga_conv = colorconv.W_convert(orig_imga) elif params['color_space'] == 'hsv': orig_imga_conv = colorconv.hsv_convert(orig_imga) else: raise ValueError, "params['color_space'] not understood" return orig_imga,orig_imga_conv