{"cells":[{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"df0e4a2a-341a-96d8-04fa-2cbff60047cc"},"outputs":[],"source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nfrom subprocess import check_output\nprint(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))\n\n# Any results you write to the current directory are saved as output."},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"625c281c-effe-14d9-2235-708bde4fc3b3"},"outputs":[],"source":"## libraries\n\nimport numpy as np\nimport pandas as pd\nimport os\nimport cv2\nimport matplotlib.pyplot as plt\nimport skimage.feature\n%matplotlib inline\nfrom PIL import Image\n\nfile_names = os.listdir(\"../input/Train/\")\nfilename = file_names[0]\nimage_0_tr = cv2.imread(\"../input/TrainDotted/\" + filename)\nimage_0 = cv2.imread(\"../input/Train/\" + filename)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"c4666657-8608-70b3-7263-f4d6a84ed6ef"},"outputs":[],"source":"mask_0 = cv2.cvtColor(image_0_tr, cv2.COLOR_BGR2GRAY)\n#mask_0[mask_0 < 20] = 0\n#mask_0[mask_0 > 0] = 255\n#mask_1\n#cv2.imwrite('mask_0',mask_0)\n#cv2.imshow('mask_0',mask_0)\n\n\nimage_0_df = cv2.absdiff(image_0,image_0_tr)\nimage_0_df = Image.fromarray(image_0_df, 'RGB')\nimage_0_df"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"f1200bd9-ae1e-975d-8c66-9f0e8123831d"},"outputs":[],"source":"boundaries = [\n    ([80, 1, 1], [ 255, 50, 50]),\n    ([ 1, 80, 1], [ 50, 255, 50]),\n    ([1, 1, 80], [  50, 50, 255]),\n    ([80, 1, 80], [ 255, 50, 255]),\n    ([60, 20, 1], [ 155, 70, 20])\n]"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"df60b02c-f488-fd4e-2b90-61ca37f0f3bf"},"outputs":[],"source":"#### code based on the web: http://www.pyimagesearch.com/2014/08/04/opencv-python-color-detection/\n# import the necessary packages\nimport numpy as np\nimport cv2\nimport os\nfrom PIL import Image\nfile_names = os.listdir(\"../input/Train/\")\nfilename = file_names[3]\nimage_0_tr = cv2.imread(\"../input/TrainDotted/\" + filename)\nimage_0 = cv2.imread(\"../input/Train/\" + filename)\nimage_0_df = cv2.absdiff(image_0,image_0_tr)\n# define the list of boundaries, red, blue, yellow = [25, 146, 190], [62, 174, 250], and gray= [103, 86, 65], [145, 133, 128], \n#BGR, mangeta RGB: 255,0,255, brown : 139,69,19 \n## ,([80, 10, 90], [220, 88, 220]), [3, 10, 65], [50, 80, 150])\nboundaries = [\n    ([90, 1, 1], [ 255, 50, 50]),\n    \n    ([90, 1, 90], [ 255, 50, 255]),\n    ([90, 20, 1], [ 155, 70, 20]),\n   \n    ([1, 1, 80], [  50, 50, 255]),\n     ([ 1, 80, 1], [ 50, 255, 50])\n]\n# loop over the boundaries\ncounter = 0\ncont = []\nkernel = np.ones((2,2),np.uint8)\nkernel1 = np.ones((4,4),np.uint8)\nkernel2 =np.ones((5,5),np.uint8)\nfor (lower, upper) in boundaries: \n    lower = np.array(lower, dtype = \"uint8\")\n    upper = np.array(upper, dtype = \"uint8\")\n    mask_tr = cv2.inRange(image_0_tr, lower, upper)\n    mask = cv2.inRange(image_0, lower, upper)\n    mask = cv2.dilate(mask,kernel2,iterations = 1)\n    ## i can create a second mask based on the im_\n    output1 = cv2.bitwise_or(image_0_tr, image_0_tr, mask = 255 - mask)\n    output = cv2.bitwise_or(output1, output1, mask = mask_tr) ## it needs some filling.\n    output2 = cv2.cvtColor(output, cv2.COLOR_BGR2GRAY)\n    #erosion = cv2.erode(output2,kernel,iterations = 1)\n    #dilation = cv2.dilate(erosion,kernel,iterations = 1)\n    opening = cv2.morphologyEx(output2, cv2.MORPH_CLOSE, kernel1)\n    opening = cv2.morphologyEx(opening, cv2.MORPH_OPEN, kernel)\n    ret,thresh = cv2.threshold(opening,20,255,0)\n    im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)\n    cont.append(len(contours))\n    counter = counter + 1\ncont"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"83faaf33-44f4-5cdd-750c-113a9a956b35"},"outputs":[],"source":"Image.fromarray(im2)\n"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"9052badc-9b41-cda9-deac-6d08c36b96a0"},"outputs":[],"source":"reference = pd.read_csv('../input/Train/train.csv')\nreference.ix[0:10]\n"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"5819a479-c87f-8436-62ac-fd31d2dd3519"},"outputs":[],"source":""}],"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}