In [ ]:
import glob
import os
import matplotlib.pyplot as plt
import skimage
import numpy as np
import itertools
import scipy.misc
from skimage import io
import time
import cv2
from image_processing.img_util import show_image
In [ ]:
photos = glob.glob("/hackzurich2017/data/initial_cellphone/*.jpg")
In [ ]:
for i, photo_fname in enumerate(photos):
description = "{}: {}".format(i, photo_fname)
photo = scipy.misc.imread(photo_fname)
show_image(photo, description, side=3)
In [ ]:
grain_only = scipy.misc.imread(photos[25])
show_image(grain_only)
mixed = scipy.misc.imread(photos[9])
show_image(mixed)
In [ ]:
def threshold(img, lower=20, upper=60):
# threshold on hue channel of HSV
hsv_img = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
channel_img = hsv_img[:, :, 0]
return cv2.inRange(channel_img, lower, upper)
for image in [grain_only, mixed]:
show_image(threshold(image))
In [ ]:
def overlay_on_background(fg_img, bg_img, mask):
idx = (mask != 0)
ret = bg_img.copy()
ret[idx] = fg_img[idx]
return ret
bkg = mixed.copy()
bkg[:] = (255, 105, 180) # pink
# blue_screen = io.imread('/hackzurich2017/data/blue_screen.png')
# blue_screen = blue_screen[:,:,0:3]
# bkg = cv2.resize(blue_screen, (mixed.shape[1], mixed.shape[0]))
def remove_grains(img, erode_r=5, dilate_r=40):
threshed = threshold(img)
show_image(overlay_on_background(img, bkg, threshed))
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(erode_r, erode_r))
remove_small = cv2.erode(threshed, kernel)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(dilate_r, dilate_r))
restore_large = cv2.dilate(remove_small, kernel)
return overlay_on_background(img, bkg, restore_large)
show_image(remove_grains(grain_only))
In [ ]:
print mixed.shape[0:2]
cv2.resize?
In [ ]: