In [1]:
%matplotlib inline
from __future__ import print_function
import matplotlib.pyplot as plt

from keras.models import Sequential
from keras.layers.core import Flatten, Dense, Dropout
from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D
from keras.optimizers import SGD
import numpy as np
import os


Using TensorFlow backend.

In [2]:
DATA = lambda p: os.path.join('../datafiles', p)

def myimread(fname):
    import skimage.io, skimage.transform
    im = skimage.transform.resize(skimage.io.imread(fname), (224, 224))
    return im[...,::-1]*255

def myimshow(im):
    plt.figure(figsize=(7,7))
    plt.imshow(im[...,::-1]/255)
    
def myimshow_grey(im):
    plt.figure(figsize=(7,7))
    plt.imshow(im, cmap=plt.get_cmap('gray'), vmin=0, vmax=255)

test_im = myimread(DATA('zed-subset/556-left.jpeg'))
print(test_im.shape)

myimshow(test_im)
myimshow(test_im[:100,:100,:])


(224, 224, 3)

In [3]:
def fmean_c2g(input_im):
    model = Sequential()
    model.add(Convolution2D(1, 3, 3, activation='relu', input_shape=(3,224,224), weights=(
        np.ones((1,3,3,3))*(1./9/3), # weights: (#filters, #channels, #rows, #cols)
        np.zeros(1) # biases: (#filters, )
    ), border_mode='same'))
    
    def mypreprocess(i):
        out = i.copy()
    #     out[:] -= np.array([103.939, 116.779, 123.68])
        return np.expand_dims(out.transpose((2,0,1)), axis=0)

    def mypostprocess(i):
        return i[0][0]
    
    output_im = mypostprocess(model.predict(mypreprocess(input_im)))
#     print(input_im.shape, output_im.shape)
    return output_im

myimshow_grey(fmean_c2g(test_im))



In [3]:
def color2grey(input_im):
    model = Sequential()
    model.add(Convolution2D(1, 1, 1, activation='relu', input_shape=(3,224,224), weights=(
        np.ones((1,3,1,1))*(1./3), # weights: (#filters, #channels, #rows, #cols)
        np.zeros(1) # biases: (#filters, )
    ), border_mode='same'))
    
    def mypreprocess(i):
        out = i.copy()
    #     out[:] -= np.array([103.939, 116.779, 123.68])
        return np.expand_dims(out.transpose((2,0,1)), axis=0)

    def mypostprocess(i):
        return i[0][0]
    
    output_im = mypostprocess(model.predict(mypreprocess(input_im)))
#     print(input_im.shape, output_im.shape)
    return output_im

myimshow_grey(color2grey(test_im))



In [5]:
def fmean(input_im):
    model = Sequential()
    model.add(Convolution2D(1, 3, 3, activation='relu', input_shape=(1,224,224), weights=(
        np.ones((1,1,3,3))*(1./9), # weights: (#filters, #channels, #rows, #cols)
        np.zeros(1) # biases: (#filters, )
    ), border_mode='same'))
    
    def mypreprocess(i):
        out = i.copy()
        return np.expand_dims(out[np.newaxis,...], axis=0)

    def mypostprocess(i):
        return i[0][0]
    
    output_im = mypostprocess(model.predict(mypreprocess(input_im)))
#     print(input_im.shape, output_im.shape)
    return output_im

myimshow_grey(fmean(color2grey(test_im)))
myimshow_grey(fmean(fmean(color2grey(test_im)))) # more blury



In [6]:
def guidedFilter(im, guidance, radius = 3, regularization = 0.16):
    p = color2grey(im)/255
    I = color2grey(guidance)/255
    mean_p, mean_I = fmean(p), fmean(I)
    corr_I, corrIp = fmean(I*I), fmean(I*p)
    var = corr_I - mean_I*mean_I
    cov = corrIp - mean_I*mean_p
    a = cov / (var + regularization)
    b = mean_p - a*mean_I
    return (fmean(a)*I+fmean(b))*255

greyimg = color2grey(test_im)
filtered = guidedFilter(test_im, test_im)
# myimshow_grey(greyimg)
myimshow_grey(filtered)
# myimshow_grey(abs(greyimg-filtered))
myimshow_grey(abs(fmean(greyimg)-filtered))


What would random convolution to an image?


In [17]:
def frandom(input_im):
    model = Sequential()
    model.add(Convolution2D(1, 3, 3, activation='relu', input_shape=(1,224,224), border_mode='same'))
    
    print(model.get_weights()[0])
    
    def mypreprocess(i):
        out = i.copy()
        return np.expand_dims(out[np.newaxis,...], axis=0)

    def mypostprocess(i):
        return i[0][0]
    
    output_im = mypostprocess(model.predict(mypreprocess(input_im)))
#     print(input_im.shape, output_im.shape)
    return output_im

for i in xrange(4):
    myimshow_grey(frandom(color2grey(test_im)))


[[[[ 0.5416255  -0.50732088 -0.06415337]
   [ 0.18428761  0.18302739  0.53992641]
   [-0.15382352  0.26868105  0.16384727]]]]
[[[[ 0.55272114  0.23376226  0.05456418]
   [-0.42011976 -0.28717652  0.52336049]
   [ 0.37299752 -0.04217643 -0.45004934]]]]
[[[[-0.1724031  -0.12824726 -0.16158813]
   [ 0.57280874 -0.34196907  0.02861005]
   [ 0.15826827  0.33719355 -0.33033288]]]]
[[[[ 0.16509467  0.39473289  0.5318141 ]
   [ 0.39905488  0.41786432 -0.24524748]
   [-0.13556561 -0.3790586   0.20728731]]]]

In [ ]: