├── dinoSparseRing ├── Thumbs.db ├── dinoSR0001.png ├── dinoSR0002.png ├── dinoSR0003.png ├── dinoSR0004.png ├── dinoSR0005.png ├── dinoSR0006.png ├── dinoSR0007.png ├── dinoSR0008.png ├── dinoSR0009.png ├── dinoSR0010.png ├── dinoSR0011.png ├── dinoSR0012.png ├── dinoSR0013.png ├── dinoSR0014.png ├── dinoSR0015.png ├── dinoSR0016.png ├── dinoSR_good_silhouette_images.txt ├── dinoSR_ang.txt ├── README.txt └── dinoSR_par.txt ├── README.md ├── LICENSE └── VisualHull (DinoR).ipynb /dinoSparseRing/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/Thumbs.db -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0001.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0002.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0003.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0004.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0005.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0006.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0007.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0008.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0009.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0010.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0011.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0012.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0013.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0014.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0015.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR0016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egrigokhan/python-visual-hull/HEAD/dinoSparseRing/dinoSR0016.png -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR_good_silhouette_images.txt: -------------------------------------------------------------------------------- 1 | dinoSR0001.png 2 | dinoSR0002.png 3 | dinoSR0003.png 4 | dinoSR0004.png 5 | dinoSR0005.png 6 | dinoSR0007.png 7 | dinoSR0008.png 8 | dinoSR0009.png 9 | dinoSR0010.png 10 | dinoSR0011.png 11 | dinoSR0012.png 12 | dinoSR0013.png 13 | dinoSR0014.png 14 | dinoSR0015.png 15 | dinoSR0016.png 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # python-visual-hull 2 | This is the Python implementation for creating object visual hulls from camera masks. The code is adapted from the MATLAB implementation at https://github.com/maximm8/VisualHull. 3 | 4 | ## In Progress 5 | Eventually, I'm hoping to use the code to create depth hulls using RGB-D images from Berkeley's BigBIRD dataset [http://rll.berkeley.edu/bigbird/]. 6 | -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR_ang.txt: -------------------------------------------------------------------------------- 1 | -74.347826 172.173913 dinoSR0001.png 2 | -74.347826 148.695652 dinoSR0002.png 3 | -74.347826 125.217391 dinoSR0003.png 4 | -74.347826 101.73913 dinoSR0004.png 5 | -74.347826 78.26087 dinoSR0005.png 6 | -74.347826 54.782609 dinoSR0006.png 7 | -74.347826 31.304348 dinoSR0007.png 8 | -74.347826 7.826087 dinoSR0008.png 9 | -74.347826 -15.652174 dinoSR0009.png 10 | -74.347826 -39.130435 dinoSR0010.png 11 | -74.347826 -62.608696 dinoSR0011.png 12 | -74.347826 -86.086957 dinoSR0012.png 13 | -74.347826 -109.565217 dinoSR0013.png 14 | -74.347826 -133.043478 dinoSR0014.png 15 | -74.347826 -156.521739 dinoSR0015.png 16 | -74.347826 -180.0 dinoSR0016.png 17 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Gokhan Egri 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /dinoSparseRing/README.txt: -------------------------------------------------------------------------------- 1 | dinoSparseRing data set -- 16 views sampled on a ring 2 | 3 | The object is an untextured, matte, ceramic dinosaur against a black background. 4 | Note that the object is partially outside the field of view in some images. Also, there are some dark shadows on the object--be conservative if using thresholding to detect background pixels. 5 | 6 | The (tight) bounding box for the dino model is 7 | (-0.061897 -0.018874 -0.057845) 8 | (0.010897 0.068227 0.015495) 9 | 10 | -------------------------- 11 | Created by Steve Seitz, James Diebel, Daniel Scharstein, Brian Curless, and Rick Szeliski 12 | 13 | This directory contains images with camera calibration parameters. 14 | 15 | The images were captured using the Stanford spherical light field gantry, and calibrated by the above people. 16 | 17 | *.png: images in png format 18 | *_par.txt: camera parameters. There is one line for each image. The format for each line is: 19 | "imgname.png k11 k12 k13 k21 k22 k23 k31 k32 k33 r11 r12 r13 r21 r22 r23 r31 r32 r33 t1 t2 t3" 20 | The projection matrix for that image is given by K*[R t] 21 | The image origin is top-left, with x increasing horizontally, y vertically 22 | *_ang.txt: latitude, longitude angles for each image. Not needed to compute scene->image mapping, but may be helpful for visualization. 23 | *_good_silhouette_images.txt: list of images that we could process to get good silhouettes. 24 | 25 | Note that (lat, lon) corresponds to the same image as (-lat, 180 + lon), rotated 180 degrees in the image plane. While it would therefore be sufficient in principle to capture only positive latitude images, in practice some images are not useable because of shadows where the gantry occludes the light source. Because the gantry is in a different configuration for positive vs. negative latitude images, this gives us two chances to capture each viewpoint without shadows. It is for this reason that some images may have positive and others negative latitudes. This also explains why some images may appear to be "upside-down" (in fact they're rotated 180 degrees). 26 | 27 | Some multiview stereo algorithms start from the visual hull after extracting per-image silhouettes. In our own experiments, we had success computing conservative visual hulls using the *_good_silhouette_images.txt images. To extract silhouettes from these images, we 28 | 29 | 1. thresholded at 0.19 (where color values range from 0 to 1), 30 | 2. dilated by 10 pixels 31 | 3. eroded by 7 pixels 32 | 33 | All of these operations are straightforward in Matlab. You are free to use this recipe. 34 | 35 | -------------------------------------------------------------------------------- /dinoSparseRing/dinoSR_par.txt: -------------------------------------------------------------------------------- 1 | 16 2 | dinoSR0001.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 -0.14396457836077139000 0.96965263281337499000 0.19760617153779569000 -0.90366580603479685000 -0.04743335255026152200 -0.42560419233334673000 -0.40331536459778505000 -0.23984130575212276000 0.88306936201487163000 -0.010415508744 -0.0294278883669 0.673097816109 3 | dinoSR0002.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 -0.23143687262851170000 0.96422332027030622000 0.12926937165558827000 -0.65860811165749811000 -0.05749426020475298400 -0.75028640486482034000 -0.71601208187197274000 -0.25878137856376976000 0.64835049619606955000 -0.0143392676288 -0.0315356332107 0.659314086504 4 | dinoSR0003.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 -0.28437648559126744000 0.95818717180552493000 0.03174117685280887500 -0.30447985736374050000 -0.05887271324279850400 -0.95069715013877931000 -0.90907810612855156000 -0.28002026823733883000 0.30848995461910772000 -0.0181396767412 -0.0277593369636 0.645855774902 5 | dinoSR0004.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 -0.29401781384102649000 0.95254363718061841000 -0.07882994806514329000 0.10008332165785941000 -0.05134047099598639700 -0.99365293826058598000 -0.95054606727387558000 -0.30004129466721602000 -0.08023903828591291700 -0.021187474226 -0.0187242689354 0.634951273531 6 | dinoSR0005.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 -0.25876447372510059000 0.94822715832320814000 -0.18413591973560506000 0.48809489134507961000 -0.03614470332115014800 -0.87204127006075205000 -0.83354981633995029000 -0.31552942785272814000 -0.45347173237683847000 -0.022978013659 -0.00592643278493 0.628406121531 7 | dinoSR0006.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 -0.18445361863808038000 0.94595244621195196000 -0.26674045813558944000 0.79530893787266643000 -0.01580148462641393200 -0.60599827900975589000 -0.57746127839962313000 -0.32392018428954944000 -0.74940926036560773000 -0.023214822329 0.00851514014266 0.627304047594 8 | dinoSR0007.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 -0.08338944722911310900 0.94609614197942327000 -0.31296611393889306000 0.97085774118013590000 0.00632080735562845670 -0.23957467325849086000 -0.22468292908270854000 -0.32382424357508255000 -0.91905103946950217000 -0.0218586899664 0.0222092512892 0.631827530638 9 | dinoSR0008.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 0.02769409788772111600 0.94863445285422510000 -0.31515896329964094000 0.98567438705285304000 0.02655922106302938800 0.16655807969272288000 0.16637311017687328000 -0.31525749132326808000 -0.93430822517618106000 -0.0191341614402 0.032888465352 0.641227584108 10 | dinoSR0009.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 0.13040409226215816000 0.95314709192435443000 -0.27295591992471341000 0.83730557380822779000 0.04156273259821786900 0.54515357504151063000 0.53095679761230619000 -0.29963838808815157000 -0.79265457236327796000 -0.0154923570967 0.0387845458454 0.653947771602 11 | dinoSR0010.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 0.20773408219460512000 0.95888686815084223000 -0.19334485395770235000 0.55031782360679693000 0.04884709954828619200 0.83352495546947669000 0.80870131461201522000 -0.27955310435503949000 -0.51754472439450017000 -0.0115362774261 0.0389212350981 0.667881917561 12 | dinoSR0011.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 0.24687996910258325000 0.96490340431639521000 -0.08950755861736174600 0.17222982161524675000 0.04720619538171529800 0.98392443791612039000 0.95361844651938554000 -0.25832730915868130000 -0.15453065428161436000 -0.00792095980974 0.0332759004593 0.680722842344 13 | dinoSR0012.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 0.24136007885803201000 0.97020049801291686000 0.02136285683511320000 -0.23435560427802821000 0.03691171674209103900 0.97144926729660463000 0.94171319159119948000 -0.23947551445521581000 0.23628071251718805000 -0.00524501913431 0.0227832817537 0.690344379027 14 | dinoSR0013.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 0.19208838346748064000 0.97390107013119698000 0.12090875365304035000 -0.60211708293559318000 0.01966819746967938400 0.79816506039694313000 0.77495680106296283000 -0.22611915179071745000 0.59017983305303656000 -0.00395153071793 0.00918072010801 0.695153418505 15 | dinoSR0014.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 0.10722315794998927000 0.97539238987661836000 0.19264758954063826000 -0.87016165622960684000 -0.00166922681646456020 0.49276375089511210000 0.48096035030627776000 -0.22046973183084473000 0.84856904123286236000 -0.00425466689932 -0.00527950884591 0.694353692934 16 | dinoSR0015.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 0.00081616679574048404 0.97442752820786405000 0.22470103004948633000 -0.99410718398935161000 -0.02356756030268754300 0.10581289727836769000 0.10840301080819337000 -0.22346267154279231000 0.96866490777520942000 -0.00610423526503 -0.018203117484 0.68807761848 17 | dinoSR0016.png 3310.400000 0.000000 316.730000 0.000000 3325.500000 200.550000 0.000000 0.000000 1.000000 -0.10951399718548831000 0.97116624441025123000 0.21176174987744156000 -0.95343108813509980000 -0.04240093389221950800 -0.29861718464681830000 -0.28102814225222095000 -0.23460240775428165000 0.93058227149100015000 -0.00919398909617 -0.0274502483048 0.677364371223 18 | -------------------------------------------------------------------------------- /VisualHull (DinoR).ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "VisualHull.ipynb", 7 | "provenance": [] 8 | }, 9 | "kernelspec": { 10 | "name": "python3", 11 | "display_name": "Python 3" 12 | } 13 | }, 14 | "cells": [ 15 | { 16 | "cell_type": "code", 17 | "metadata": { 18 | "id": "icLgO5UMeWSy", 19 | "outputId": "88890988-9e3e-494e-eae9-8810e94d9844", 20 | "colab": { 21 | "base_uri": "https://localhost:8080/" 22 | } 23 | }, 24 | "source": [ 25 | "!wget https://vision.middlebury.edu/mview/data/data/dinoSparseRing.zip --no-check-certificate" 26 | ], 27 | "execution_count": 130, 28 | "outputs": [ 29 | { 30 | "output_type": "stream", 31 | "text": [ 32 | "--2020-11-11 18:26:26-- https://vision.middlebury.edu/mview/data/data/dinoSparseRing.zip\n", 33 | "Resolving vision.middlebury.edu (vision.middlebury.edu)... 140.233.20.14\n", 34 | "Connecting to vision.middlebury.edu (vision.middlebury.edu)|140.233.20.14|:443... connected.\n", 35 | "WARNING: cannot verify vision.middlebury.edu's certificate, issued by ‘CN=InCommon RSA Server CA,OU=InCommon,O=Internet2,L=Ann Arbor,ST=MI,C=US’:\n", 36 | " Unable to locally verify the issuer's authority.\n", 37 | "HTTP request sent, awaiting response... 200 OK\n", 38 | "Length: 3812923 (3.6M) [application/zip]\n", 39 | "Saving to: ‘dinoSparseRing.zip’\n", 40 | "\n", 41 | "dinoSparseRing.zip 100%[===================>] 3.64M 603KB/s in 10s \n", 42 | "\n", 43 | "2020-11-11 18:26:38 (361 KB/s) - ‘dinoSparseRing.zip’ saved [3812923/3812923]\n", 44 | "\n" 45 | ], 46 | "name": "stdout" 47 | } 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "metadata": { 53 | "id": "IMA4NStHAmoh" 54 | }, 55 | "source": [ 56 | "import cv2\n", 57 | "import numpy as np\n", 58 | "from itertools import product" 59 | ], 60 | "execution_count": 1, 61 | "outputs": [] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "metadata": { 66 | "id": "97sf3O0pO7Bj" 67 | }, 68 | "source": [ 69 | "data_dir = \"dinoRing/\"\n", 70 | "file_base = \"dinoR\"\n", 71 | "T = 19" 72 | ], 73 | "execution_count": 2, 74 | "outputs": [] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "metadata": { 79 | "id": "o5vQvzHLBnXl", 80 | "outputId": "8904e2a0-7c48-4e53-beef-5d0876f7cec3", 81 | "colab": { 82 | "base_uri": "https://localhost:8080/" 83 | } 84 | }, 85 | "source": [ 86 | "!unzip dinoSparseRing.zip" 87 | ], 88 | "execution_count": 149, 89 | "outputs": [ 90 | { 91 | "output_type": "stream", 92 | "text": [ 93 | "Archive: dinoSparseRing.zip\n", 94 | "replace dinoSparseRing/dinoSR_ang.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: N\n" 95 | ], 96 | "name": "stdout" 97 | } 98 | ] 99 | }, 100 | { 101 | "cell_type": "markdown", 102 | "metadata": { 103 | "id": "cWA404rBUSLs" 104 | }, 105 | "source": [ 106 | "# Reading Images and Camera Parameters" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "metadata": { 112 | "id": "fcJut9bHPA62" 113 | }, 114 | "source": [ 115 | "# Reading the camera parameters from 'dinoSR_par.txt'\n", 116 | "with open(data_dir + \"/\" + file_base + \"_par.txt\", 'r') as f:\n", 117 | " lines = f.readlines() \n", 118 | "\n", 119 | " M = []\n", 120 | " for l in lines[1:]: \n", 121 | " tmp = np.array(l.strip().split(\" \")[1:]).astype(np.float32)\n", 122 | " K = tmp[0:9].reshape((3, 3))\n", 123 | " R = tmp[9:18].reshape((3, 3))\n", 124 | " t = tmp[18:].reshape((3, 1))\n", 125 | " M.append(np.matmul(K, np.concatenate([R, t], axis=1)))\n", 126 | "\n", 127 | " N = len(lines) - 1" 128 | ], 129 | "execution_count": 134, 130 | "outputs": [] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "metadata": { 135 | "id": "CvcUb-SFAK18", 136 | "outputId": "485141b1-1d26-4a8c-c68f-9538530f6523", 137 | "colab": { 138 | "base_uri": "https://localhost:8080/" 139 | } 140 | }, 141 | "source": [ 142 | "# Reading images\n", 143 | "imgs = []\n", 144 | "kernel = np.ones((3,3), np.uint8) \n", 145 | "for i in range(N):\n", 146 | " im = cv2.imread(data_dir + \"/\" + file_base + f'{i + 1:04}' + \".png\", 0) / 255\n", 147 | " im = cv2.erode(im, kernel, iterations=1) \n", 148 | " im = cv2.dilate(im, kernel, iterations=1) \n", 149 | " _, im = cv2.threshold(im, 0.1, 1, cv2.THRESH_BINARY)\n", 150 | " print(im)\n", 151 | " imgs.append(np.array(im))\n", 152 | "imgs = np.array(imgs)" 153 | ], 154 | "execution_count": 137, 155 | "outputs": [ 156 | { 157 | "output_type": "stream", 158 | "text": [ 159 | "[[0. 0. 0. ... 0. 0. 0.]\n", 160 | " [0. 0. 0. ... 0. 0. 0.]\n", 161 | " [0. 0. 0. ... 0. 0. 0.]\n", 162 | " ...\n", 163 | " [0. 0. 0. ... 0. 0. 0.]\n", 164 | " [0. 0. 0. ... 0. 0. 0.]\n", 165 | " [0. 0. 0. ... 0. 0. 0.]]\n", 166 | "[[0. 0. 0. ... 0. 0. 0.]\n", 167 | " [0. 0. 0. ... 0. 0. 0.]\n", 168 | " [0. 0. 0. ... 0. 0. 0.]\n", 169 | " ...\n", 170 | " [0. 0. 0. ... 0. 0. 0.]\n", 171 | " [0. 0. 0. ... 0. 0. 0.]\n", 172 | " [0. 0. 0. ... 0. 0. 0.]]\n", 173 | "[[0. 0. 0. ... 0. 0. 0.]\n", 174 | " [0. 0. 0. ... 0. 0. 0.]\n", 175 | " [0. 0. 0. ... 0. 0. 0.]\n", 176 | " ...\n", 177 | " [0. 0. 0. ... 0. 0. 0.]\n", 178 | " [0. 0. 0. ... 0. 0. 0.]\n", 179 | " [0. 0. 0. ... 0. 0. 0.]]\n", 180 | "[[0. 0. 0. ... 0. 0. 0.]\n", 181 | " [0. 0. 0. ... 0. 0. 0.]\n", 182 | " [0. 0. 0. ... 0. 0. 0.]\n", 183 | " ...\n", 184 | " [0. 0. 0. ... 0. 0. 0.]\n", 185 | " [0. 0. 0. ... 0. 0. 0.]\n", 186 | " [0. 0. 0. ... 0. 0. 0.]]\n", 187 | "[[0. 0. 0. ... 0. 0. 0.]\n", 188 | " [0. 0. 0. ... 0. 0. 0.]\n", 189 | " [0. 0. 0. ... 0. 0. 0.]\n", 190 | " ...\n", 191 | " [0. 0. 0. ... 0. 0. 0.]\n", 192 | " [0. 0. 0. ... 0. 0. 0.]\n", 193 | " [0. 0. 0. ... 0. 0. 0.]]\n", 194 | "[[0. 0. 0. ... 0. 0. 0.]\n", 195 | " [0. 0. 0. ... 0. 0. 0.]\n", 196 | " [0. 0. 0. ... 0. 0. 0.]\n", 197 | " ...\n", 198 | " [0. 0. 0. ... 0. 0. 0.]\n", 199 | " [0. 0. 0. ... 0. 0. 0.]\n", 200 | " [0. 0. 0. ... 0. 0. 0.]]\n", 201 | "[[0. 0. 0. ... 0. 0. 0.]\n", 202 | " [0. 0. 0. ... 0. 0. 0.]\n", 203 | " [0. 0. 0. ... 0. 0. 0.]\n", 204 | " ...\n", 205 | " [0. 0. 0. ... 0. 0. 0.]\n", 206 | " [0. 0. 0. ... 0. 0. 0.]\n", 207 | " [0. 0. 0. ... 0. 0. 0.]]\n", 208 | "[[0. 0. 0. ... 0. 0. 0.]\n", 209 | " [0. 0. 0. ... 0. 0. 0.]\n", 210 | " [0. 0. 0. ... 0. 0. 0.]\n", 211 | " ...\n", 212 | " [0. 0. 0. ... 0. 0. 0.]\n", 213 | " [0. 0. 0. ... 0. 0. 0.]\n", 214 | " [0. 0. 0. ... 0. 0. 0.]]\n", 215 | "[[0. 0. 0. ... 0. 0. 0.]\n", 216 | " [0. 0. 0. ... 0. 0. 0.]\n", 217 | " [0. 0. 0. ... 0. 0. 0.]\n", 218 | " ...\n", 219 | " [0. 0. 0. ... 0. 0. 0.]\n", 220 | " [0. 0. 0. ... 0. 0. 0.]\n", 221 | " [0. 0. 0. ... 0. 0. 0.]]\n", 222 | "[[0. 0. 0. ... 0. 0. 0.]\n", 223 | " [0. 0. 0. ... 0. 0. 0.]\n", 224 | " [0. 0. 0. ... 0. 0. 0.]\n", 225 | " ...\n", 226 | " [0. 0. 0. ... 0. 0. 0.]\n", 227 | " [0. 0. 0. ... 0. 0. 0.]\n", 228 | " [0. 0. 0. ... 0. 0. 0.]]\n", 229 | "[[0. 0. 0. ... 0. 0. 0.]\n", 230 | " [0. 0. 0. ... 0. 0. 0.]\n", 231 | " [0. 0. 0. ... 0. 0. 0.]\n", 232 | " ...\n", 233 | " [0. 0. 0. ... 0. 0. 0.]\n", 234 | " [0. 0. 0. ... 0. 0. 0.]\n", 235 | " [0. 0. 0. ... 0. 0. 0.]]\n", 236 | "[[0. 0. 0. ... 0. 0. 0.]\n", 237 | " [0. 0. 0. ... 0. 0. 0.]\n", 238 | " [0. 0. 0. ... 0. 0. 0.]\n", 239 | " ...\n", 240 | " [0. 0. 0. ... 0. 0. 0.]\n", 241 | " [0. 0. 0. ... 0. 0. 0.]\n", 242 | " [0. 0. 0. ... 0. 0. 0.]]\n", 243 | "[[0. 0. 0. ... 0. 0. 0.]\n", 244 | " [0. 0. 0. ... 0. 0. 0.]\n", 245 | " [0. 0. 0. ... 0. 0. 0.]\n", 246 | " ...\n", 247 | " [0. 0. 0. ... 0. 0. 0.]\n", 248 | " [0. 0. 0. ... 0. 0. 0.]\n", 249 | " [0. 0. 0. ... 0. 0. 0.]]\n", 250 | "[[0. 0. 0. ... 0. 0. 0.]\n", 251 | " [0. 0. 0. ... 0. 0. 0.]\n", 252 | " [0. 0. 0. ... 0. 0. 0.]\n", 253 | " ...\n", 254 | " [0. 0. 0. ... 0. 0. 0.]\n", 255 | " [0. 0. 0. ... 0. 0. 0.]\n", 256 | " [0. 0. 0. ... 0. 0. 0.]]\n", 257 | "[[0. 0. 0. ... 0. 0. 0.]\n", 258 | " [0. 0. 0. ... 0. 0. 0.]\n", 259 | " [0. 0. 0. ... 0. 0. 0.]\n", 260 | " ...\n", 261 | " [0. 0. 0. ... 0. 0. 0.]\n", 262 | " [0. 0. 0. ... 0. 0. 0.]\n", 263 | " [0. 0. 0. ... 0. 0. 0.]]\n", 264 | "[[0. 0. 0. ... 0. 0. 0.]\n", 265 | " [0. 0. 0. ... 0. 0. 0.]\n", 266 | " [0. 0. 0. ... 0. 0. 0.]\n", 267 | " ...\n", 268 | " [0. 0. 0. ... 0. 0. 0.]\n", 269 | " [0. 0. 0. ... 0. 0. 0.]\n", 270 | " [0. 0. 0. ... 0. 0. 0.]]\n", 271 | "[[0. 0. 0. ... 0. 0. 0.]\n", 272 | " [0. 0. 0. ... 0. 0. 0.]\n", 273 | " [0. 0. 0. ... 0. 0. 0.]\n", 274 | " ...\n", 275 | " [0. 0. 0. ... 0. 0. 0.]\n", 276 | " [0. 0. 0. ... 0. 0. 0.]\n", 277 | " [0. 0. 0. ... 0. 0. 0.]]\n", 278 | "[[0. 0. 0. ... 0. 0. 0.]\n", 279 | " [0. 0. 0. ... 0. 0. 0.]\n", 280 | " [0. 0. 0. ... 0. 0. 0.]\n", 281 | " ...\n", 282 | " [0. 0. 0. ... 0. 0. 0.]\n", 283 | " [0. 0. 0. ... 0. 0. 0.]\n", 284 | " [0. 0. 0. ... 0. 0. 0.]]\n", 285 | "[[0. 0. 0. ... 0. 0. 0.]\n", 286 | " [0. 0. 0. ... 0. 0. 0.]\n", 287 | " [0. 0. 0. ... 0. 0. 0.]\n", 288 | " ...\n", 289 | " [0. 0. 0. ... 0. 0. 0.]\n", 290 | " [0. 0. 0. ... 0. 0. 0.]\n", 291 | " [0. 0. 0. ... 0. 0. 0.]]\n", 292 | "[[0. 0. 0. ... 0. 0. 0.]\n", 293 | " [0. 0. 0. ... 0. 0. 0.]\n", 294 | " [0. 0. 0. ... 0. 0. 0.]\n", 295 | " ...\n", 296 | " [0. 0. 0. ... 0. 0. 0.]\n", 297 | " [0. 0. 0. ... 0. 0. 0.]\n", 298 | " [0. 0. 0. ... 0. 0. 0.]]\n", 299 | "[[0. 0. 0. ... 0. 0. 0.]\n", 300 | " [0. 0. 0. ... 0. 0. 0.]\n", 301 | " [0. 0. 0. ... 0. 0. 0.]\n", 302 | " ...\n", 303 | " [0. 0. 0. ... 0. 0. 0.]\n", 304 | " [0. 0. 0. ... 0. 0. 0.]\n", 305 | " [0. 0. 0. ... 0. 0. 0.]]\n", 306 | "[[0. 0. 0. ... 0. 0. 0.]\n", 307 | " [0. 0. 0. ... 0. 0. 0.]\n", 308 | " [0. 0. 0. ... 0. 0. 0.]\n", 309 | " ...\n", 310 | " [0. 0. 0. ... 0. 0. 0.]\n", 311 | " [0. 0. 0. ... 0. 0. 0.]\n", 312 | " [0. 0. 0. ... 0. 0. 0.]]\n", 313 | "[[0. 0. 0. ... 0. 0. 0.]\n", 314 | " [0. 0. 0. ... 0. 0. 0.]\n", 315 | " [0. 0. 0. ... 0. 0. 0.]\n", 316 | " ...\n", 317 | " [0. 0. 0. ... 0. 0. 0.]\n", 318 | " [0. 0. 0. ... 0. 0. 0.]\n", 319 | " [0. 0. 0. ... 0. 0. 0.]]\n", 320 | "[[0. 0. 0. ... 0. 0. 0.]\n", 321 | " [0. 0. 0. ... 0. 0. 0.]\n", 322 | " [0. 0. 0. ... 0. 0. 0.]\n", 323 | " ...\n", 324 | " [0. 0. 0. ... 0. 0. 0.]\n", 325 | " [0. 0. 0. ... 0. 0. 0.]\n", 326 | " [0. 0. 0. ... 0. 0. 0.]]\n", 327 | "[[0. 0. 0. ... 0. 0. 0.]\n", 328 | " [0. 0. 0. ... 0. 0. 0.]\n", 329 | " [0. 0. 0. ... 0. 0. 0.]\n", 330 | " ...\n", 331 | " [0. 0. 0. ... 0. 0. 0.]\n", 332 | " [0. 0. 0. ... 0. 0. 0.]\n", 333 | " [0. 0. 0. ... 0. 0. 0.]]\n", 334 | "[[0. 0. 0. ... 0. 0. 0.]\n", 335 | " [0. 0. 0. ... 0. 0. 0.]\n", 336 | " [0. 0. 0. ... 0. 0. 0.]\n", 337 | " ...\n", 338 | " [0. 0. 0. ... 0. 0. 0.]\n", 339 | " [0. 0. 0. ... 0. 0. 0.]\n", 340 | " [0. 0. 0. ... 0. 0. 0.]]\n", 341 | "[[0. 0. 0. ... 0. 0. 0.]\n", 342 | " [0. 0. 0. ... 0. 0. 0.]\n", 343 | " [0. 0. 0. ... 0. 0. 0.]\n", 344 | " ...\n", 345 | " [0. 0. 0. ... 0. 0. 0.]\n", 346 | " [0. 0. 0. ... 0. 0. 0.]\n", 347 | " [0. 0. 0. ... 0. 0. 0.]]\n", 348 | "[[0. 0. 0. ... 0. 0. 0.]\n", 349 | " [0. 0. 0. ... 0. 0. 0.]\n", 350 | " [0. 0. 0. ... 0. 0. 0.]\n", 351 | " ...\n", 352 | " [0. 0. 0. ... 0. 0. 0.]\n", 353 | " [0. 0. 0. ... 0. 0. 0.]\n", 354 | " [0. 0. 0. ... 0. 0. 0.]]\n", 355 | "[[0. 0. 0. ... 0. 0. 0.]\n", 356 | " [0. 0. 0. ... 0. 0. 0.]\n", 357 | " [0. 0. 0. ... 0. 0. 0.]\n", 358 | " ...\n", 359 | " [0. 0. 0. ... 0. 0. 0.]\n", 360 | " [0. 0. 0. ... 0. 0. 0.]\n", 361 | " [0. 0. 0. ... 0. 0. 0.]]\n", 362 | "[[0. 0. 0. ... 0. 0. 0.]\n", 363 | " [0. 0. 0. ... 0. 0. 0.]\n", 364 | " [0. 0. 0. ... 0. 0. 0.]\n", 365 | " ...\n", 366 | " [0. 0. 0. ... 0. 0. 0.]\n", 367 | " [0. 0. 0. ... 0. 0. 0.]\n", 368 | " [0. 0. 0. ... 0. 0. 0.]]\n", 369 | "[[0. 0. 0. ... 0. 0. 0.]\n", 370 | " [0. 0. 0. ... 0. 0. 0.]\n", 371 | " [0. 0. 0. ... 0. 0. 0.]\n", 372 | " ...\n", 373 | " [0. 0. 0. ... 0. 0. 0.]\n", 374 | " [0. 0. 0. ... 0. 0. 0.]\n", 375 | " [0. 0. 0. ... 0. 0. 0.]]\n", 376 | "[[0. 0. 0. ... 0. 0. 0.]\n", 377 | " [0. 0. 0. ... 0. 0. 0.]\n", 378 | " [0. 0. 0. ... 0. 0. 0.]\n", 379 | " ...\n", 380 | " [0. 0. 0. ... 0. 0. 0.]\n", 381 | " [0. 0. 0. ... 0. 0. 0.]\n", 382 | " [0. 0. 0. ... 0. 0. 0.]]\n", 383 | "[[0. 0. 0. ... 0. 0. 0.]\n", 384 | " [0. 0. 0. ... 0. 0. 0.]\n", 385 | " [0. 0. 0. ... 0. 0. 0.]\n", 386 | " ...\n", 387 | " [0. 0. 0. ... 0. 0. 0.]\n", 388 | " [0. 0. 0. ... 0. 0. 0.]\n", 389 | " [0. 0. 0. ... 0. 0. 0.]]\n", 390 | "[[0. 0. 0. ... 0. 0. 0.]\n", 391 | " [0. 0. 0. ... 0. 0. 0.]\n", 392 | " [0. 0. 0. ... 0. 0. 0.]\n", 393 | " ...\n", 394 | " [0. 0. 0. ... 0. 0. 0.]\n", 395 | " [0. 0. 0. ... 0. 0. 0.]\n", 396 | " [0. 0. 0. ... 0. 0. 0.]]\n", 397 | "[[0. 0. 0. ... 0. 0. 0.]\n", 398 | " [0. 0. 0. ... 0. 0. 0.]\n", 399 | " [0. 0. 0. ... 0. 0. 0.]\n", 400 | " ...\n", 401 | " [0. 0. 0. ... 0. 0. 0.]\n", 402 | " [0. 0. 0. ... 0. 0. 0.]\n", 403 | " [0. 0. 0. ... 0. 0. 0.]]\n", 404 | "[[0. 0. 0. ... 0. 0. 0.]\n", 405 | " [0. 0. 0. ... 0. 0. 0.]\n", 406 | " [0. 0. 0. ... 0. 0. 0.]\n", 407 | " ...\n", 408 | " [0. 0. 0. ... 0. 0. 0.]\n", 409 | " [0. 0. 0. ... 0. 0. 0.]\n", 410 | " [0. 0. 0. ... 0. 0. 0.]]\n", 411 | "[[0. 0. 0. ... 0. 0. 0.]\n", 412 | " [0. 0. 0. ... 0. 0. 0.]\n", 413 | " [0. 0. 0. ... 0. 0. 0.]\n", 414 | " ...\n", 415 | " [0. 0. 0. ... 0. 0. 0.]\n", 416 | " [0. 0. 0. ... 0. 0. 0.]\n", 417 | " [0. 0. 0. ... 0. 0. 0.]]\n", 418 | "[[0. 0. 0. ... 0. 0. 0.]\n", 419 | " [0. 0. 0. ... 0. 0. 0.]\n", 420 | " [0. 0. 0. ... 0. 0. 0.]\n", 421 | " ...\n", 422 | " [0. 0. 0. ... 0. 0. 0.]\n", 423 | " [0. 0. 0. ... 0. 0. 0.]\n", 424 | " [0. 0. 0. ... 0. 0. 0.]]\n", 425 | "[[0. 0. 0. ... 0. 0. 0.]\n", 426 | " [0. 0. 0. ... 0. 0. 0.]\n", 427 | " [0. 0. 0. ... 0. 0. 0.]\n", 428 | " ...\n", 429 | " [0. 0. 0. ... 0. 0. 0.]\n", 430 | " [0. 0. 0. ... 0. 0. 0.]\n", 431 | " [0. 0. 0. ... 0. 0. 0.]]\n", 432 | "[[0. 0. 0. ... 0. 0. 0.]\n", 433 | " [0. 0. 0. ... 0. 0. 0.]\n", 434 | " [0. 0. 0. ... 0. 0. 0.]\n", 435 | " ...\n", 436 | " [0. 0. 0. ... 0. 0. 0.]\n", 437 | " [0. 0. 0. ... 0. 0. 0.]\n", 438 | " [0. 0. 0. ... 0. 0. 0.]]\n", 439 | "[[0. 0. 0. ... 0. 0. 0.]\n", 440 | " [0. 0. 0. ... 0. 0. 0.]\n", 441 | " [0. 0. 0. ... 0. 0. 0.]\n", 442 | " ...\n", 443 | " [0. 0. 0. ... 0. 0. 0.]\n", 444 | " [0. 0. 0. ... 0. 0. 0.]\n", 445 | " [0. 0. 0. ... 0. 0. 0.]]\n", 446 | "[[0. 0. 0. ... 0. 0. 0.]\n", 447 | " [0. 0. 0. ... 0. 0. 0.]\n", 448 | " [0. 0. 0. ... 0. 0. 0.]\n", 449 | " ...\n", 450 | " [0. 0. 0. ... 0. 0. 0.]\n", 451 | " [0. 0. 0. ... 0. 0. 0.]\n", 452 | " [0. 0. 0. ... 0. 0. 0.]]\n", 453 | "[[0. 0. 0. ... 0. 0. 0.]\n", 454 | " [0. 0. 0. ... 0. 0. 0.]\n", 455 | " [0. 0. 0. ... 0. 0. 0.]\n", 456 | " ...\n", 457 | " [0. 0. 0. ... 0. 0. 0.]\n", 458 | " [0. 0. 0. ... 0. 0. 0.]\n", 459 | " [0. 0. 0. ... 0. 0. 0.]]\n", 460 | "[[0. 0. 0. ... 0. 0. 0.]\n", 461 | " [0. 0. 0. ... 0. 0. 0.]\n", 462 | " [0. 0. 0. ... 0. 0. 0.]\n", 463 | " ...\n", 464 | " [0. 0. 0. ... 0. 0. 0.]\n", 465 | " [0. 0. 0. ... 0. 0. 0.]\n", 466 | " [0. 0. 0. ... 0. 0. 0.]]\n", 467 | "[[0. 0. 0. ... 0. 0. 0.]\n", 468 | " [0. 0. 0. ... 0. 0. 0.]\n", 469 | " [0. 0. 0. ... 0. 0. 0.]\n", 470 | " ...\n", 471 | " [0. 0. 0. ... 0. 0. 0.]\n", 472 | " [0. 0. 0. ... 0. 0. 0.]\n", 473 | " [0. 0. 0. ... 0. 0. 0.]]\n", 474 | "[[0. 0. 0. ... 0. 0. 0.]\n", 475 | " [0. 0. 0. ... 0. 0. 0.]\n", 476 | " [0. 0. 0. ... 0. 0. 0.]\n", 477 | " ...\n", 478 | " [0. 0. 0. ... 0. 0. 0.]\n", 479 | " [0. 0. 0. ... 0. 0. 0.]\n", 480 | " [0. 0. 0. ... 0. 0. 0.]]\n", 481 | "[[0. 0. 0. ... 0. 0. 0.]\n", 482 | " [0. 0. 0. ... 0. 0. 0.]\n", 483 | " [0. 0. 0. ... 0. 0. 0.]\n", 484 | " ...\n", 485 | " [0. 0. 0. ... 0. 0. 0.]\n", 486 | " [0. 0. 0. ... 0. 0. 0.]\n", 487 | " [0. 0. 0. ... 0. 0. 0.]]\n", 488 | "[[0. 0. 0. ... 0. 0. 0.]\n", 489 | " [0. 0. 0. ... 0. 0. 0.]\n", 490 | " [0. 0. 0. ... 0. 0. 0.]\n", 491 | " ...\n", 492 | " [0. 0. 0. ... 0. 0. 0.]\n", 493 | " [0. 0. 0. ... 0. 0. 0.]\n", 494 | " [0. 0. 0. ... 0. 0. 0.]]\n" 495 | ], 496 | "name": "stdout" 497 | } 498 | ] 499 | }, 500 | { 501 | "cell_type": "code", 502 | "metadata": { 503 | "id": "AFneaF8d3o9x", 504 | "outputId": "4bbe7a8d-915c-4f06-8227-34494e3f68ca", 505 | "colab": { 506 | "base_uri": "https://localhost:8080/", 507 | "height": 538 508 | } 509 | }, 510 | "source": [ 511 | "import matplotlib.pyplot as plt\n", 512 | "\n", 513 | "plt.figure()\n", 514 | "plt.imshow(imgs[0])\n", 515 | "plt.figure()\n", 516 | "plt.imshow(imgs[10])" 517 | ], 518 | "execution_count": 138, 519 | "outputs": [ 520 | { 521 | "output_type": "execute_result", 522 | "data": { 523 | "text/plain": [ 524 | "" 525 | ] 526 | }, 527 | "metadata": { 528 | "tags": [] 529 | }, 530 | "execution_count": 138 531 | }, 532 | { 533 | "output_type": "display_data", 534 | "data": { 535 | "image/png": "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\n", 536 | "text/plain": [ 537 | "
" 538 | ] 539 | }, 540 | "metadata": { 541 | "tags": [], 542 | "needs_background": "light" 543 | } 544 | }, 545 | { 546 | "output_type": "display_data", 547 | "data": { 548 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUoAAAD8CAYAAAARze3ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXxTVf7/8dfJTdrSFlr2rayWHRFQEGR0VEAQcGMcxQ3cBmVxRBwVnfnODL+ZcUHFFVFUFBRFRQQXXBBxQ0AW2ZdSCkhLoSyl0D25Ob8/csUqhaRtkpu0n+fj0UfvluQdSD+59557zlVaa4QQQpyaw+4AQggR6aRQCiGEH1IohRDCDymUQgjhhxRKIYTwQwqlEEL4EZJCqZQarJTarpRKV0pNCsVrCCFEuKhgX0eplDKANGAgkAmsAq7TWm8J6gsJIUSYhGKPsjeQrrXO0FqXAnOBK0LwOkIIERbOEDxnc2BvmflM4NzTPSBGxeo4EkIQRQghAnOc3ENa64blrQtFoQyIUmo0MBogjnjOVf3tiiKEEHyp5+051bpQHHpnAS3KzKdYy35Daz1Da32O1vocF7EhiCGEEMERikK5CminlGqjlIoBRgAfhuB1hBAiLIJ+6K219iilxgOfAwYwU2u9OdivI4QQ4RKSc5Ra60XAolA8twgypTA6tUO7DFRhCeaODLsTCRFxbGvMEfY7dn0fuOkgr3SaRWPDy/rSOvzlk9vp+GIu5pY0u+MJETGkUNZQqteZvPTw03SLiQNqAdC/lknG1S8xd1BdnnhiBK58Tb0V2Xj2ZILXtDewEDaSQllDFTeKo4srptx1I2rnMmLydADezU9iavpAij5vBECTlfmo1VvQHk/YsgphNymUNdS+m0owlP+LHq5JzOOa7vOgu29+XUkJV79/N+0f3YF56HCIUwoRGWT0oBqqXp3CSj2ue2wsG0Y8S68l+0l79RwO3dEXo369IKcTIrJIoayBnG1aMeGMJZV+fLwjhskNN7Pr0lf47v+eoe1nBRz+S1+MOnWCmFKIyCGFsgYykxMZFH9SZ6nfbqO9AT1XvCOG55uvZOW/p5H6VRGlg3sFI6IQEUUKpTjJ40fO4MzlIyv0GEM5eLbZKu55bg4H/noejri4EKUTIvykMacGUqbJEa+XusbJ69zaZPasQbT8Mo9180voHluxfviXJxQy4P6n6dJ5PB0nbMBbXAyAUbcuno4t2X1F/IltXXmK1rN348naV6X3I0SoSaGsgbybdnDb9hv5uuuCk9alu0tI+SIX74ZtXPX5XUy+cD7FOoa39vbm8y7vEatcfp8/3hHDtsumcV7zG6gzLQlnvpuGU3Yzufk0znAlntjOrU1mj2zOE28Pp/WUtSeKqhCRJugjnFdGHVVPyzBr4ZX22tnsGvTqScvPfHoszR5fDlqjXDEol/Vdahhse7Y9aZfMwKXK2RU9hTxvEQBJjlqn3KbQW0rXD+6i/d/WoUtKKvZGhAiSL/W8NVrrc8pbJ+coa6jWc9VJDTYbSotp9m0+WF+e2l2Kt7DQ93P8OB3Hb6PDgrEsKw6soQd8BfJ0RRJ8e6CbrnqOtMe7oyp4qC9EOEihrKHisvNZVvLrf7+pvdzw/ERYseGUj/EWFNBu3EoeuvtOvi4K7kcn3hHDpuHPkTalB0b9ehjJSRjJSVI4RUSQQ+8arNmK2rzW8jsA5hyvz5x+3QPubVMytBexE7NZ1PHDgHr4BCrfW8w3xcmY2vecj6RfSsy0+sR/uUHOYYqQkkNv4de/11yGeeRowNvHfrIK49oizll9fcDXXAYi0RHH0PhiLk8o5PKEQpaf9T5zX5jKtuldcMTH+38CIUJACmUNtuFgU8C3F1fnm1oVHiHIPHSYpve5+b+c7qGId0JTZyJpl8xg27ROUiyFLaRQ1mDGvPoATM7pS+N3KnfbdTNtJz/d3IUVxaEdhs2lDF+xfL6zFEsRdlIoazBjRA6F3lIWv9YX82hepZ/Hu34r/959eRCTlc+lDLYNms62Z6VYivCSQlmDuRxeRu4aQrO3t1f5ufYvaBWERP7FKhfbLp3OtqldQamwvKYQUihrsMQRRykcWhpwS7dyxaB6dEGd3cX3u8ylOw2v2BuqmCeJVS7mDXqekiHlNlAKEXTShbEGM3NzK7T9vr+ew+d3TyHeYZDnNRl55z3ELloFQMlzTXl3ShLXJFb+EL4izo6N4f+encl/9K0nMvyeIyGBkn6d0GV2PJ0FHhzL1p+4qF6IQEihrKkcVjfECrR057cyaWTEYygHSQ5Q9+RQUOtcEheuIf7T9Wyd3BwqWCjd2qREuxmZcRn7ZpyBJ1bx8IOvcEm82+9j+9cyMZ99nQdTbqfR25vQxSUUDziLgqZOkm/IpFvdTP7beDpOfu1ymW0W8q99g/lxfjdazNwuo7SLgMgF5zWMio2lcPBZMPYghsNL/E3FePYfCOixztYt2XlLCpOuncewhF00MBJYV1LCDTPuodUlu5md+h4NjISAs4zPOpeVL/Sk7rZCjPU78Bb6Rl0/cmtfVv13esDPU6LdvJLXlhKvi2vqbCDFmej/QUCvtdfQ8JZczIMHA34tUX2d7oJzKZQ1hCMujsKB3fCMO8TbnWfT0pmIW5ucPfUumj75Q4Wey5nSnGO9UogZl81nnT6o0CAZZXV5biwpj5z82kaXDkxYOD+gvcqqMLWX3mtH0PiWw7JnKaRnTk3nSEhg2/QuvPfCUyzrNp+W1h6XSxmU9M6v8PN5MrOI/2Alsdfm02XWePK9Fe9amO3Jp+6O3x72K1cMWZPOY/ukeJYc73Ji5KFQMZSDH3vOJeOuDiF9HRH9pFBWc0bn9mx/oQNpl8ygUQUOiwNhHj5C6qObGb3n0go/tqkzkaOpv+6JGh1SOfxBa5aNf5Kd/V/j89fO44P80F9yZCgHD137Ls6U5iF/LRG9pFBWU0aHVHY804e/friQjIEzT3l4rFTVTr2Yx46R9Wg7vq3EeBXeMpF+vqoRq3q+e2JIttfveYohCbuqlC1QI+sc4uCAlmF5LRGdpNW7GnJ060ivNzayqOFmv9u+fs7r3Dz5LlwBHoHH5Gkaz0/79fIa0yTuox+5q+1Y1j/wQoVyXnjlWjKmxKDdpSiP75yhoRzkmAXUMzT1HeHrfVP7xizUm060xxO21xTRQxpzqhln65acs3AnkwMokpWR7y3m++KkE/M7Sxsx9fOhjLz4W/7VsGL9xV882pwFPVLQJSU4mzTm8MzaPNphPvdMvZMm3xzh4rmruK/ezmC/hXLlmoX8eeR4jKVrw/J6IvKcrjFH9iirERUby7a/NuPDBgsI1VmVREccg+PL3K4hfi/jrn2xys/r2X+Aun/OZ0p8fxofXY27X1f2lyT5f2CQ1DXi2XNpLG2Xhu0lRRSRc5TVSMmFZ7L8z08GdSDdUBqUsJ3ii7udmPcWFGAePEjGf87mrCfX8WRT397dnOP12VpaGPI8vfptw5EQ3AYvUT1Ex1+U8MtoUJ/Lnvwq6C3bobQwvyuUM66Fu56HyY1/IMcsoN2bY3hrUD/u2/2nkOeZ3moRunPbkL+OiD5y6F1NFJ3dhqtqLwQC65USCbrH/cx7CQ5+f1ecTn/bzvDX7sDh8XLGujV4TJMER72Q50lUsey4IYHUcrqOG3XrgsNX1c3cvAoPciyimxTKakA5nRwdm08bV/QUSYALa3nZd6lJx4/ifnM/HPPYMdTy9fzSzLj/nvNY3OZxILR7y4ZycGGfTWQnJ+EtKMJo0Yzd1zajqLnJvwe8TxNnHl4cjPnuRmL2xdD27VzYtRdvQUFIcwn7Sat3NVA66BxemfE0Z0RZoQRfP+2OH42j82MH8Oza8+sKpThySx9y+xfztx5fcGdyVljy5HmL6P36RGK65PFuj1do63IRq1wnbWdqLz97Chm2+g5a/aMUc+uOsOQToSN9vaszpchZ0IGfes21O0mlmdrLc0fb8tnN56NXbQR8fdOHrc1iXHL4xrn8hVubAfdfN7WXxUW1ePSvI0853JuIDlXq662UmqmUylFKbSqzrJ5SarFSaof1u661XCmlnlVKpSulNiilegbvbYjyOFOac0+HL+2OUSWGcjCh7m4Gv/4dx67rU6V7ebu1SZuP/8KVOwZVqg86UKFBPgzlYHB8CZOenU3pIBlIuLoKpNX7dWDw75ZNApZordsBS6x5gEuBdtbPaCDwsbJExTkM0ke3YGSdQ3YnCYoJdXezaMpU6ixJRLVpwTMfDqvwwBhevKS+4cE9MoY9nvAdLQ2OL8GceBhHXFzYXlOEj99CqbX+Fjjyu8VXALOs6VnAlWWWz9Y+K4BkpVTTYIUVvpGAjNQ25I7qS9qr3fnu5ifsjhRUdY143m27hNQ3dtNmQQED/m8iI/dcwLqSEv8PBpwYZPavhTc5EZcK3v3GA/FWpzcoGNzN/4Yi6lS21bux1jrbmt4PNLammwNlTyplWsuyEZWmXDFwVnsyhtcmte8enmv7Bg0MwxpAInqum6yIZ5ut4q/PQ/pNrTn4rsmk9reS8YBB2gWzT/s4Qzn45rbHmX5VL9q7wvtvk+JMhDEHUZ/4+q+L6qPKlwdprbWqxBA0SqnR+A7PiUNuPXoqRqd25E71srDrS9R31LJ63URf63ZlPNtsFVPfO8zMNwcTk6e5qsPygB7XyEiocL/zYHmr0xvcMHgicR/9aMvri9CobKE8oJRqqrXOtg6tc6zlWUCLMtulWMtOorWeAcwAX6t3JXNUX0qRPbEvD4x+hxtqH6a67jn6M7FeBhP/WrFRieyU4kxEjz8IH9mdRARTZbswfgiMsqZHAQvLLB9ptX73AfLKHKKLQDkM9v2tL5/fPcUqkiKa3N1mCUZqG7tjiCAK5PKgt4HlQAelVKZS6jbgUWCgUmoHMMCaB1gEZADpwMvA2JCkruZyxpzLF3dNoWmAN8kSkeVPicfYcXsTu2OIIPJ76K21vu4Uq066Qlz7rl4fV9VQNZnRuT1Xjv5aimSU+9/wt3j9lYsx08MzSrsILRk9KIIYHVJp/0aGbQ0RInj+lJAre5XViBTKCGGktqHTWxk83XS13VFEEBjKQZe+GThq17Y7iggCKZQRYsfoJicGqhXVw2ttPyBvSBe7Y4ggkGHWIoDRri2PXjnH7hgiyOoa8XSZuJHvOp9H27dywPvbnkKZlzehoEX5vYccxYrUt4+iCktQRSV4MsMzepIonxTKCJA2ujF/Sjxmd4xqy61NLthwDU91eJc+cYEPeBEML7dYhvv2b8m8+eQ+642NGOIdMad87M/X52Nq+KaoLf9ZPZQWc5wkbMjCk7UvlJFFOWSYNZsZqW0Y/elirkwI8H6xosIKvaVcMWI07jou3n7xqai9oqDQW8rdWReR8VBHnEvW2B2n2qnSMGsitHaMbsJl8bI3GUrfFyfgOlxA/Jo9vH0segetiHfE8HKLZcx67Rlyxp8HqpwbDomQkEJpI2fb1jx51ayouWtitHpyzyDMrTswD+Qwbd0f7Y5TZSnORBbeP4WccX2lWIaJ/IXaKOPGZgyNl0PuUNu16tfhBxJX1aJEu21MExwtnYnMv0+KZbhIobSJIy6Odv0zZG8yDJqs+PWOic2WHGG7u3rcQbGNK5HnJz6P0bm93VGqPfkrtUneFd15pe37dseocbybtnHTUxMxdXgH9Q2VfnEOnC/kVen2GcI/KZR2cBg0GLubRkbNHDrNbs1nb6XnlPFsKK3cPXUizcy273Psqh52x6jW5DpKGxidUhnffL7dMWosMzeXJs/8wP3Lbmf77fE4Etw0rH+cD7q+HpWXDjUwEmg2Lp3892Vk9VCRQmmDA/3qcUl89DcoRDu9ehPtra71KjaW6y+6h4K7jrKs+9wK3YkxErze5mMuGT6B2u+ssDtKtSSH3jZofoMMvRVOmQP9twrrkhJiPltFwzsKWVPOfczyvcWM3HMBHV8ey48lwfmSy/bk80lhcO7amOiIo9n4dBzxcluVUJBCGWZG3bp0S5J+u+H0+qUvUTKkV0DbarebUk7emzzr6zEcvKgUd9siese6qpRnQUEi7d4cw3Vj7mHakKGc868xTDvawv8D/ZjdZhF5l0fvBfWRTLowhpnn4rP57I0ZUXdoF+2u3DGIkmGFeI8fP+12yunEc343jqfEoq47yKud32BRfle+uvFcDp+VxKzJT9IppvJ7bbvc+Yy+8S4c3/30m+VGh1S239GA6Ze/WqXTMl8Uunhg6l9o/OoadIC3+BU+0oUxguScHYsDuUA43F5r+wF5Q/0PeaY9Hoyla0l+YzlJQ9K5au5EPtl3Jukjknhl8lNVKpJubTLorfswlm88aZ25PZ3UiSt4ZNwoBm0dRo5ZUKnXuCTezbwHppA54WyMBvUrnVX8luxRhpFyxVD8STO+7rrA7ig10tU7B1B0jRNP9v6AH+OIj+e6tWmMrHOoyq+/053P+CtG41136hHsnS1SMBslse+PSYy4eQkPNdheqdcq0W6eze3I9K8HnFjW5DtF8roy78M0MXfuhgioAZHgdHuUUijDyNG1Iy8teoWWUXgJij+3/fwHvtvdlrQLZtsd5ZRM7WXAlquIv6kYz/4DAT1GOZ3s+Udvvrnt8Spf99r5hxtp8efNvy1MSqF6diZzYBKenseZ1O1zLo7PAKCew0miIziNPQC5ZiHHy1xov89Ti9vXjcTj+fXAMmZFbZqsLPTNeDWOtdtqzCH86QqlXB4UToYivpr2y20Qm8/Izj/aHeO0DOVgaZeFXPTGFdS6viHmwYN+H6M9HvBS5SL5XG4r2kzIxfO7Ipkzpi/vPPA4bZxxZc5bh+aLtK4RT90y8y2dsKnPbweMdvczcWtfF083JmP2DOFwcUN2H6pHo7m1cLg18Us34y2o3KmBaCV7lGG06+G+bB01rdr37y7RbmJV1VqGQ63/lsvRjzYk5uv1vmJ4Gs42rfh5agIbz32rUq81YtfF7H2mPYnv+q5x1H3PYvfdmivab+SuBt9F1RGGW5s8drgLr35/Ac2WKmp/uK7a7HHKoXeESHu5F7uGvmx3jJA746tb8JYYNGt+hHmdZ0dsb5c0dwFDl42j/b37T3ve0hEfj+ej+izu9FFAz5vpyee41/dl2N4Vh6EcdPhuJMamRBxuKOxYQsYlrwblPdjpkFnA6F1Xkv3iGSQv3Bj1e5lSKCNETSmUI3ZdTObUdtTZeIjjXRtwzX8+o23sAZIdhfSLi6y9abc2ee1YC556+0raztxT7r1pjMaNuO27FQHdrqPQW8p5j02g+UeZeBPjuXbeV9xcJ+fEelN7Oewtqlb9/HPMAoZvvomkWwor1FAWaaRQRoiaUijB13Bw1dbrib1kN0adOuBQ0LQRW+9LYtfgV+yOd5LfFMxZe/Hs2fub9YH+3805Xp85vbpgHvMV1fSn+7DzmhdDkjmSVKahLNLIdZSRQtn/pRQudY14/pc6H0e3jpjHjmEezcPcuoNW7ykyPZE3WLFLGYxO2semO57nsk/Xkn3veeDwNa6o2FgSGwR2WHlxrT3kX9zxxHx8lqNaDBTszy8NZXtfrGd3lJCQQhkmRuNGPNhvkd0xwqpfnIMes7ZgdG6PcvousKi1dCPzjne1OdmpGcrBnclZfDnhcQoWtaLoit7seKwHK3u9HtDjmzoT2dfv115XuoZ1wPq458uYF/W0O0bQyeVBYVLQuzVDEuYTqks/ItV/Gq3j/QV7+H8zbyDl8zy2javF3KSlQC27o51WIyOB77vNJ/O5fJIdTuIrcD3jVf1XsEEpVEwMtf5wKOKvAAimls5Essa6abnU7iTBJYUyTPafa5ASoa2/oWQoB9ck5tFn7BSO32nQJaYWkV4ky6rM/9nQpPWsu2AUMXsO83ineSFIFdmaJFe/u4rKobcIi5bORKtIVn8X1vJS/+E9bB/XnPPjTn+NZnWUdSjZ7ghBJ3uUYeCIi+Pc/pvtjiHCaE7rL/G2XoxRw0aJGp4+kHZ/O0h1+3qQPcpwcLkYVn+93SlEGBnKUeOG0ttcWkTu/1rhydpnd5Sgk0IphKgyU3sZ/sZEYj5fbXeUkJBCGQaOOrVJcFSP/rBC/J6pvfReO4Iznk23O0rISKEMg+zLWzG4VqHdMYQIicVFtWg80RPQaEzRSgplGGhDVfsRg0TN9GOJm/8+cDPmjgy7o4SU/PUKISrF1F6u/XwcCe+vtDtKyPktlEqpFkqppUqpLUqpzUqpu63l9ZRSi5VSO6zfda3lSin1rFIqXSm1QSlV/fozVZCnZlw+KGqY+/efQ8f7ttodIywC2aP0APdqrTsDfYBxSqnOwCRgida6HbDEmge4FGhn/YwGpgc9dTRxGJx/zVq7UwgRVO/mJ7Hu/h5+72pZXfgtlFrrbK31Wmv6OLAVaA5cAcyyNpsFXGlNXwHM1j4rgGSlVNOgJ48iDWNqxodJ1Bz/nHs9ziVr7I4RNhXqmaOUag30AFYCjbXW2daq/UBja7o5UHYwv0xrWXaZZSilRuPb4ySOyt8CVAgRfhOu/pDP/tiVXQvOoPZe8zfrah0oxbFsg29Ge6vFXR4DLpRKqUTgfWCC1vqYKnOTLK21Vqpigy1qrWcAM8A3cG9FHiuEsNedyVncmZwF9528bmtpIXOOngvAprxm7HnvDPBC8s5S4r7fii4p8XufokgTUKFUSrnwFck5Wuv51uIDSqmmWuts69D6l/Hus4AWZR6eYi0TQtQAnWLi+W+jjb6ZRhvhId9kmruAVcUtmbx2GAnfJdD07a2Yubn2Ba2AQFq9FfAqsFVrPbXMqg+BUdb0KGBhmeUjrdbvPkBemUP0GsdITKCuM7pvuiREMLR3JXBD7cOk/XEW3z00lS5LjpIz9teR5CNZIK3e/YCbgIuVUuusnyHAo8BApdQOYIA1D7AIyADSgZeBscGPHT2OD+jEuOSddscQIqIkOuJ4vMlPLJo0hV1zuuJs1cL/g2zk99Bba/09oE6x+qQ7gmnf3crGVTFXteE1qHGjyAgRqKbORNL+OIt248bQ9oHMiG34kZ45QgjbLbvuCYqH9bI7xilJoRRC2K6RkUDp2MN2xzglKZRCiIjQo0EWjrjAb+IWTlIohRAR4Ymm3+I5t5PdMcolhVIIERFcykA7TtVubC8plEKIiODWJsorrd5CCHFKf8u+AOfKyBy2TQqlECIiHCpJwFtcbHeMckmhFEJEhI1fdrA7wilJoRRC2G72sQa0fWWP3TFOSQqlEMJWpvbyyNxr8GRG7iBjUiiFELYasu1y2kyP7HuCS6EUQthmWbGX4qebYR7I8b+xjaRQCiFsYWovo+aPJe6jH+2O4pcUSmGb9/Pr4Nam/w1FtfRJYSLtX4rsPclfSKEUtsj05PPEv6+n/Wd3SLGsoSZ+OBJzR4bdMQIihVLYIsWZyLFWDjretYV/5fSwO44IM1N7afmp2+4YAZNCGWKuQi+5ZqHdMSKWt7CQox65XXE0+6LQRYmOnqJXGVIoQyzui/VMy+1pd4yIs7W0kGbf+b5A1h9uZnMaUVmm9nLnDzfRaf54Hj4UeM8aQznYdb3CER8dX5JSKENMmyZuLffM+b2rfrwDY+UWAErfacy6khKbE4nKMJSDjAEz2TF8Og812F6hx6YNeom6i2PR550VonTBI4VS2KJ0fzzaXYr3/B58MPlxusfG2h1JVIGhKl5KXMrgrTZLGf7Klxy+vS/K6fdeh7aRQilso5xOjreMJcWZaHcUYaM7k7NY8u+ppL3aDUfXjnbHKZcUShE2HxbEc9vPf6D/lstpsViz5++9ee1/U+2OJSJAkqMWGQNn0uONLRFZLKVQirBp7TrCzw+0w3XpfmKPlLLw1sfpFBMdJ/NFeDzceAM93tiC0SWyhlyTQinCpltMHBl/AdWpLRdOX057V4LdkUQEerjxBs58cztGh1S7o5wghVKE1afnP4/nqYIKt5CKmuWxxuvYNr6+3TFOkEIZatrLnM297E4RMdq7Eljc6SO7Y4go8OKlMyPmEFwKZahpTe0f5DycEBV1SbybbXcm2x0DkEIphIhgw/quxahTx+4YUijDIjJvVSxExHu86Q+4zzrD7hhSKMOh2aIsvih02R1DCFFJUijDwHvoCEe9cp5SiGglhVIIEbH2eUowij12x5BCGQ66qIiHVg23O4YQUWfY6jvQqzfZHUMKZThojwdjV5zdMYSIKsPSLqX1+MOg7W8NlUIphIgo+d5ihmwfgr5B4cneb3ccIIBCqZSKU0r9qJRar5TarJSabC1vo5RaqZRKV0q9o5SKsZbHWvPp1vrWoX0L0aH+Rk2OWWB3DCEi2opik75PT4Sri/Fk7bM7zgmB7FGWABdrrc8CugODlVJ9gMeAp7TWqUAucJu1/W1ArrX8KWu7Gq/usr3s80TuwKRC2CnXLOSajP5MvvwGmk1diXn4iN2RfsNvodQ++dasy/rRwMXAPGv5LOBKa/oKax5rfX+llApaYiFEtVHoLeXG3Rdy6aSJHOufj3fTNvBG3u2LA9rFUUoZwBogFZgG7ASOaq1/abfPBJpb082BvQBaa49SKg+oDxz63XOOBkYDxFEzrjEslVPCQuDWJmtK4LrFd9JqIdT6aiNJxSsiugNbQIVSa20C3ZVSycAHQJWHINZazwBmANRR9SL53ygozP0HGLX6Vrb2e8PuKELYYmtpISPW3YbxWTKNv8+l/aZVAHhtzhWICp0001ofVUotBfoCyUopp7VXmQJkWZtlAS2ATKWUE0gCDgcxc1TSHg/FR+USIVGzFHpLefrImbz61UWc8U4RTVZuAq8ZFcWxLL+FUinVEHBbRbIWMBBfA81S4GpgLjAKWGg95ENrfrm1/iutI+BCqAhg5BmY2lupO9YJEU3ezU/i/20ahuurJJq+vY3UwyvsjlQlgexRNgVmWecpHcC7WuuPlVJbgLlKqf8CPwGvWtu/CryhlEoHjgAjQpA7KqXOOU7utUU0MOQWCKL6OWQW8EjO+Xy6oA9tZu4m5cB2tMdD5DXNVJzfQqm13gD0KGd5BtC7nOXFwJ+Dkq6aUaaJW3auRTU173h7tpwfR4vCH7C/d3ZwyTFgGOntu7gl/Vq7YwgREi5lgmHYHSMkpOHnxncAAA4ySURBVFCGkS4pISMncm6YJEQwXVf7Z45e1sXuGCEhhTLMms2OxdTR1uYnhH/xjhg8cdWzb4kUyjAzir14I/rSWiEq54tCFw2XH/K/YRSSQhlmsT9lMPlgd7tjCBF0d35yG+a2dLtjhIQUyjAzc3OZs/pcu2MIEVRLigw6vnAoIsaODAUplDZIWWRQ6C21O4YQQbGkyOC+J0Zjpu20O0rIyLhfNkj8bCMvHu3IxHoZdkepks2lRXxd2J4nVl5CfFoshe1L2DhwGokO6apZUzx2uB3fXH0WDdNWVNu9SZA9Slt4i4p4/quBdseokmXFXu6cOIGPejSj/W3rSHnkBzr+NY1/HPiD3dFEGH2V0wFze3q1LpIghdIeWtP0exW1I54vK/Yy6d4xxM9fiS4pOTF+oPf4cT79tJfN6UQ4pe1uYneEsJBCaZOkz7bwWUEru2NUmFubjH9iPPEfrCx3fXKab7RqUf2tKDbp8EKR3THCQgqlTczjx/n3F3+yO0aF/SunB03fPPXtQ+sv2My4n4eGMZGwQ4l2c91nY9BrNtsdJSykUNpFa1KWaLI9+f63jRCbS4tYcV8vzGPHTrmNeewYu57vwIbS4jAmE+H2z5xedJq0ze4YYSOF0kYJizdx7dab7I4RkEJvKZd9NIGYr9f73bbO2yv4yz/vYWupHIJXR2nuAtbc0/O0X5jVjRRKG3kLC+GFhuR7I3vvq0S76brwLtr/bR3aE9gAWsmzlzPqX/ey0x09e8zCv3xvMUPeuxfnslOffqmOpFDarPa6bKYfjdwRV7I9+XRaMJ4O9673tXBXQN3ZKxi6cow07kQ5U3vZ6c5nRl4zer80kdS//4R216wOE3LBuc08e/by8YP9uf2FjdQ1IutulIXeUoY+ch/tZ67FW8EiCYDWNHktjkfbncdjjdcFP6AImnuze7Lg2zLjcGtA+X678hVt3z6EOlZAi6wfauSQLlIoI0CtT9cyfNt1LO2y0P/GYTT7WBsaz95QuSJpKWzspH3cftzaxKWq36CuXxS6KNYuLk+I3r3mnz35rP9bd1KXnvq+NtXhdg5VoSLhvl91VD19rupvdwxbGR1SufPjRRH1B9dm4Wjaj11VtV4XSmEk1SH7xi48P/F5+sVF/9ketzYZm3kBa17vRpNvDkOpm0N/8F14fejCUgZ3+e0lM9fU+5ELa0XmGKSZnnyGTr2fJs8sr/a9a/z5Us9bo7U+p7x1UigjSMaUvuy4cbrdMQB44EB3No5I9XVPC5Idz53LjuHTg3IXSlN7GZvVjzrOYv7b+EdilSsICU+tRLv5x4HezPvpbFq/p4j7bgvegsB6Vnn6n81dL77DlQmR07CV7y1mUvYf2fJgV1xfrrE7TkSQQhklnC1ScL3pZkG7z23NkenJ58r/3Ef9l5cH9XkdCQnsfCWVtD/OqtLzHDILuHjN7aTcsh8MB9kjOnDJbT8E/TxoiXaT7vZw3bpbMb6sS9N3dmAePFip53IPOJubn1/IdbUP2HoKItuTz+UbbiVhWhIJG7LwZO2zLUukkUIZRYwuHfj7R2/beoh6xpJbSB214UQf7mBS53Rl8KzvGZO8o1J7gR8WxPOfR0bR4L1NeI8fP7HcaH8GWyfVZd5FL3B2bEyl8y0r9rK5JIVHF19GQqZBy3n7MH/ODPiyqNNxtmrB9ocbsPgPz9HGlVjl56uoH0vc3D9+LHFfbqjwFQw1gRTKaKIUR27pw+x/PkmnmPC3gl+9cwBFN9bCs2dvyF7DaNiQn29tx5+v/5ok56/nZPcW1+PT+X0w3Kd4oBdazt+HZ9ee8s+nOQxUj47sHZTEwD/9SM+E3dxQO+eUh/qzjzXgiJnI5vzmLP/gLJQHWizcD4dyMXNzg/BOT6ZiYynu342CsXm8e+bMsBbMp3Nb81n3RjXu0p5ASaGMQjtm9SRj4MywvuZOdz53jrwLxzc/heX1lCsGHGVuRuXVQfsjVq4YHMlJHB6cii6nTioNDb7IwMw9GtTXDTif00nJgB7sO9/JP69+lxtqHw75a169cwD5Fx0Nyt5xdSSFMgoZ9etxaHZ9lnd/JyiNH/7862AXFj1zAfVmBve8pPDP2aYVub2bUnLjEf7XaSEXxB0n3lH50wen0vWZsTR/7IegP291cbpCGf3XalRT5uEjNBh1hL7rrg3p7W3zvEUMTx/I6ivOkCJpE8+uPdR+ZwUNLkvj2SHDuOihu7l+10XsCnL3T2X/PlHUkkIZwcxDh2lwax69144gMwSjDK0oNjlv2r0UX2Xi2f1z0J9fVJyZtpPk2cs5OtTLmOF30G72GCZkn8Pm0qqN++jWJkbNGDoyJOTQOwo44uLIH3IWceP2Maf9XBoZCZV+rhLt5rW81jz27VA6vnAM76YdIWndFsHjqF0b88y2ZPZP4Mrh39Mtfi8jalessenp3NZ8cWG7Sl/eVBPIOcpqQjmdFF3ak6J6Bgf7mgzo4X/Q1N359Tg6JwVl1UJniSbpk8148/NrfE+MaKRcMRiNGnBwQCtc1x3g7rZLuCYx77SPKfSW0mvaBFIekfOTpyOFUohqykhtQ1FqA/YMc9A09SAuh5cZHebQ2HDwYPZFrM5pgfFmfZLm/yTXTvohhVKImkIpHN06ol0Gjp1ZIbsetDo6XaGU0YOEqE60xrt+KyAj/gSTtHoLIYQfUiiFEMIPKZRCCOGHFEohhPAj4EKplDKUUj8ppT625tsopVYqpdKVUu8opWKs5bHWfLq1vnVoogshRHhUZI/ybmBrmfnHgKe01qlALnCbtfw2INda/pS1nRBCRK2ACqVSKgUYCrxizSvgYmCetcks4Epr+gprHmt9f2t7IYSISoHuUT4N3A/8MoxNfeCo1vqXge0ygebWdHNgL4C1Ps/aXgghopLfQqmUGgbkaK2DegcipdRopdRqpdRqN9K1SggRuQLpmdMPuFwpNQSIA+oAzwDJSimntdeYAmRZ22cBLYBMpZQTSAJOGr5Zaz0DmAG+LoxVfSNCCBEqfvcotdYPaq1TtNatgRHAV1rrG4ClwNXWZqOAhdb0h9Y81vqvdCR0KBdCiEqqynWUDwATlVLp+M5BvmotfxWoby2fCEyqWkQhhLBXhQbF0Fp/DXxtTWcAvcvZphj4cxCyCSFERJCeOUII4YcUSiGE8EMKpRBC+CGFUggh/JBCKYQQfkihFEIIP6RQCiGEH1IohRDCDymUQgjhhxRKIYTwQwqlEEL4IYVSCCH8kEIphBB+SKEUQgg/pFAKIYQfUiiFEMIPKZRCCOGHFEohhPBDCqUQQvghhVIIIfyQQimEEH5IoRRCCD+kUAohhB9SKIUQwg8plEII4YcUSiGE8EMKpRBC+CGFUggh/JBCKYQQfkihFEIIP6RQCiGEH0prbXcGlFLHge1256iEBsAhu0NUkGQOn2jMXZMzt9JaNyxvhTMITx4M27XW59gdoqKUUqujLbdkDp9ozC2ZyyeH3kII4YcUSiGE8CNSCuUMuwNUUjTmlszhE425JXM5IqIxRwghIlmk7FEKIUTEsr1QKqUGK6W2K6XSlVKT7M7zC6XUTKVUjlJqU5ll9ZRSi5VSO6zfda3lSin1rPUeNiiletqUuYVSaqlSaotSarNS6u4oyR2nlPpRKbXeyj3ZWt5GKbXSyveOUirGWh5rzadb61vbkdvKYiilflJKfRwNmZVSu5VSG5VS65RSq61lkf75SFZKzVNKbVNKbVVK9Q17Zq21bT+AAewE2gIxwHqgs52ZymS7AOgJbCqzbAowyZqeBDxmTQ8BPgUU0AdYaVPmpkBPa7o2kAZ0joLcCki0pl3ASivPu8AIa/mLwBhreizwojU9AnjHxs/JROAt4GNrPqIzA7uBBr9bFumfj1nA7dZ0DJAc7sy2fLjK/AP0BT4vM/8g8KCdmX6Xr/XvCuV2oKk13RTf9Z8ALwHXlbedzfkXAgOjKTcQD6wFzsV3EbHz958V4HOgrzXttLZTNmRNAZYAFwMfW3+ckZ65vEIZsZ8PIAnY9ft/q3BntvvQuzmwt8x8prUsUjXWWmdb0/uBxtZ0xL0P69CuB769s4jPbR3CrgNygMX4jjSOaq095WQ7kdtanwfUD29iAJ4G7ge81nx9Ij+zBr5QSq1RSo22lkXy56MNcBB4zTrF8YpSKoEwZ7a7UEYt7fu6ishLBpRSicD7wASt9bGy6yI1t9ba1Fp3x7eX1hvoaHOk01JKDQNytNZr7M5SQX/QWvcELgXGKaUuKLsyAj8fTnynwKZrrXsABfgOtU8IR2a7C2UW0KLMfIq1LFIdUEo1BbB+51jLI+Z9KKVc+IrkHK31fGtxxOf+hdb6KLAU32FrslLql262ZbOdyG2tTwIOhzlqP+BypdRuYC6+w+9niOzMaK2zrN85wAf4vpQi+fORCWRqrVda8/PwFc6wZra7UK4C2lkthTH4TnJ/aHOm0/kQGGVNj8J3DvCX5SOtFrc+QF6Zw4KwUUop4FVgq9Z6aplVkZ67oVIq2Zquhe+86lZ8BfNqa7Pf5/7l/VwNfGXtVYSN1vpBrXWK1ro1vs/tV1rrG4jgzEqpBKVU7V+mgUuATUTw50NrvR/Yq5TqYC3qD2wJe+Zwn0wu52TtEHytszuBv9udp0yut4FswI3vW+02fOeUlgA7gC+Beta2CphmvYeNwDk2Zf4DvkOQDcA662dIFOTuBvxk5d4E/NNa3hb4EUgH3gNireVx1ny6tb6tzZ+VC/m11TtiM1vZ1ls/m3/5e4uCz0d3YLX1+VgA1A13ZumZI4QQfth96C2EEBFPCqUQQvghhVIIIfyQQimEEH5IoRRCCD+kUAohhB9SKIUQwg8plEII4cf/BzAMMtoUM+JYAAAAAElFTkSuQmCC\n", 549 | "text/plain": [ 550 | "
" 551 | ] 552 | }, 553 | "metadata": { 554 | "tags": [], 555 | "needs_background": "light" 556 | } 557 | } 558 | ] 559 | }, 560 | { 561 | "cell_type": "code", 562 | "metadata": { 563 | "id": "WtZYjyiKCayi" 564 | }, 565 | "source": [ 566 | "# Thresholding images for masking\n", 567 | "silhouettes = []\n", 568 | "for im in imgs:\n", 569 | " silhouettes.append(im > 0)\n", 570 | "silhouettes = np.array(silhouettes).transpose(1, 2, 0)" 571 | ], 572 | "execution_count": 139, 573 | "outputs": [] 574 | }, 575 | { 576 | "cell_type": "code", 577 | "metadata": { 578 | "id": "0ECd2PS65wPf", 579 | "outputId": "3047b18b-5df2-425e-8093-73476163a400", 580 | "colab": { 581 | "base_uri": "https://localhost:8080/", 582 | "height": 538 583 | } 584 | }, 585 | "source": [ 586 | "import matplotlib.pyplot as plt\n", 587 | "\n", 588 | "plt.figure()\n", 589 | "plt.imshow(silhouettes[:, :, 0])\n", 590 | "plt.figure()\n", 591 | "plt.imshow(silhouettes[:, :, 10])" 592 | ], 593 | "execution_count": 140, 594 | "outputs": [ 595 | { 596 | "output_type": "execute_result", 597 | "data": { 598 | "text/plain": [ 599 | "" 600 | ] 601 | }, 602 | "metadata": { 603 | "tags": [] 604 | }, 605 | "execution_count": 140 606 | }, 607 | { 608 | "output_type": "display_data", 609 | "data": { 610 | "image/png": "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\n", 611 | "text/plain": [ 612 | "
" 613 | ] 614 | }, 615 | "metadata": { 616 | "tags": [], 617 | "needs_background": "light" 618 | } 619 | }, 620 | { 621 | "output_type": "display_data", 622 | "data": { 623 | "image/png": "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\n", 624 | "text/plain": [ 625 | "
" 626 | ] 627 | }, 628 | "metadata": { 629 | "tags": [], 630 | "needs_background": "light" 631 | } 632 | } 633 | ] 634 | }, 635 | { 636 | "cell_type": "markdown", 637 | "metadata": { 638 | "id": "_dDLgho6ybZg" 639 | }, 640 | "source": [ 641 | "# Visual Hull" 642 | ] 643 | }, 644 | { 645 | "cell_type": "code", 646 | "metadata": { 647 | "id": "kQGUo23nE7QE" 648 | }, 649 | "source": [ 650 | "# Define a voxel grid which has the 3D locations of each voxel which can then be projected onto each image\n", 651 | "def InitializeVoxels(xlim, ylim, zlim, voxel_size):\n", 652 | " voxels_number = [1, 1, 1]\n", 653 | " voxels_number[0] = np.abs(xlim[1]-xlim[0]) / voxel_size[0]\n", 654 | " voxels_number[1] = np.abs(ylim[1]-ylim[0]) / voxel_size[1]\n", 655 | " voxels_number[2] = np.abs(zlim[1]-zlim[0]) / voxel_size[2]\n", 656 | " voxels_number_act = np.array(voxels_number).astype(int) + 1\n", 657 | " total_number = np.prod(voxels_number_act)\n", 658 | "\n", 659 | " voxel = np.ones((np.int(total_number), 4))\n", 660 | "\n", 661 | " sx = xlim[0]\n", 662 | " ex = xlim[1]\n", 663 | " sy = ylim[0]\n", 664 | " ey = ylim[1]\n", 665 | " sz = zlim[0]\n", 666 | " ez = zlim[1]\n", 667 | "\n", 668 | " if(ex > sx):\n", 669 | " x_step = voxel_size[0];\n", 670 | " else:\n", 671 | " x_step = -voxel_size[0];\n", 672 | "\n", 673 | " if(ey > sy):\n", 674 | " y_step = voxel_size[1];\n", 675 | " else:\n", 676 | " y_step = -voxel_size[1];\n", 677 | "\n", 678 | " if(ez > sz):\n", 679 | " z_step = voxel_size[2];\n", 680 | " else:\n", 681 | " z_step = -voxel_size[2];\n", 682 | "\n", 683 | " voxel3Dx, voxel3Dy, voxel3Dz = np.meshgrid(np.linspace(sx, ex, voxels_number_act[0]), \n", 684 | " np.linspace(sy, ey, voxels_number_act[1]),\n", 685 | " np.linspace(sz, ez, voxels_number_act[2]))\n", 686 | " \n", 687 | " l = 0;\n", 688 | " for z in np.linspace(sz, ez, voxels_number_act[2]):\n", 689 | " for x in np.linspace(sx, ex, voxels_number_act[0]):\n", 690 | " for y in np.linspace(sy, ey, voxels_number_act[1]):\n", 691 | " voxel[l] = [x, y, z, 1] \n", 692 | " l=l+1\n", 693 | "\n", 694 | " return voxel, voxel3Dx, voxel3Dy, voxel3Dz, voxels_number" 695 | ], 696 | "execution_count": 303, 697 | "outputs": [] 698 | }, 699 | { 700 | "cell_type": "code", 701 | "metadata": { 702 | "id": "1CKFAlGKEltn" 703 | }, 704 | "source": [ 705 | "voxel_size = [0.001, 0.001, 0.001] # size of each voxel\n", 706 | "\n", 707 | "# The dimension limits\n", 708 | "xlim = [0.07, -0.04] # [-0.04, 0.07]\n", 709 | "ylim = [0.022, 0.132] # [0.04, 0.15]\n", 710 | "zlim = [0.07, -0.04] # [-0.04, 0.07]\n", 711 | "\n", 712 | "voxels, voxel3Dx, voxel3Dy, voxel3Dz, voxels_number = InitializeVoxels(xlim, ylim, zlim, voxel_size);" 713 | ], 714 | "execution_count": 374, 715 | "outputs": [] 716 | }, 717 | { 718 | "cell_type": "code", 719 | "metadata": { 720 | "id": "EseNdcDxzMIf", 721 | "outputId": "0167a728-242d-4477-b15d-e18afbd5b9eb", 722 | "colab": { 723 | "base_uri": "https://localhost:8080/" 724 | } 725 | }, 726 | "source": [ 727 | "print(voxels.shape)" 728 | ], 729 | "execution_count": 375, 730 | "outputs": [ 731 | { 732 | "output_type": "stream", 733 | "text": [ 734 | "(1367631, 4)\n" 735 | ], 736 | "name": "stdout" 737 | } 738 | ] 739 | }, 740 | { 741 | "cell_type": "code", 742 | "metadata": { 743 | "id": "8F-kz8vO1g-m", 744 | "outputId": "27607e24-e8f0-40d3-f399-2d557000c44a", 745 | "colab": { 746 | "base_uri": "https://localhost:8080/" 747 | } 748 | }, 749 | "source": [ 750 | "print(voxels) # The first three values are the x-y-z-coordinates of the voxel, the fourth value is a dummy variable which we will use later on" 751 | ], 752 | "execution_count": 376, 753 | "outputs": [ 754 | { 755 | "output_type": "stream", 756 | "text": [ 757 | "[[ 0.07 0.022 0.07 1. ]\n", 758 | " [ 0.07 0.023 0.07 1. ]\n", 759 | " [ 0.07 0.024 0.07 1. ]\n", 760 | " ...\n", 761 | " [-0.04 0.13 -0.04 1. ]\n", 762 | " [-0.04 0.131 -0.04 1. ]\n", 763 | " [-0.04 0.132 -0.04 1. ]]\n" 764 | ], 765 | "name": "stdout" 766 | } 767 | ] 768 | }, 769 | { 770 | "cell_type": "code", 771 | "metadata": { 772 | "id": "RAKgv-NY03Q5" 773 | }, 774 | "source": [ 775 | "object_points3D = np.copy(voxels).T\n", 776 | "voxels[:, 3] = 0 # making the fourth variable of each voxel 0\n", 777 | "\n", 778 | "proj = []\n", 779 | "\n", 780 | "for i in range(N):\n", 781 | "\n", 782 | " # CAMERA PARAMETERS\n", 783 | " M_ = M[i]\n", 784 | "\n", 785 | " # PROJECTION TO THE IMAGE PLANE\n", 786 | " points2D = np.matmul(M_, object_points3D)\n", 787 | " points2D = np.floor(points2D / points2D[2, :]).astype(np.int32)\n", 788 | " points2D[np.where(points2D < 0)] = 0; # check for negative image coordinates\n", 789 | "\n", 790 | " img_size = (silhouettes).shape\n", 791 | " ind1 = np.where(points2D[1, :] >= img_size[0]) # check for out-of-bounds (width) coordinate\n", 792 | " points2D[:, ind1] = 0\n", 793 | " ind1 = np.where(points2D[0, :] >= img_size[1]) # check for out-of-bounds (height) coordinate\n", 794 | " points2D[:, ind1] = 0\n", 795 | "\n", 796 | " # ACCUMULATE THE VALUE OF EACH VOXEL IN THE CURRENT IMAGE\n", 797 | " voxels[:, 3] += silhouettes[:, :, i].T[points2D.T[:, 0], points2D.T[:, 1]]\n", 798 | "\n", 799 | " proj.append(points2D)" 800 | ], 801 | "execution_count": 377, 802 | "outputs": [] 803 | }, 804 | { 805 | "cell_type": "code", 806 | "metadata": { 807 | "id": "EwaRDTtRJF1j", 808 | "outputId": "991bab52-1061-496b-f3e1-52903cf9312e", 809 | "colab": { 810 | "base_uri": "https://localhost:8080/" 811 | } 812 | }, 813 | "source": [ 814 | "print(voxels) # the fourth value is the number of image views (out of N total) which contain this voxel in the object mask" 815 | ], 816 | "execution_count": 378, 817 | "outputs": [ 818 | { 819 | "output_type": "stream", 820 | "text": [ 821 | "[[ 0.07 0.022 0.07 6. ]\n", 822 | " [ 0.07 0.023 0.07 6. ]\n", 823 | " [ 0.07 0.024 0.07 6. ]\n", 824 | " ...\n", 825 | " [-0.04 0.13 -0.04 0. ]\n", 826 | " [-0.04 0.131 -0.04 0. ]\n", 827 | " [-0.04 0.132 -0.04 0. ]]\n" 828 | ], 829 | "name": "stdout" 830 | } 831 | ] 832 | }, 833 | { 834 | "cell_type": "code", 835 | "metadata": { 836 | "id": "qpfN7aeCQQqV" 837 | }, 838 | "source": [ 839 | "def ConvertVoxelList2Voxel3D(voxels_number, voxel_size, voxel):\n", 840 | " sx = -(voxels_number[0] / 2) * voxel_size[0]\n", 841 | " ex = voxels_number[0] / 2 * voxel_size[0]\n", 842 | "\n", 843 | " sy = -(voxels_number[1] / 2) * voxel_size[1]\n", 844 | " ey = voxels_number[1] / 2 * voxel_size[1]\n", 845 | "\n", 846 | " sz = -(voxels_number[2] / 2) * voxel_size[2] # 0;\n", 847 | " ez = voxels_number[2] / 2 * voxel_size[2] # voxels_number[2] * voxel_size[2]\n", 848 | " voxels_number = np.array(voxels_number).astype(np.int32)\n", 849 | " voxel3D = np.zeros((voxels_number[1] + 1, voxels_number[0] + 1, voxels_number[2] + 1));\n", 850 | "\n", 851 | " l = 0\n", 852 | " z1 = 0\n", 853 | " for z in np.arange(sz, ez, voxel_size[2]):\n", 854 | " x1 = 0\n", 855 | " for x in np.arange(sx, ex, voxel_size[0]):\n", 856 | " y1 = 0\n", 857 | " for y in np.arange(sy, ey, voxel_size[1]):\n", 858 | " voxel3D[y1, x1, z1] = voxel[l, 3]\n", 859 | " l = l + 1\n", 860 | " y1 = y1 + 1\n", 861 | " x1 = x1 + 1\n", 862 | " z1 = z1 + 1\n", 863 | "\n", 864 | " return voxel3D" 865 | ], 866 | "execution_count": 379, 867 | "outputs": [] 868 | }, 869 | { 870 | "cell_type": "code", 871 | "metadata": { 872 | "id": "VpDTpqoiQQr0", 873 | "outputId": "f233727b-c350-45db-e649-4b47b647ff0a", 874 | "colab": { 875 | "base_uri": "https://localhost:8080/" 876 | } 877 | }, 878 | "source": [ 879 | "error_amount = 5\n", 880 | "maxv = np.max(voxels[:, 3])\n", 881 | "iso_value = maxv-np.round(((maxv)/100)*error_amount)-0.5\n", 882 | "print('max number of votes:' + str(maxv))\n", 883 | "print('threshold for marching cube:' + str(iso_value))\n", 884 | "\n", 885 | "voxel3D = ConvertVoxelList2Voxel3D(np.array(voxels_number), voxel_size, voxels)" 886 | ], 887 | "execution_count": 380, 888 | "outputs": [ 889 | { 890 | "output_type": "stream", 891 | "text": [ 892 | "max number of votes:48.0\n", 893 | "threshold for marching cube:45.5\n" 894 | ], 895 | "name": "stdout" 896 | } 897 | ] 898 | }, 899 | { 900 | "cell_type": "code", 901 | "metadata": { 902 | "id": "eVW1ZTVi0rPx", 903 | "outputId": "56fae87f-81ba-4af3-c12a-ba8b06d7d76b", 904 | "colab": { 905 | "base_uri": "https://localhost:8080/" 906 | } 907 | }, 908 | "source": [ 909 | "# debug\n", 910 | "voxel3D[0, :, :] = maxv\n", 911 | "# voxel3D[-1, :, :] = maxv\n", 912 | "\n", 913 | "voxel3D[:, 0, :] = maxv\n", 914 | "# voxel3D[:, -1, :] = maxv\n", 915 | "\n", 916 | "voxel3D[:, :, 0] = maxv\n", 917 | "# voxel3D[:, :, -1] = maxv\n", 918 | "print(voxel3D)" 919 | ], 920 | "execution_count": 381, 921 | "outputs": [ 922 | { 923 | "output_type": "stream", 924 | "text": [ 925 | "[[[48. 48. 48. ... 48. 48. 48.]\n", 926 | " [48. 48. 48. ... 48. 48. 48.]\n", 927 | " [48. 48. 48. ... 48. 48. 48.]\n", 928 | " ...\n", 929 | " [48. 48. 48. ... 48. 48. 48.]\n", 930 | " [48. 48. 48. ... 48. 48. 48.]\n", 931 | " [48. 48. 48. ... 48. 48. 48.]]\n", 932 | "\n", 933 | " [[48. 48. 48. ... 48. 48. 48.]\n", 934 | " [48. 6. 6. ... 7. 7. 7.]\n", 935 | " [48. 6. 6. ... 7. 7. 7.]\n", 936 | " ...\n", 937 | " [48. 10. 10. ... 5. 5. 5.]\n", 938 | " [48. 10. 9. ... 4. 5. 5.]\n", 939 | " [48. 10. 9. ... 4. 4. 4.]]\n", 940 | "\n", 941 | " [[48. 48. 48. ... 48. 48. 48.]\n", 942 | " [48. 6. 6. ... 7. 7. 7.]\n", 943 | " [48. 6. 6. ... 7. 7. 7.]\n", 944 | " ...\n", 945 | " [48. 10. 10. ... 5. 5. 5.]\n", 946 | " [48. 10. 10. ... 4. 4. 4.]\n", 947 | " [48. 10. 9. ... 4. 4. 4.]]\n", 948 | "\n", 949 | " ...\n", 950 | "\n", 951 | " [[48. 48. 48. ... 48. 48. 48.]\n", 952 | " [48. 0. 0. ... 0. 0. 0.]\n", 953 | " [48. 0. 0. ... 0. 0. 0.]\n", 954 | " ...\n", 955 | " [48. 0. 0. ... 0. 0. 0.]\n", 956 | " [48. 0. 0. ... 0. 0. 0.]\n", 957 | " [48. 0. 0. ... 0. 0. 0.]]\n", 958 | "\n", 959 | " [[48. 48. 48. ... 48. 48. 48.]\n", 960 | " [48. 0. 0. ... 0. 0. 0.]\n", 961 | " [48. 0. 0. ... 0. 0. 0.]\n", 962 | " ...\n", 963 | " [48. 0. 0. ... 0. 0. 0.]\n", 964 | " [48. 0. 0. ... 0. 0. 0.]\n", 965 | " [48. 0. 0. ... 0. 0. 0.]]\n", 966 | "\n", 967 | " [[48. 48. 48. ... 48. 48. 48.]\n", 968 | " [48. 0. 0. ... 0. 0. 0.]\n", 969 | " [48. 0. 0. ... 0. 0. 0.]\n", 970 | " ...\n", 971 | " [48. 0. 0. ... 0. 0. 0.]\n", 972 | " [48. 0. 0. ... 0. 0. 0.]\n", 973 | " [48. 0. 0. ... 0. 0. 0.]]]\n" 974 | ], 975 | "name": "stdout" 976 | } 977 | ] 978 | }, 979 | { 980 | "cell_type": "markdown", 981 | "metadata": { 982 | "id": "d7WPKMKOL8vc" 983 | }, 984 | "source": [ 985 | "# Marching Cubes" 986 | ] 987 | }, 988 | { 989 | "cell_type": "code", 990 | "metadata": { 991 | "id": "juywEVQpL-nt" 992 | }, 993 | "source": [ 994 | "# !pip install --upgrade PyMCubes\n", 995 | "# !pip install pycollada" 996 | ], 997 | "execution_count": 382, 998 | "outputs": [] 999 | }, 1000 | { 1001 | "cell_type": "code", 1002 | "metadata": { 1003 | "id": "osgjmy7ML8R_" 1004 | }, 1005 | "source": [ 1006 | "import numpy as np\n", 1007 | "import mcubes\n", 1008 | "\n", 1009 | "# Extract the 0-isosurface\n", 1010 | "vertices, triangles = mcubes.marching_cubes(voxel3D, iso_value)\n", 1011 | "\n", 1012 | "# Export the result to sphere.dae\n", 1013 | "mcubes.export_mesh(vertices, triangles, \"DinoR_21.dae\", \"DinoR_21_\")" 1014 | ], 1015 | "execution_count": 383, 1016 | "outputs": [] 1017 | }, 1018 | { 1019 | "cell_type": "code", 1020 | "metadata": { 1021 | "id": "lRCzfdqdfJcQ" 1022 | }, 1023 | "source": [ 1024 | "" 1025 | ], 1026 | "execution_count": 372, 1027 | "outputs": [] 1028 | } 1029 | ] 1030 | } --------------------------------------------------------------------------------