{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":84969,"databundleVersionId":10033515,"sourceType":"competition"}],"dockerImageVersionId":30786,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# Install dependencies imports\n\n!pip install zarr &> null\n!pip install git+https://github.com/rostepifanov/voxelmentations &> null","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T15:46:55.713184Z","iopub.execute_input":"2024-11-17T15:46:55.713658Z","iopub.status.idle":"2024-11-17T15:47:32.892050Z","shell.execute_reply.started":"2024-11-17T15:46:55.713612Z","shell.execute_reply":"2024-11-17T15:47:32.890614Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Define imports\n\nimport zarr\nimport json\nimport numpy as np\nimport voxelmentations as V\nimport matplotlib.pyplot as plt\n\nfrom pathlib import Path\nfrom skimage.draw import disk\n\ngpath = Path('/kaggle/input/czii-cryo-et-object-identification')\nimgspath = gpath / 'train/static/ExperimentRuns'\npointspath = gpath / 'train/overlay/ExperimentRuns'\n\n!ls {imgspath}","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-11-17T15:47:32.894770Z","iopub.execute_input":"2024-11-17T15:47:32.895163Z","iopub.status.idle":"2024-11-17T15:47:34.485604Z","shell.execute_reply.started":"2024-11-17T15:47:32.895119Z","shell.execute_reply":"2024-11-17T15:47:34.484271Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Read example data","metadata":{}},{"cell_type":"code","source":"# Read TS_5_4 data and create simple mask\n\ngroup = zarr.open(imgspath / 'TS_5_4/VoxelSpacing10.000/denoised.zarr', mode = 'r')\n\nvoxel = group[0]\nscale = group.attrs['multiscales'][0]['datasets'][0]['coordinateTransformations'][0]['scale']\n\nmask = np.zeros_like(voxel, dtype=np.uint8)\n\npoints = []\n\nfor idx , type_ in enumerate(['apo-ferritin', 'beta-galactosidase', 'ribosome', 'thyroglobulin', 'virus-like-particle']):\n    with open(pointspath / 'TS_5_4/Picks' / (type_ + '.json')) as f:\n        data =  json.load(f)\n\n        for entry in data['points']:\n            location = entry['location']\n            point = np.array([location['z'], location['y'], location['x']]) / scale\n\n            z, y, x = point.astype(np.uint16)\n            rr, cc = disk((y, x), 10, shape=voxel.shape[1:])\n            mask[z, rr, cc] = idx\n\n            points.append(np.array([*point, 1]))\n\nvoxel = np.transpose(voxel, (2, 1, 0))\nmask = np.transpose(mask, (2, 1, 0))\n\npoints = np.array(points, dtype=np.float32)\npoints[:, [0, 1, 2]] = points[:, [2, 1, 0]]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T15:47:34.487649Z","iopub.execute_input":"2024-11-17T15:47:34.488924Z","iopub.status.idle":"2024-11-17T15:47:39.228783Z","shell.execute_reply.started":"2024-11-17T15:47:34.488864Z","shell.execute_reply":"2024-11-17T15:47:39.227769Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Transform data","metadata":{}},{"cell_type":"code","source":"# All voxel only transformations:\n# V.GaussNoise,\n# V.GaussBlur,\n# V.IntensityShift,\n# V.IntensityScale,\n# V.Contrast,\n# V.Gamma,\n\n# All dual transformations - for voxel and mask:\n# V.Rotate90,\n# V.AxialPlaneRotate90,\n# V.GridDistort,\n\n# All triple transformations - for voxel, mask and points:\n# V.Flip,\n# V.AxialFlip,\n# V.AxialPlaneFlip,\n# V.Tranpose,\n# V.AxialPlaneTranpose,\n# V.AxialPlaneAffine,\n# V.AxialPlaneScale,\n# V.AxialPlaneTranslate,\n# V.AxialPlaneRotate,\n\naugs = V.Sequential([\n    V.AxialPlaneFlip(p=1.),\n    V.AxialPlaneTranpose(p=1.),\n    V.AxialPlaneAffine(p=1.),\n    V.GaussBlur(p=1.),\n])\n\ntransformed = augs(voxel=voxel, mask=mask, points=points)\n\ntvoxel = transformed['voxel']\ntmask = transformed['mask']\ntpoints = transformed['points']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T15:47:39.231557Z","iopub.execute_input":"2024-11-17T15:47:39.232045Z","iopub.status.idle":"2024-11-17T15:47:57.348701Z","shell.execute_reply.started":"2024-11-17T15:47:39.231993Z","shell.execute_reply":"2024-11-17T15:47:57.347352Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Visualize transformed voxel, mask and points","metadata":{}},{"cell_type":"code","source":"fig, ax = plt.subplots(1, 4, figsize=(20, 5))\n\nidx = 4\nidn = 52\n\nx, y, z = points[idn, [0, 1, 2]]\ntx, ty, tz = tpoints[idn, [0, 1, 2]]\n\nax[0].imshow(voxel[:, :, idx])\nax[0].scatter(y, x, c='r')\n\nax[0].axis('off')\nax[0].set_title('Original image')\n\nax[1].imshow(mask[:, :, idx])\nax[1].scatter(y, x, c='r', s=10)\n\nax[1].axis('off')\nax[1].set_title('Original point location')\n\nax[2].imshow(tvoxel[:, :, idx])\nax[2].scatter(ty, tx, c='r')\n\nax[2].axis('off')\nax[2].set_title('Transformed image')\n\nax[3].imshow(tmask[:, :, idx])\nax[3].scatter(ty, tx, c='r', s=10)\n\nax[3].axis('off')\nax[3].set_title('Transformed point location')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-17T15:47:57.350261Z","iopub.execute_input":"2024-11-17T15:47:57.351003Z","iopub.status.idle":"2024-11-17T15:47:58.353259Z","shell.execute_reply.started":"2024-11-17T15:47:57.350947Z","shell.execute_reply":"2024-11-17T15:47:58.351993Z"}},"outputs":[],"execution_count":null}]}