{"cells":[{"cell_type":"markdown","metadata":{"_cell_guid":"f737e392-8e3b-9df2-015c-1cce34461f46"},"source":"# import module"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"a7c48600-ab00-773a-17ed-6db1574225a2"},"outputs":[],"source":"import numpy as np\nimport pandas as pd\nimport os\nimport cv2\nimport matplotlib.pyplot as plt\nimport skimage.feature\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import LabelBinarizer\n%matplotlib inline\n\n#from subprocess import check_output\n#print(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))"},{"cell_type":"markdown","metadata":{"_cell_guid":"25e3768d-6750-1813-865d-29684e68c000"},"source":"# read files"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"42141a0c-471d-067e-febc-ec91b3e53faa"},"outputs":[],"source":"file_names = os.listdir(\"../input/Train/\")\nfile_names = sorted(file_names, key=lambda \n                    item: (int(item.partition('.')[0]) if item[0].isdigit() else float('inf'), item))\n\n# select a subset of files to run on\nfile_names = file_names[0:1]"},{"cell_type":"markdown","metadata":{"_cell_guid":"54f51d74-c5ad-6d1f-8055-eb8b0169d16f"},"source":"# generate sub_image_template"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"c2b85f33-3109-8ad3-5fa5-42231e9d84b4"},"outputs":[],"source":"Sub_Im_Size = (416,416)\n\nimage_tmp = cv2.imread(\"../input/TrainDotted/\" + file_names[0])\nimage_tmp = image_tmp[:Sub_Im_Size[1],:Sub_Im_Size[0],:]\nimage_tmp = cv2.absdiff(image_tmp,image_tmp)\n\nplt.imshow(cv2.cvtColor(image_tmp, cv2.COLOR_BGR2RGB))\ncv2.imwrite('sub_im_template.png',image_tmp)"},{"cell_type":"markdown","metadata":{"_cell_guid":"1a5b6b37-1d6f-bee7-93ee-9e008a77cc55"},"source":"# parse image"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"64400b9d-133d-c272-a645-df7a9f2bf701"},"outputs":[],"source":"def get_blobs(filename):\n    # read the Train and Train Dotted images\n    image_1 = cv2.imread(\"../input/TrainDotted/\" + filename)\n    image_2 = cv2.imread(\"../input/Train/\" + filename)\n    \n    # absolute difference between Train and Train Dotted\n    image_3 = cv2.absdiff(image_1,image_2)\n    \n    # mask out blackened regions from Train Dotted\n    mask_1 = cv2.cvtColor(image_1, cv2.COLOR_BGR2GRAY)\n    mask_1[mask_1 < 20] = 0\n    mask_1[mask_1 > 0] = 255\n    \n    mask_2 = cv2.cvtColor(image_2, cv2.COLOR_BGR2GRAY)\n    mask_2[mask_2 < 20] = 0\n    mask_2[mask_2 > 0] = 255\n    \n    image_3 = cv2.bitwise_or(image_3, image_3, mask=mask_1)\n    image_3 = cv2.bitwise_or(image_3, image_3, mask=mask_2) \n    \n    # convert to grayscale to be accepted by skimage.feature.blob_log\n    image_3 = cv2.cvtColor(image_3, cv2.COLOR_BGR2GRAY)\n    \n    # detect blobs\n    blobs = skimage.feature.blob_log(image_3, min_sigma=3, max_sigma=4, num_sigma=1, threshold=0.02)\n    \n    return blobs"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"a572ee0a-bedf-6f14-3d41-5bcf99ad928c"},"outputs":[],"source":"def get_xy_range_basic(size):\n    ### x_left, x_right, y_up, y_down\n    return (size,size,size,size)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"a3d7fbf8-93dc-11dc-460a-c97bbac29e63"},"outputs":[],"source":"def parse_image(filename):\n    ### get original image\n    ori_image = cv2.imread(\"../input/Train/\" + filename)\n    \n    ### get coordinate of all sea lions\n    Dict_range = {}\n    blobs = get_blobs(filename)\n    \n    for blob in blobs:\n        # get the coordinates for each blob\n        y, x, s = blob\n        \n        xy_range = get_xy_range_basic(size=16)\n        Dict_range[(x,y)] = xy_range\n    \n    ### output sub_image and annotation file for each blob\n    for key in Dict_range.keys():\n        if(key in Dict_range):\n            # get x, y, xy_range in original image\n            main_x = key[0]\n            main_y = key[1]\n            xy_range = Dict_range[key]\n            \n            ### get basic sub_image\n            sub_image = cv2.imread('sub_im_template.png')            \n            sub_x_center = sub_image.shape[1]/2\n            sub_y_center = sub_image.shape[0]/2\n            sub_image[sub_y_center-xy_range[2]:sub_y_center+xy_range[3], sub_x_center-xy_range[0]:sub_x_center+xy_range[1], :] = ori_image[main_y-xy_range[2]:main_y+xy_range[3], main_x-xy_range[0]:main_x+xy_range[1], :]\n            \n            plt.imshow(cv2.cvtColor(sub_image, cv2.COLOR_BGR2RGB))\n            break\n            \n            \"\"\"\n            ###\n            x_min = main_x - sub_image.shape[1]/2 + 1\n            x_max = main_x + sub_image.shape[1]/2 - 1\n            y_min = main_y - sub_image.shape[0]/2 + 1\n            y_max = main_y + sub_image.shape[0]/2 - 1\n            \n\n            sub_x_center = sub_image.shape[1]/2\n            sub_y_center = sub_image.shape[0]/2\n            sub_image[sub_im_y_center:]\n            \n            if()\n            \n            \n            \n                        cv2.imwrite('sub_im_template.png',image_tmp)\n            \"\"\""},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"da1eea50-2aa3-2713-2e24-19292b2a7d0a"},"outputs":[],"source":"parse_image(file_names[0])"}],"metadata":{"_change_revision":0,"_is_fork":false,"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.0"}},"nbformat":4,"nbformat_minor":0}