{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import PIL\nimport pandas as pd\nimport numpy as np\nimport os\nimport cv2\nimport glob\nimport scipy\nimport matplotlib.pyplot as plt\nimport matplotlib.patches as patches\nimport skimage.io\nfrom skimage.color import rgb2gray\nfrom skimage.transform import rescale, resize","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"input_path = \"../input/prostate-cancer-grade-assessment\"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_images_path = os.path.join(input_path,\"train_images\")\nimages_im = glob.glob(os.path.join(train_images_path, \"*tiff\"))\nimages_im.sort()\n\ntrain_images_path = os.path.join(input_path,\"train_label_masks\")\nimages_mask = glob.glob(os.path.join(train_images_path, \"*tiff\"))\nimages_mask.sort()\n\nimage_label = pd.read_csv(input_path + \"/train.csv\")[\"image_id\"]\n\ntrain_size = len(images_im)\nmask_size = len(images_mask)\nprint(train_size, mask_size)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"save_extra_images = [None]*(train_size-mask_size)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"t1=str.split(str.split(images_im[200],\"/\")[-1],\".\")[0]\nt2=str.split(str.split(images_mask[200],\"/\")[-1],\"_\")[0]\n\nprint(t1)\nprint(t2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"images_im_2nd = images_im\n\n\nprint(\"Mask count :\"+ str(len(images_mask)))\nprint(\"Image before removal :\"+ str(len(images_im)))\nj=0\nfor i in range(len(images_mask)):\n    t1=str.split(str.split(images_im_2nd[i],\"/\")[-1],\".\")[0]\n    t2=str.split(str.split(images_mask[i],\"/\")[-1],\"_\")[0]\n    #print(i)\n    if t1!=t2: \n        save_extra_images[j] = images_im_2nd[i]\n        images_im_2nd.remove(images_im_2nd[i])\n        i=i-1\n        j+=1\nprint(\"Image after removal :\"+ str(len(images_im_2nd)))\nprint(\"Images without masks : \"+str(train_size-mask_size)+ \".. 5 are listed below :\")\nprint(save_extra_images[:5])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"t1=str.split(str.split(images_im_2nd[200],\"/\")[-1],\".\")[0]\nt2=str.split(str.split(images_mask[200],\"/\")[-1],\"_\")[0]\n\nprint(t1)\nprint(t2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"a= skimage.io.MultiImage(images_mask[11])\n\na=rgb2gray(a[2])\nplt.imshow(a)\nfor i in range(1,25):\n    b= skimage.io.MultiImage(images_mask[i])\n    b= rgb2gray(b[2])    \n    a= np.unique(a)\n    b= np.unique(b)\n    #print(a, b)\n    c= np.concatenate((a,b),axis=0)\n    #print(c)\n    c= np.sort(np.unique(c))\n    a= c\nprint(c)\n    #print(\"***************\")\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"AND_pic() does element wise multiplication between masks and images","execution_count":null},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"def AND_pic(instance, c=c, images_im_2nd=images_im_2nd, images_mask=images_mask, plot_it=True):\n    sample= skimage.io.MultiImage(images_im_2nd[instance])\n    sample=sample[2]\n    sample2= skimage.io.MultiImage(images_mask[instance])\n    sample2=rgb2gray(sample2[2])\n    \n    c1= (c[1]+c[0])/2\n    binary_mask= (sample2>c1)*1\n    \n    #print(sample.shape)\n    #print(sample2.shape)\n    #print(binary_mask.shape)\n    binary_mask_3d = np.zeros((sample.shape[0],sample.shape[1],sample.shape[2]))\n    for i in range(3):\n        binary_mask_3d[:,:,i]= binary_mask\n\n    sample_masked = np.multiply(sample,binary_mask_3d).astype(int)\n    if plot_it:\n        plt.imshow(sample_masked)\n        plt.show()\n        plt.imshow(sample)\n    return sample_masked, binary_mask","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"def b_box_gen(binary_array):\n    x_sum = np.sum(binary_array,axis=0)\n    x1 = np.argmax((x_sum >0.5)*1)\n    noise= np.array(range(len(x_sum))) * 1e-15\n    x2 = np.argmax(((x_sum >0.5)*1)+noise)\n    y_sum = np.sum(binary_array,axis=1)\n    y1 = np.argmax((y_sum >0.5)*1)\n    noise= np.array(range(len(y_sum))) * 1e-15\n    y2 = np.argmax(((y_sum >0.5)*1)+noise)\n    \"\"\"\n    add_x = (x2-x1)*0.001//1\n    add_y = (y2-y1)*0.001//1\n    x1-= add_x\n    x2+= add_x\n    y1-= add_y\n    y2+= add_y\n    \"\"\"\n    return x1, y1, x2, y2\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sample_masked, binary_mask= AND_pic(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"def square_image(img, target, plot_it= True):\n     \n    if len(img.shape)%2:\n        img= scipy.ndimage.zoom(img, ((target)/img.shape[0],(target)/img.shape[1], 1))\n    else:\n        factor= 0.08\n        enlarge = target/factor\n        img = resize(img, (enlarge,enlarge), anti_aliasing=True)\n        img = rescale(img, factor,  anti_aliasing=False)\n        img = (img>((np.min(img)+np.max(img))/2))*1\n    if plot_it:\n        plt.imshow(img)\n        plt.show()\n    \n    return img","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"square_image() resizes and scales all mask and main images with target size","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"target = 250\nbinary_mask_2 = square_image(binary_mask, target)\nsample_masked_2 = square_image(sample_masked, target)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"x1, y1, x2, y2 = b_box_gen(binary_mask_2)\n\nfig,ax = plt.subplots(1)\nax.imshow(sample_masked_2)\nrect = patches.Rectangle((x1,y1),x2-x1,y2-y1,linewidth=1,edgecolor='r',facecolor='none')\nax.add_patch(rect)\n\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"def final_box_gen(instance, target, plot_it= False):\n    sample, binary= AND_pic(instance,  plot_it = plot_it)\n    binary_2 = square_image(binary, target, plot_it = plot_it)\n    sample_2 = square_image(sample, target, plot_it = plot_it)\n    x1, y1, x2, y2 = b_box_gen(binary_2)\n    box = np.zeros((4,1))\n    box[:,0] = [x1, y1, x2, y2]\n    if plot_it:\n        fig,ax = plt.subplots(1)\n        ax.imshow(sample_2)\n        rect = patches.Rectangle((x1,y1),x2-x1,y2-y1,linewidth=1,edgecolor='r',facecolor='none')\n        ax.add_patch(rect)\n        plt.show()\n    \n    return sample_2, box","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"final_box_gen() generates the \"AND\" pics as well as provides bbox corner coordinates ","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"target_image_size = 300\nexample, box = final_box_gen(0, target_image_size, False)\n\n#print(example.shape)\n#print(box.shape)\n#print(len(images_im_2nd))\n\ntotal_x_data = np.zeros((len(images_im_2nd), target_image_size, target_image_size, 3 ), dtype=int)\ntotal_y_data = np.zeros((len(images_im_2nd), 4, 1))\n\n\nfor i in range(500):          #use range(len(images_im_2nd)) for full dataset\n    if i==774 or i==5211:        \n        continue \n                               # these data samples have mismatched image and mask shape...\n                               # you may fix it by reshaping them...I skipped it\n    total_x_data[i,:,:,:], total_y_data[i,:,:] = final_box_gen(i, target_image_size, False)\n    #total_x_data[i,:,:,:] = total_x_data[i,:,:,:].astype(int)\n    print(\"Entry : \"+str(i)+\" : \"+str.split(str.split(images_im_2nd[i],\"/\")[-1],\".\")[0])\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"save_dir = \"/kaggle/a_images/\"\nos.makedirs(save_dir, exist_ok=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}