Exemple #1
0
def texturekernel(imgs, metric=libpil.onenorm_inverse, cachedfn="texture_kernel.pkl"):
    if os.path.exists(cachedfn):
        return numpy.load(cachedfn)
    n_imgs = len(imgs)
    # calculation of kernel
    kernel = numpy.zeros((n_imgs, n_imgs))
    for i in xrange(n_imgs):
        arr1 = libpil.PIL2array(imgs[i])
        gray1 = libpil.rgbarr2gray(arr1)
        for j in xrange(i):
            arr2 = libpil.PIL2array(imgs[j])
            gray2 = libpil.rgbarr2gray(arr2)
            kernel[i, j] = metric(libpil.laphist(gray1), libpil.laphist(gray2))
    kernel = kernel + numpy.transpose(kernel)
    print kernel
    return kernel
Exemple #2
0
def main():
    image_folder = get_image_folder()
    imgfiles = glob.glob(os.path.join(image_folder, "*.jpg"))
    imgs = map(libpil.loadImage, imgfiles)
    if "color" in sys.argv:
        color_kernel = colorkernel(imgs, metric=libpil.onenorm_inverse)
        output_compare_imgs(imgs, color_kernel, outfilename="color.png")
        color_kernel.dump("color_kernel.pkl")
    if "texture" in sys.argv:
        texture_kernel = texturekernel(imgs)
        output_compare_imgs(imgs, texture_kernel, outfilename="texture.png")
        texture_kernel.dump("texture_kernel.pkl")

    if "color" in sys.argv and "texture" in sys.argv:
        # 1-norm kernel normalization
        color_kernel /= max(color_kernel.sum(1))
        texture_kernel /= max(texture_kernel.sum(1))
        for s in xrange(0, 11, 2):
            r = s * 0.1
            kernel = texture_kernel * r + (1 - r) * color_kernel
            kernel /= kernel.max()
            output_compare_imgs(imgs, kernel, outfilename="r%.1f.png" % (r,))
            for method in ("single", "complete"):
                output_dendrogram(imgs, kernel, method=method, dend_fn="r%.1f_dendrogram.png" % (r,))

    if "scatter" in sys.argv:
        n_imgs = len(imgs)
        dominant_colors = numpy.zeros((n_imgs,))
        for i in xrange(n_imgs):
            hue = libpil.rgbarr2hsvarr(libpil.PIL2array(imgs[i]))[0]
            histhue, edges = libpil.hist(hue, bins=40, rang=(0, 1))
            bincenters = 0.5 * (edges[1:] + edges[:-1])
            print "dominant hue:", bincenters[histhue.argmax()]
            dominant_colors[i] = bincenters[histhue.argmax()]
        total_textures = numpy.zeros((n_imgs,))
        for i in xrange(n_imgs):
            lapimg = libpil.lapacian(libpil.rgbarr2gray(libpil.PIL2array(imgs[i])))
            lapimg = lapimg.flatten()
            meadtext = numpy.median(numpy.abs(lapimg))
            print "meandian texture:", meadtext
            total_textures[i] = meadtext

        libpil.scatterplot(dominant_colors, total_textures, imgs)