|
2 | 2 | "cells": [ |
3 | 3 | { |
4 | 4 | "cell_type": "code", |
5 | | - "execution_count": 2, |
| 5 | + "execution_count": 10, |
6 | 6 | "id": "coral-quantum", |
7 | 7 | "metadata": {}, |
8 | 8 | "outputs": [], |
9 | 9 | "source": [ |
10 | | - "data_folder = '../data/banana/'\n", |
11 | | - "\n" |
| 10 | + "from skimage.filters import threshold_otsu, threshold_yen\n", |
| 11 | + "\n", |
| 12 | + "data_folder = '../data/banana/'" |
12 | 13 | ] |
13 | 14 | }, |
14 | 15 | { |
15 | 16 | "cell_type": "code", |
16 | | - "execution_count": 3, |
| 17 | + "execution_count": 20, |
17 | 18 | "id": "dutch-artwork", |
18 | 19 | "metadata": {}, |
19 | 20 | "outputs": [ |
20 | 21 | { |
21 | | - "name": "stdout", |
22 | | - "output_type": "stream", |
23 | | - "text": [ |
24 | | - "../data/banana/ [] ['banana0002.tif', 'banana0003.tif', 'banana0004.tif', 'banana0005.tif', 'banana0006.tif', 'banana0007.tif', 'banana0008.tif', 'banana0009.tif', 'banana0010.tif', 'banana0011.tif', 'banana0012.tif', 'banana0013.tif', 'banana0014.tif', 'banana0015.tif', 'banana0016.tif', 'banana0017.tif', 'banana0018.tif', 'banana0019.tif', 'banana0020.tif', 'banana0021.tif', 'banana0022.tif', 'banana0023.tif', 'banana0024.tif', 'banana0025.tif', 'banana0026.tif', 'image_source.txt']\n" |
25 | | - ] |
| 22 | + "data": { |
| 23 | + "text/plain": [ |
| 24 | + "['banana0002.tif',\n", |
| 25 | + " 'banana0003.tif',\n", |
| 26 | + " 'banana0004.tif',\n", |
| 27 | + " 'banana0005.tif',\n", |
| 28 | + " 'banana0006.tif',\n", |
| 29 | + " 'banana0007.tif',\n", |
| 30 | + " 'banana0008.tif',\n", |
| 31 | + " 'banana0009.tif',\n", |
| 32 | + " 'banana0010.tif',\n", |
| 33 | + " 'banana0011.tif',\n", |
| 34 | + " 'banana0012.tif',\n", |
| 35 | + " 'banana0013.tif',\n", |
| 36 | + " 'banana0014.tif',\n", |
| 37 | + " 'banana0015.tif',\n", |
| 38 | + " 'banana0016.tif',\n", |
| 39 | + " 'banana0017.tif',\n", |
| 40 | + " 'banana0018.tif',\n", |
| 41 | + " 'banana0019.tif',\n", |
| 42 | + " 'banana0020.tif',\n", |
| 43 | + " 'banana0021.tif',\n", |
| 44 | + " 'banana0022.tif',\n", |
| 45 | + " 'banana0023.tif',\n", |
| 46 | + " 'banana0024.tif',\n", |
| 47 | + " 'banana0025.tif',\n", |
| 48 | + " 'banana0026.tif']" |
| 49 | + ] |
| 50 | + }, |
| 51 | + "execution_count": 20, |
| 52 | + "metadata": {}, |
| 53 | + "output_type": "execute_result" |
26 | 54 | } |
27 | 55 | ], |
28 | 56 | "source": [ |
29 | 57 | "import os\n", |
30 | | - "for root, dirs, files in os.walk(data_folder):\n", |
31 | | - " print(root, dirs, files)" |
32 | | - ] |
33 | | - }, |
34 | | - { |
35 | | - "cell_type": "code", |
36 | | - "execution_count": 5, |
37 | | - "id": "still-taiwan", |
38 | | - "metadata": {}, |
39 | | - "outputs": [ |
40 | | - { |
41 | | - "name": "stdout", |
42 | | - "output_type": "stream", |
43 | | - "text": [ |
44 | | - "../data/banana/ [] banana0002.tif\n", |
45 | | - "../data/banana/ [] banana0003.tif\n", |
46 | | - "../data/banana/ [] banana0004.tif\n", |
47 | | - "../data/banana/ [] banana0005.tif\n", |
48 | | - "../data/banana/ [] banana0006.tif\n", |
49 | | - "../data/banana/ [] banana0007.tif\n", |
50 | | - "../data/banana/ [] banana0008.tif\n", |
51 | | - "../data/banana/ [] banana0009.tif\n", |
52 | | - "../data/banana/ [] banana0010.tif\n", |
53 | | - "../data/banana/ [] banana0011.tif\n", |
54 | | - "../data/banana/ [] banana0012.tif\n", |
55 | | - "../data/banana/ [] banana0013.tif\n", |
56 | | - "../data/banana/ [] banana0014.tif\n", |
57 | | - "../data/banana/ [] banana0015.tif\n", |
58 | | - "../data/banana/ [] banana0016.tif\n", |
59 | | - "../data/banana/ [] banana0017.tif\n", |
60 | | - "../data/banana/ [] banana0018.tif\n", |
61 | | - "../data/banana/ [] banana0019.tif\n", |
62 | | - "../data/banana/ [] banana0020.tif\n", |
63 | | - "../data/banana/ [] banana0021.tif\n", |
64 | | - "../data/banana/ [] banana0022.tif\n", |
65 | | - "../data/banana/ [] banana0023.tif\n", |
66 | | - "../data/banana/ [] banana0024.tif\n", |
67 | | - "../data/banana/ [] banana0025.tif\n", |
68 | | - "../data/banana/ [] banana0026.tif\n", |
69 | | - "../data/banana/ [] image_source.txt\n" |
70 | | - ] |
71 | | - } |
72 | | - ], |
73 | | - "source": [ |
74 | | - "for root, dirs, files in os.walk(data_folder):\n", |
75 | | - " for file in files:\n", |
76 | | - " print(root, dirs, file)" |
77 | | - ] |
78 | | - }, |
79 | | - { |
80 | | - "cell_type": "code", |
81 | | - "execution_count": 7, |
82 | | - "id": "consecutive-landscape", |
83 | | - "metadata": {}, |
84 | | - "outputs": [ |
85 | | - { |
86 | | - "name": "stdout", |
87 | | - "output_type": "stream", |
88 | | - "text": [ |
89 | | - "../data/banana/ [] banana0002.tif\n", |
90 | | - "../data/banana/ [] banana0003.tif\n", |
91 | | - "../data/banana/ [] banana0004.tif\n", |
92 | | - "../data/banana/ [] banana0005.tif\n", |
93 | | - "../data/banana/ [] banana0006.tif\n", |
94 | | - "../data/banana/ [] banana0007.tif\n", |
95 | | - "../data/banana/ [] banana0008.tif\n", |
96 | | - "../data/banana/ [] banana0009.tif\n", |
97 | | - "../data/banana/ [] banana0010.tif\n", |
98 | | - "../data/banana/ [] banana0011.tif\n", |
99 | | - "../data/banana/ [] banana0012.tif\n", |
100 | | - "../data/banana/ [] banana0013.tif\n", |
101 | | - "../data/banana/ [] banana0014.tif\n", |
102 | | - "../data/banana/ [] banana0015.tif\n", |
103 | | - "../data/banana/ [] banana0016.tif\n", |
104 | | - "../data/banana/ [] banana0017.tif\n", |
105 | | - "../data/banana/ [] banana0018.tif\n", |
106 | | - "../data/banana/ [] banana0019.tif\n", |
107 | | - "../data/banana/ [] banana0020.tif\n", |
108 | | - "../data/banana/ [] banana0021.tif\n", |
109 | | - "../data/banana/ [] banana0022.tif\n", |
110 | | - "../data/banana/ [] banana0023.tif\n", |
111 | | - "../data/banana/ [] banana0024.tif\n", |
112 | | - "../data/banana/ [] banana0025.tif\n", |
113 | | - "../data/banana/ [] banana0026.tif\n" |
114 | | - ] |
115 | | - } |
116 | | - ], |
117 | | - "source": [ |
118 | | - "for root, dirs, files in os.walk(data_folder):\n", |
119 | | - " for file in files:\n", |
120 | | - " if file.endswith('tif'):\n", |
121 | | - " print(root, dirs, file)" |
| 58 | + "\n", |
| 59 | + "# get a list of files in that folder\n", |
| 60 | + "file_list = os.listdir(data_folder)\n", |
| 61 | + "\n", |
| 62 | + "# filter the list so that only tif images remain\n", |
| 63 | + "image_file_list = [file for file in file_list if file.endswith(\".tif\")]\n", |
| 64 | + "image_file_list" |
122 | 65 | ] |
123 | 66 | }, |
124 | 67 | { |
125 | 68 | "cell_type": "code", |
126 | | - "execution_count": 15, |
| 69 | + "execution_count": 12, |
127 | 70 | "id": "metallic-punch", |
128 | 71 | "metadata": {}, |
129 | 72 | "outputs": [ |
|
133 | 76 | "840" |
134 | 77 | ] |
135 | 78 | }, |
136 | | - "execution_count": 15, |
| 79 | + "execution_count": 12, |
137 | 80 | "metadata": {}, |
138 | 81 | "output_type": "execute_result" |
139 | 82 | } |
140 | 83 | ], |
141 | 84 | "source": [ |
142 | | - "def process_image(filename):\n", |
| 85 | + "def process_image(filename, threshold_function):\n", |
| 86 | + " \"\"\"\n", |
| 87 | + " Process a given image file name \n", |
| 88 | + " \"\"\"\n", |
| 89 | + " \n", |
143 | 90 | " # load data\n", |
144 | 91 | " from skimage.io import imread\n", |
145 | 92 | " image = imread(filename)\n", |
146 | 93 | " \n", |
147 | 94 | " # segment it\n", |
148 | | - " from skimage.filters import threshold_otsu\n", |
149 | | - " binary_image = image > threshold_otsu(image)\n", |
| 95 | + " binary_image = image > threshold_function(image)\n", |
150 | 96 | " \n", |
151 | 97 | " from skimage.measure import label\n", |
152 | 98 | " labels = label(binary_image)\n", |
|
159 | 105 | " import numpy as np\n", |
160 | 106 | " return np.max(areas)\n", |
161 | 107 | "\n", |
162 | | - "process_image('../data/banana/banana0026.tif')" |
| 108 | + "process_image('../data/banana/banana0026.tif', threshold_otsu)" |
163 | 109 | ] |
164 | 110 | }, |
165 | 111 | { |
166 | 112 | "cell_type": "code", |
167 | | - "execution_count": 16, |
| 113 | + "execution_count": 17, |
168 | 114 | "id": "answering-dispute", |
169 | 115 | "metadata": {}, |
170 | 116 | "outputs": [ |
|
177 | 123 | } |
178 | 124 | ], |
179 | 125 | "source": [ |
180 | | - "slice_areas = []\n", |
181 | | - "for root, dirs, files in os.walk(data_folder):\n", |
182 | | - " for file in files:\n", |
183 | | - " if file.endswith('tif'):\n", |
184 | | - " slice_areas.append(process_image(root + file))\n", |
| 126 | + "slice_areas = [process_image(data_folder + file, threshold_otsu) for file in image_file_list]\n", |
185 | 127 | "print(slice_areas)" |
186 | 128 | ] |
187 | 129 | }, |
188 | 130 | { |
189 | 131 | "cell_type": "code", |
190 | | - "execution_count": 18, |
191 | | - "id": "raised-polls", |
| 132 | + "execution_count": 19, |
| 133 | + "id": "alien-choir", |
192 | 134 | "metadata": {}, |
193 | 135 | "outputs": [ |
194 | 136 | { |
195 | 137 | "name": "stdout", |
196 | 138 | "output_type": "stream", |
197 | 139 | "text": [ |
198 | | - "[1302, 3072, 5127, 6486, 7208, 7540, 7689, 7761, 7800, 7767, 7793, 7812, 7908, 8145, 8367, 8581, 8744, 8989, 9010, 8618, 7682, 6012, 3846, 1468, 840]\n" |
| 140 | + "[1833, 4199, 6074, 7312, 8012, 8379, 8473, 8461, 8382, 8307, 8257, 8300, 8442, 8681, 8967, 9247, 9592, 9880, 9976, 9757, 8886, 7468, 5478, 2203, 1255]\n" |
199 | 141 | ] |
200 | 142 | } |
201 | 143 | ], |
202 | 144 | "source": [ |
203 | | - "slice_areas = []\n", |
204 | | - "for root, dirs, files in os.walk(data_folder):\n", |
205 | | - " for file in files:\n", |
206 | | - " if file.endswith('tif'):\n", |
207 | | - " \n", |
208 | | - " # load data\n", |
209 | | - " from skimage.io import imread\n", |
210 | | - " image = imread(root + file)\n", |
211 | | - "\n", |
212 | | - " # segment it\n", |
213 | | - " from skimage.filters import threshold_otsu\n", |
214 | | - " binary_image = image > threshold_otsu(image)\n", |
215 | | - "\n", |
216 | | - " from skimage.measure import label\n", |
217 | | - " labels = label(binary_image)\n", |
218 | | - "\n", |
219 | | - " # measure radius\n", |
220 | | - " from skimage.measure import regionprops\n", |
221 | | - " statistics = regionprops(labels)\n", |
222 | | - " areas = [s.area for s in statistics]\n", |
223 | | - "\n", |
224 | | - " # store result in array\n", |
225 | | - " import numpy as np\n", |
226 | | - " slice_areas.append(np.max(areas))\n", |
227 | | - " \n", |
228 | | - "print(slice_areas)\n" |
| 145 | + "slice_areas = [process_image(data_folder + file, threshold_yen) for file in image_file_list]\n", |
| 146 | + "print(slice_areas)" |
229 | 147 | ] |
230 | 148 | }, |
231 | 149 | { |
232 | 150 | "cell_type": "code", |
233 | 151 | "execution_count": null, |
234 | | - "id": "alien-choir", |
| 152 | + "id": "1322c391", |
235 | 153 | "metadata": {}, |
236 | 154 | "outputs": [], |
237 | 155 | "source": [] |
|
253 | 171 | "name": "python", |
254 | 172 | "nbconvert_exporter": "python", |
255 | 173 | "pygments_lexer": "ipython3", |
256 | | - "version": "3.8.8" |
| 174 | + "version": "3.9.4" |
257 | 175 | } |
258 | 176 | }, |
259 | 177 | "nbformat": 4, |
|
0 commit comments