{"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","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-10-07T22:28:10.124923Z","iopub.execute_input":"2021-10-07T22:28:10.125432Z","iopub.status.idle":"2021-10-07T22:28:10.724775Z","shell.execute_reply.started":"2021-10-07T22:28:10.125332Z","shell.execute_reply":"2021-10-07T22:28:10.723982Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TRAIN = '../input/prostate-cancer-grade-assessment/train_images/'\nOUT_ZIP = 'tiles_7x7_8.zip'\n\n# magnification level [0] enter original value\n# magnification level [1] multiply the original value x4\n# magnification level [2] multiply the original value x16\nsz = 448 #level[1] of 112\nN = 49","metadata":{"execution":{"iopub.status.busy":"2021-10-07T22:28:10.726479Z","iopub.execute_input":"2021-10-07T22:28:10.726748Z","iopub.status.idle":"2021-10-07T22:28:10.730634Z","shell.execute_reply.started":"2021-10-07T22:28:10.726714Z","shell.execute_reply":"2021-10-07T22:28:10.72998Z"},"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-07T22:28:10.731965Z","iopub.execute_input":"2021-10-07T22:28:10.732421Z","iopub.status.idle":"2021-10-07T22:28:10.744237Z","shell.execute_reply.started":"2021-10-07T22:28:10.732387Z","shell.execute_reply":"2021-10-07T22:28:10.743341Z"},"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-07T22:28:10.745588Z","iopub.execute_input":"2021-10-07T22:28:10.745898Z","iopub.status.idle":"2021-10-07T22:28:10.752908Z","shell.execute_reply.started":"2021-10-07T22:28:10.745865Z","shell.execute_reply":"2021-10-07T22:28:10.752199Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def tiles_num_4x4(tiles):\n    tile_num = []\n    \n    tile_1 = cv2.resize(tiles[0], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_2 = cv2.resize(tiles[1], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_3 = cv2.resize(tiles[2], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_4 = cv2.resize(tiles[3], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_5 = cv2.resize(tiles[4], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_6 = cv2.resize(tiles[5], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_7 = cv2.resize(tiles[6], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_8 = cv2.resize(tiles[7], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_9 = cv2.resize(tiles[8], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_10 = cv2.resize(tiles[9], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_11 = cv2.resize(tiles[10], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_12 = cv2.resize(tiles[11], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_13 = cv2.resize(tiles[12], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_14 = cv2.resize(tiles[13], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_15 = cv2.resize(tiles[14], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_16 = cv2.resize(tiles[15], dsize=(0, 0), fx=0.25, fy=0.25)\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-07T22:28:10.755234Z","iopub.execute_input":"2021-10-07T22:28:10.756113Z","iopub.status.idle":"2021-10-07T22:28:10.771984Z","shell.execute_reply.started":"2021-10-07T22:28:10.75607Z","shell.execute_reply":"2021-10-07T22:28:10.771137Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def tiles_num_7x7(tiles):\n    tile_num = []\n    \n    tile_1 = cv2.resize(tiles[0], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_2 = cv2.resize(tiles[1], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_3 = cv2.resize(tiles[2], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_4 = cv2.resize(tiles[3], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_5 = cv2.resize(tiles[4], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_6 = cv2.resize(tiles[5], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_7 = cv2.resize(tiles[6], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_8 = cv2.resize(tiles[7], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_9 = cv2.resize(tiles[8], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_10 = cv2.resize(tiles[9], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_11 = cv2.resize(tiles[10], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_12 = cv2.resize(tiles[11], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_13 = cv2.resize(tiles[12], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_14 = cv2.resize(tiles[13], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_15 = cv2.resize(tiles[14], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_16 = cv2.resize(tiles[15], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_17 = cv2.resize(tiles[16], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_18 = cv2.resize(tiles[17], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_19 = cv2.resize(tiles[18], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_20 = cv2.resize(tiles[19], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_21 = cv2.resize(tiles[20], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_22 = cv2.resize(tiles[21], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_23 = cv2.resize(tiles[22], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_24 = cv2.resize(tiles[23], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_25 = cv2.resize(tiles[24], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_26 = cv2.resize(tiles[25], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_27 = cv2.resize(tiles[26], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_28 = cv2.resize(tiles[27], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_29 = cv2.resize(tiles[28], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_30 = cv2.resize(tiles[29], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_31 = cv2.resize(tiles[30], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_32 = cv2.resize(tiles[31], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_33 = cv2.resize(tiles[32], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_34 = cv2.resize(tiles[33], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_35 = cv2.resize(tiles[34], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_36 = cv2.resize(tiles[35], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_37 = cv2.resize(tiles[36], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_38 = cv2.resize(tiles[37], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_39 = cv2.resize(tiles[38], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_40 = cv2.resize(tiles[39], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_41 = cv2.resize(tiles[40], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_42 = cv2.resize(tiles[41], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_43 = cv2.resize(tiles[42], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_44 = cv2.resize(tiles[43], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_45 = cv2.resize(tiles[44], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_46 = cv2.resize(tiles[45], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_47 = cv2.resize(tiles[46], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_48 = cv2.resize(tiles[47], dsize=(0, 0), fx=0.25, fy=0.25)\n    tile_49 = cv2.resize(tiles[48], dsize=(0, 0), fx=0.25, fy=0.25)\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-07T22:28:10.773304Z","iopub.execute_input":"2021-10-07T22:28:10.773904Z","iopub.status.idle":"2021-10-07T22:28:10.81056Z","shell.execute_reply.started":"2021-10-07T22:28:10.773841Z","shell.execute_reply":"2021-10-07T22:28:10.809839Z"},"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-07T22:28:10.811755Z","iopub.execute_input":"2021-10-07T22:28:10.81232Z","iopub.status.idle":"2021-10-07T22:28:10.867616Z","shell.execute_reply.started":"2021-10-07T22:28:10.812285Z","shell.execute_reply":"2021-10-07T22:28:10.86685Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Code for visualization\nname='5801d2195cdcd8d336e8fc097c51a788'\n#name = '2e53a31a0727921e823b781914782036'\n#name = '3b652857672846746e7c0bf4b8aacd9e'\nimg = skimage.io.MultiImage(os.path.join(TRAIN,name+'.tiff'))[-1]\ntiles = tile(img)\nimg_concat = tiles_num_7x7(tiles)\n#img_concat = tiles_num_4x4(tiles)\nim=plt.imshow(img_concat)\nim.get_size()","metadata":{"execution":{"iopub.status.busy":"2021-10-07T22:28:10.869012Z","iopub.execute_input":"2021-10-07T22:28:10.869278Z","iopub.status.idle":"2021-10-07T22:28:16.26979Z","shell.execute_reply.started":"2021-10-07T22:28:10.869243Z","shell.execute_reply":"2021-10-07T22:28:16.269075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#im_id = [name for name in train['image_id']]\nim_id = ['f6549477cf5adb4bd35894d67d7dd86e',\n        'f659baac19ec12b35f6df728c3ed3ec4',\n        'f9c648dbc50dc200e49e7859ca7ea949',\n        'fa5a65d858a5cc0466e8c5a06b735499',\n        'fc20aec4fd0c2f9017888dd94feb84ee',\n        'fc5bf532ce01b1f52f38d5e87bebdb17',\n        'fcb4ae9ba7f26027fda8eb1d814a808d',\n        'fd4fbeeff2ad449dc7c8e6194a4f8403',\n        'dfe7fbb735eb6236b19003fa50ac45d1',\n        'e217ce5f6636d9e434d663b45eafffb6',\n        'e354fd60e3f0333efc94de57c8aec3c2',\n        'edb109423e4f668740936d2787dd470f',\n        'f02db91cdf2a66c05c07cf85f9507a77',\n        'c45e498bf134c619d637029d36efc78b',\n        'c86b6c1639a1fd21df1e5b859c6bb228',\n        'cd894e213f1522b7dfc41d457dc4899b',\n        'ce5a06d88462ff9e8838c64c748ec9ab',\n        'd1e98dd82b39587a6ad1f1351fd8269e',\n        'd4503a149810bfdc64b9c10bc247ee48',\n        'd784fde095ca1209dee96aaf0b021a78',\n        '947d9dc594fe52b86afafc2d15bdfc98',\n        '960986ff8cca993c059343bf7e984a14',\n        '961cf0025e9a8dc8906090034158dd18',\n        '9aea86aa9b34cebb8bbc0db42d6c7559',\n        '9b42c63d8a82e49ae1c724f5d58fe304',\n        'a0295d7cbc9790650917d1d23c5b8356',\n        'a162da97dba7c4e154e8d51bd5a4db0c',\n        'a1dcf957066abe4334f9706a224ba3e2',\n        'a2da57c1097f25266b22084b9b2362a4',\n        'a4f80816b9e11c4ac2ce7ffc2a526cd5',\n        'a6220c7ef591dd3f61c996877d0504d8',\n        'af48aa2477b1f92d2b98a6eb6993873f',\n        'ba0476c61b241addd5a5b83fc6dd0aa4',\n        'bb2def1b86b5ea93316769e51f0facde',\n        'bde1eb4986f82c9cd031689fa8f5084e',\n        'be9c4411b1591a38eb110f641f9bf0a6',\n        '63943deba402196b1f80f92b23881ddc',\n        '64f10c850ec77932295654d030ef330a',\n        '69a7c39a08e8c57691a2fb78904db85b',\n        '6af8999282337b9d7255ad5b12fe3909',\n        '6e219cafd656210dca135a52e0ec044c',\n        '6ee803a651ec9f2bb7c7504dff596207',\n        '6f59b0e5e3fb83824e6d994793cc00ed',\n        '751016133b7a6d0cea31c75ed46ca532',\n        '78a7071f862c2622d8375790ebe71c5d',\n        '78e3e60195790495de73121ecf24a8e9',\n        '7a8abc693ab86d8b1e89e6ebe3169fb7',\n        '842d323ec987a756ba0c4252be109822',\n        '8b8eb1cfa610bf99c73b771db76be17d',\n        '4f8f6e4d549092291a273343351be5ba',\n        '520d1cc8cb7136e54472a33e202b3d1f',\n        '528421f82bedbe7fa89705ebca3df38e',\n        '5625ad41d6d9edf0533c202c88749b57',\n        '564252dc7eb1c27099ab70a95e189748',\n        '5af1d8e9aa13f3bf81ee04e9ad72e55d',\n        '1b875804696c16df1c91abf6d16a7b4e',\n        '1c0305b42ca0c55668c8144e27dc8ba5',\n        '1df557b5c2319b8006f6da4817792d15',\n        '1fbc262d3ebf45b12fda7cd8b6125b0b',\n        '21fe1bf0d9c7448a5e010c024b13ceb3',\n        '24bfb2f82ae5941e2fdcf4f75cfad2a6',\n        '281b539a237756ce1b75fcd7ac2a27de',\n        '28dedadd36e56681c6bdd7fe04297ac8',\n        '29666407d53a57a9dfd417fb75040f8c',\n        '2a006dc0297080f9f6f23397b180a889',\n        '2ac0289a1ec7052e6e157ffdb6b68fe4',\n        '34bf0923d7382e438664901cf794d748',\n        '3602a55ad5d1bc6c6cd903538b5b5abe',\n        '3619a5ca0634e11f0e0474c9eab68f2e',\n        '3964a98b6e3c6471ea04c89c6ec24da3',\n        '40b8995e152c9965d198d7edb5932121',\n        '4313f4ba54009133d60474a50f5286ac',\n        '431f5c9fb72ec0ec067c942a0ae01812',\n        '47d449fb0df8f85e9c7b2b31fe07b485',\n        '4858f73263019107826aab5c18e98114',\n        '4b223c776c0ddb0699d74f3334c1e5e6']\n\n\nwith zipfile.ZipFile(OUT_ZIP, 'w') as img_out:\n    for name in tqdm(im_id):\n        if name != 'f948e5f2b0a49af2c0a7f3f74093262e':\n            img = skimage.io.MultiImage(os.path.join(TRAIN,name+'.tiff'))[-1]\n            print('name: ', name, 'shape: ', img.shape)\n            if img.shape[0]<=41000 and img.shape[1]<=41000:\n                #print('name: ', name, 'shape: ', img.shape)\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)\n            else:\n                print('name: ', name, 'shape: ', img.shape)","metadata":{"execution":{"iopub.status.busy":"2021-10-07T22:28:16.270831Z","iopub.execute_input":"2021-10-07T22:28:16.271065Z","iopub.status.idle":"2021-10-07T22:43:35.070884Z","shell.execute_reply.started":"2021-10-07T22:28:16.271034Z","shell.execute_reply":"2021-10-07T22:43:35.069004Z"},"trusted":true},"execution_count":null,"outputs":[]}]}