{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport cv2\nimport skimage.io\nfrom tqdm.notebook import tqdm\nimport zipfile\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport tifffile","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-10-11T16:46:09.243086Z","iopub.execute_input":"2021-10-11T16:46:09.243365Z","iopub.status.idle":"2021-10-11T16:46:09.247744Z","shell.execute_reply.started":"2021-10-11T16:46:09.243336Z","shell.execute_reply":"2021-10-11T16:46:09.246808Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TRAIN = '../input/prostate-cancer-grade-assessment/train_images/'\nOUT_ZIP = 'tiles_1.zip'\nsz = 112 \nN = 49","metadata":{"execution":{"iopub.status.busy":"2021-10-11T16:46:09.249467Z","iopub.execute_input":"2021-10-11T16:46:09.249982Z","iopub.status.idle":"2021-10-11T16:46:09.261379Z","shell.execute_reply.started":"2021-10-11T16:46:09.249949Z","shell.execute_reply":"2021-10-11T16:46:09.260658Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def tile(img):\n    result = []\n    shape = img.shape\n    pad0,pad1 = (sz - shape[0]%sz)%sz, (sz - shape[1]%sz)%sz\n    img = np.pad(img,[[pad0//2,pad0-pad0//2],[pad1//2,pad1-pad1//2],[0,0]],\n                constant_values=255)\n    img = img.reshape(img.shape[0]//sz,sz,img.shape[1]//sz,sz,3)\n    img = img.transpose(0,2,1,3,4).reshape(-1,sz,sz,3)\n\n    if len(img) < N:\n        img = np.pad(img,[[0,N-len(img)],[0,0],[0,0],[0,0]],constant_values=255)\n    idxs = np.argsort(img.reshape(img.shape[0],-1).sum(-1))[:N]\n    img = img[idxs]\n\n    for i in range(len(img)):\n        result.append({'img':img[i]})\n    return img","metadata":{"execution":{"iopub.status.busy":"2021-10-11T16:46:09.263194Z","iopub.execute_input":"2021-10-11T16:46:09.263692Z","iopub.status.idle":"2021-10-11T16:46:09.274787Z","shell.execute_reply.started":"2021-10-11T16:46:09.263658Z","shell.execute_reply":"2021-10-11T16:46:09.273811Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def concat_tile(im_list_2d):\n    return cv2.vconcat([cv2.hconcat(im_list_h) for im_list_h in im_list_2d])","metadata":{"execution":{"iopub.status.busy":"2021-10-11T16:46:09.275862Z","iopub.execute_input":"2021-10-11T16:46:09.276167Z","iopub.status.idle":"2021-10-11T16:46:09.284209Z","shell.execute_reply.started":"2021-10-11T16:46:09.276135Z","shell.execute_reply":"2021-10-11T16:46:09.283502Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def tiles_num_4x4(tiles):\n    tile_num = []\n    \n    tile_1 = tiles[0]\n    tile_2 = tiles[1]\n    tile_3 = tiles[2]\n    tile_4 = tiles[3]\n    tile_5 = tiles[4]\n    tile_6 = tiles[5]\n    tile_7 = tiles[6]\n    tile_8 = tiles[7]\n    tile_9 = tiles[8]\n    tile_10 = tiles[9]\n    tile_11 = tiles[10]\n    tile_12 = tiles[11]\n    tile_13 = tiles[12]\n    tile_14 = tiles[13]\n    tile_15 = tiles[14]\n    tile_16 = tiles[15]\n\n    im_tiles = concat_tile([[tile_1, tile_2, tile_3, tile_4],\n                       [tile_5, tile_6, tile_7, tile_8],\n                       [tile_9, tile_10, tile_11, tile_12],\n                       [tile_13, tile_14, tile_15, tile_16]])\n    \n    return im_tiles ","metadata":{"execution":{"iopub.status.busy":"2021-10-11T16:46:09.287559Z","iopub.execute_input":"2021-10-11T16:46:09.287772Z","iopub.status.idle":"2021-10-11T16:46:09.297508Z","shell.execute_reply.started":"2021-10-11T16:46:09.287752Z","shell.execute_reply":"2021-10-11T16:46:09.296841Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def tiles_num_7x7(tiles):\n    tile_num = []\n    \n    tile_1 = tiles[0]\n    tile_2 = tiles[1]\n    tile_3 = tiles[2]\n    tile_4 = tiles[3]\n    tile_5 = tiles[4]\n    tile_6 = tiles[5]\n    tile_7 = tiles[6]\n    tile_8 = tiles[7]\n    tile_9 = tiles[8]\n    tile_10 = tiles[9]\n    tile_11 = tiles[10]\n    tile_12 = tiles[11]\n    tile_13 = tiles[12]\n    tile_14 = tiles[13]\n    tile_15 = tiles[14]\n    tile_16 = tiles[15]\n    tile_17 = tiles[16]\n    tile_18 = tiles[17]\n    tile_19 = tiles[18]\n    tile_20 = tiles[19]\n    tile_21 = tiles[20]\n    tile_22 = tiles[21]\n    tile_23 = tiles[22]\n    tile_24 = tiles[23]\n    tile_25 = tiles[24]\n    tile_26 = tiles[25]\n    tile_27 = tiles[26]\n    tile_28 = tiles[27]\n    tile_29 = tiles[28]\n    tile_30 = tiles[29]\n    tile_31 = tiles[30]\n    tile_32 = tiles[31]\n    tile_33 = tiles[32]\n    tile_34 = tiles[33]\n    tile_35 = tiles[34]\n    tile_36 = tiles[35]\n    tile_37 = tiles[36]\n    tile_38 = tiles[37]\n    tile_39 = tiles[38]\n    tile_40 = tiles[39]\n    tile_41 = tiles[40]\n    tile_42 = tiles[41]\n    tile_43 = tiles[42]\n    tile_44 = tiles[43]\n    tile_45 = tiles[44]\n    tile_46 = tiles[45]\n    tile_47 = tiles[46]\n    tile_48 = tiles[47]\n    tile_49 = tiles[48]\n    \n    im_tiles = concat_tile([[tile_1, tile_2, tile_3, tile_4, tile_5, tile_6, tile_7],\n                       [tile_8, tile_9, tile_10, tile_11, tile_12, tile_13, tile_14],\n                       [tile_15, tile_16, tile_17, tile_18, tile_19, tile_20, tile_21],\n                       [tile_22, tile_23, tile_24, tile_25, tile_26, tile_27, tile_28],\n                       [tile_29, tile_30, tile_31, tile_32, tile_33, tile_34, tile_35],\n                       [tile_36, tile_37, tile_38, tile_39, tile_40, tile_41, tile_42],\n                       [tile_43, tile_44, tile_45, tile_46, tile_47, tile_48, tile_49]])\n    \n    return im_tiles ","metadata":{"execution":{"iopub.status.busy":"2021-10-11T16:46:09.29872Z","iopub.execute_input":"2021-10-11T16:46:09.299154Z","iopub.status.idle":"2021-10-11T16:46:09.313516Z","shell.execute_reply.started":"2021-10-11T16:46:09.299122Z","shell.execute_reply":"2021-10-11T16:46:09.312861Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\ntrain=pd.read_csv('/kaggle/input/prostate-cancer-grade-assessment/train.csv')\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2021-10-11T16:46:09.321741Z","iopub.execute_input":"2021-10-11T16:46:09.322286Z","iopub.status.idle":"2021-10-11T16:46:09.348987Z","shell.execute_reply.started":"2021-10-11T16:46:09.322241Z","shell.execute_reply":"2021-10-11T16:46:09.348326Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#name='5801d2195cdcd8d336e8fc097c51a788'\nname = 'f948e5f2b0a49af2c0a7f3f74093262e'\n\nimg = tifffile.imread(TRAIN+name+'.tiff', key=1)\ntiles = tile(img)\nimg_concat = tiles_num_7x7(tiles)\n\nplt.imshow(img_concat)\nimg_concat.shape","metadata":{"execution":{"iopub.status.busy":"2021-10-11T16:46:09.40094Z","iopub.execute_input":"2021-10-11T16:46:09.404228Z","iopub.status.idle":"2021-10-11T16:46:13.192853Z","shell.execute_reply.started":"2021-10-11T16:46:09.404154Z","shell.execute_reply":"2021-10-11T16:46:13.192158Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"im_id = [name for name in train['image_id']]\n\nwith zipfile.ZipFile(OUT_ZIP, 'w') as img_out:\n    for name in tqdm(im_id[8000:]):\n        img = tifffile.imread(TRAIN+name+'.tiff', key=1)\n        tiles = tile(img)\n        img_concat = tiles_num_7x7(tiles)\n        #img_concat = tiles_num_4x4(tiles)\n\n        img = cv2.imencode('.jpg',cv2.cvtColor(img_concat, cv2.COLOR_RGB2BGR))[1]\n        img_out.writestr(f'{name}.jpg', img)","metadata":{"execution":{"iopub.status.busy":"2021-10-11T16:46:13.194354Z","iopub.execute_input":"2021-10-11T16:46:13.194671Z","iopub.status.idle":"2021-10-11T16:46:17.129535Z","shell.execute_reply.started":"2021-10-11T16:46:13.194635Z","shell.execute_reply":"2021-10-11T16:46:17.128441Z"},"trusted":true},"execution_count":null,"outputs":[]}]}