In [1]:
def row(img2d):
    return np.shape(img2d)[0]
    
def col(img2d):
    return np.shape(img2d)[1]

def layer_mean(img2d):
    img1d = img2d[img2d<255]
    return img1d.mean()

def hist_max(img2d):
    img1d = img2d[img2d<255]
    [n, bins, patches]= plt.hist(img1d, np.arange(255))
    return bins[n.argmax()]

def edge_length(img2d):
    "gray input"
    imgsize = float((img2d.shape[0]*img2d.shape[1]))
    med_filter = ndimg.median_filter(img2d, size = (5,5))
    edges = filter.canny(med_filter,3)
    return edges.sum()/imgsize

def edge_sobel_h(img2d):
    "gray input"
    imgsize = float((img2d.shape[0]*img2d.shape[1]))
    med_filter = ndimg.median_filter(img2d, size = (5,5))
    edges_h = filter.hsobel(med_filter/255.)
    return edges_h.sum()/imgsize

def edge_sobel_v(img2d):
    "gray input"
    imgsize = float((img2d.shape[0]*img2d.shape[1]))
    med_filter = ndimg.median_filter(img2d, size = (5,5))
    edges_v = filter.vsobel(med_filter/255.)
    return edges_v.sum()/imgsize

def edge_sobel(img2d):
    "gray input"
    imgsize = float((img2d.shape[0]*img2d.shape[1]))
    med_filter = ndimg.median_filter(img2d, size = (5,5))
    edges = filter.sobel(med_filter/255.)
    return edges.sum()/imgsize

def houghLine(img2d):
    "gray input"
    med_filter = ndimg.median_filter(img2d, size = (5,5))
    edges = filter.sobel(med_filter/255.)
    [H,theta,distances] = transform.hough_line(edges);
    imgsize = float(len(theta)*len(distances))
    return H.sum()/imgsize

def cate_extract(image_path):
    cate_temp = image_path.replace(MYDIRECTORY,'')
    cate = re.search(r'/.+?/', cate_temp)
    return cate_map[cate.group()[1:-1]]

def features(image_path):
    #red mean
    img2d = ndimg.imread(image_path)
    img2d_gray = ndimg.imread(image_path, flatten= True)
    
    row_n = row(img2d_gray)
    col_n = col(img2d_gray)
    
    red_mean = layer_mean(img2d[...,0])
    green_mean = layer_mean(img2d[...,1])
    blue_mean = layer_mean(img2d[...,2])
    gray_mean = layer_mean(img2d_gray)
    
    red_most = hist_max(img2d[...,0])
    green_most = hist_max(img2d[...,1])
    blue_most = hist_max(img2d[...,2])
    gray_most = hist_max(img2d_gray)
    
    length = edge_length(img2d_gray)
    sobel_h = edge_sobel_h(img2d_gray)
    sobel_v = edge_sobel_v(img2d_gray)
    sobel = edge_sobel(img2d_gray)
    hough = houghLine(img2d_gray)
    
    cate = cate_extract(image_path)
#    return list([red_mean, green_mean])

    return list([row_n, col_n, red_mean, green_mean, blue_mean, gray_mean,\
                     red_most,green_most,blue_most, gray_most,\
                     length, sobel_h, sobel_v, sobel, hough, cate])

In [ ]: