|
16 | 16 | "outputs": [], |
17 | 17 | "source": [ |
18 | 18 | "data_path = r\"C:/Users/ggjh246/OneDrive - University of Leeds/Code/playNano_testdata/save-2025.05.20-12.57.06.187.h5-jpk\"\n", |
| 19 | + "# Un- comment the following line if you do not have playnano installed in your enviroment. \n", |
| 20 | + "#%pip install numpy pandas matplotlib playnano\n", |
19 | 21 | "from playnano.io.loader import load_afm_stack\n", |
20 | 22 | "afm_stack = load_afm_stack(data_path, channel = \"height_trace\")" |
21 | 23 | ] |
|
40 | 42 | "metadata": {}, |
41 | 43 | "outputs": [], |
42 | 44 | "source": [ |
43 | | - "from pnanolocz_lib import level_auto, level, level_weighted\n", |
| 45 | + "from pnanolocz_lib import level_auto, level, level_weighted, thresholder\n", |
44 | 46 | "\n", |
45 | 47 | "frames = afm_stack.n_frames\n", |
46 | | - "frame_ind = range(0, frames)\n", |
47 | | - "\n", |
48 | | - "plane_levelled = level.apply_level(afm_stack.data, 2, 2, \"plane\")\n", |
49 | | - "plt.imshow(plane_levelled[5], cmap=\"afmhot\")\n" |
| 48 | + "frame_ind = range(0, frames)" |
50 | 49 | ] |
51 | 50 | }, |
52 | 51 | { |
53 | | - "cell_type": "code", |
54 | | - "execution_count": null, |
| 52 | + "cell_type": "markdown", |
55 | 53 | "id": "4", |
56 | 54 | "metadata": {}, |
57 | | - "outputs": [], |
58 | 55 | "source": [ |
59 | | - "levelled = level.apply_level(plane_levelled, 1, 0, \"med_line\",)\n", |
60 | | - "plt.imshow(levelled[5], cmap=\"afmhot\")\n" |
| 56 | + "### Apply a quadratic plane fit" |
61 | 57 | ] |
62 | 58 | }, |
63 | 59 | { |
|
67 | 63 | "metadata": {}, |
68 | 64 | "outputs": [], |
69 | 65 | "source": [ |
70 | | - "auto_leveled = level_auto.apply_level_auto(afm_stack.data, \"multi-plane-otsu\")" |
| 66 | + "plane_levelled = level.apply_level(afm_stack.data, 2, 2, \"plane\")\n", |
| 67 | + "plt.imshow(plane_levelled[5], cmap=\"afmhot\")" |
71 | 68 | ] |
72 | 69 | }, |
73 | 70 | { |
74 | | - "cell_type": "code", |
75 | | - "execution_count": null, |
| 71 | + "cell_type": "markdown", |
76 | 72 | "id": "6", |
77 | 73 | "metadata": {}, |
78 | | - "outputs": [], |
79 | 74 | "source": [ |
80 | | - "plt.imshow(auto_leveled[5], cmap=\"afmhot\")" |
| 75 | + "### Mask all the pixels above 0" |
81 | 76 | ] |
82 | 77 | }, |
83 | 78 | { |
|
87 | 82 | "metadata": {}, |
88 | 83 | "outputs": [], |
89 | 84 | "source": [ |
90 | | - "from pnanolocz_lib.thresholder import thresholder\n", |
91 | | - "mask_hist = thresholder(plane_levelled, 'histogram', limits = (0.2, 100),invert = False)" |
| 85 | + "mask_hist = thresholder.apply_thresholder(plane_levelled, 'histogram', limits = (float('-inf'), 0.2),invert = False)\n", |
| 86 | + "plt.imshow(mask_hist[5], interpolation= 'none')" |
92 | 87 | ] |
93 | 88 | }, |
94 | 89 | { |
95 | | - "cell_type": "code", |
96 | | - "execution_count": null, |
| 90 | + "cell_type": "markdown", |
97 | 91 | "id": "8", |
98 | 92 | "metadata": {}, |
99 | | - "outputs": [], |
100 | 93 | "source": [ |
101 | | - "plt.imshow(mask_hist[5], interpolation= 'none')" |
| 94 | + "### Apply a line fit from the background (not masked) to the image" |
102 | 95 | ] |
103 | 96 | }, |
104 | 97 | { |
|
108 | 101 | "metadata": {}, |
109 | 102 | "outputs": [], |
110 | 103 | "source": [ |
111 | | - "from pnanolocz_lib.level_weighted import apply_level_weighted\n", |
112 | | - "lev_weight = apply_level_weighted(plane_levelled, 1, 1, \"smed_line\", mask=mask_hist)\n", |
113 | | - "plt.imshow(lev_weight[5], cmap=\"afmhot\")" |
| 104 | + "masked_line_levelled = level.apply_level(plane_levelled, 1, 0, \"line\", mask_hist)\n", |
| 105 | + "plt.imshow(masked_line_levelled[5], cmap=\"afmhot\")" |
114 | 106 | ] |
115 | 107 | }, |
116 | 108 | { |
117 | | - "cell_type": "code", |
118 | | - "execution_count": null, |
| 109 | + "cell_type": "markdown", |
119 | 110 | "id": "10", |
120 | 111 | "metadata": {}, |
121 | | - "outputs": [], |
122 | 112 | "source": [ |
123 | | - "masked_line_levelled = level.apply_level(plane_levelled, 1, 0, \"line\", mask_hist)\n", |
124 | | - "plt.imshow(masked_line_levelled[5], cmap=\"afmhot\")" |
| 113 | + "### Rather than manually applying steps, use the \"multi-plane-otsu\" auto level routine" |
125 | 114 | ] |
126 | 115 | }, |
127 | 116 | { |
|
130 | 119 | "id": "11", |
131 | 120 | "metadata": {}, |
132 | 121 | "outputs": [], |
133 | | - "source": [] |
| 122 | + "source": [ |
| 123 | + "auto_leveled = level_auto.apply_level_auto(afm_stack.data, \"multi-plane-otsu\")\n", |
| 124 | + "plt.imshow(auto_leveled[5], cmap=\"afmhot\")" |
| 125 | + ] |
134 | 126 | }, |
135 | 127 | { |
136 | | - "cell_type": "code", |
137 | | - "execution_count": null, |
| 128 | + "cell_type": "markdown", |
138 | 129 | "id": "12", |
139 | 130 | "metadata": {}, |
140 | | - "outputs": [], |
141 | 131 | "source": [ |
142 | | - "hist2 = thresholder(masked_line_levelled, \"histogram\", limits=(0.4,100), invert=False)\n", |
143 | | - "plt.imshow(hist2[5], interpolation= 'none')" |
| 132 | + "### Use `get_background` to see the values subtracted from a leveled image." |
144 | 133 | ] |
145 | 134 | }, |
146 | 135 | { |
|
150 | 139 | "metadata": {}, |
151 | 140 | "outputs": [], |
152 | 141 | "source": [ |
153 | | - "maksed_linemed_levelled = level.apply_level(masked_line_levelled, 1, 0, \"med_line\", mask_hist)\n", |
154 | | - "plt.imshow(maksed_linemed_levelled[1], cmap=\"afmhot\")" |
| 142 | + "from pnanolocz_lib.level import get_background" |
155 | 143 | ] |
156 | 144 | }, |
157 | 145 | { |
|
161 | 149 | "metadata": {}, |
162 | 150 | "outputs": [], |
163 | 151 | "source": [ |
164 | | - "mask_hist2 =thresholder(maksed_linemed_levelled, 'histogram', limits= (0.5,100), invert=False)" |
| 152 | + "bg = get_background(afm_stack.data, 1, 1, 'plane')" |
165 | 153 | ] |
166 | 154 | }, |
167 | 155 | { |
|
171 | 159 | "metadata": {}, |
172 | 160 | "outputs": [], |
173 | 161 | "source": [ |
174 | | - "mask_hist2 = thresholder(maksed_linemed_levelled, 'histogram', limits = (0.5,100),invert = False)\n", |
175 | | - "plt.imshow(mask_hist2[0])" |
| 162 | + "plt.imshow(bg[5])" |
176 | 163 | ] |
177 | 164 | }, |
178 | 165 | { |
|
181 | 168 | "id": "16", |
182 | 169 | "metadata": {}, |
183 | 170 | "outputs": [], |
184 | | - "source": [ |
185 | | - "manual_levelled = level.apply_level(masked_plane_levelled, 1, 0, \"line\", mask_hist2)\n", |
186 | | - "plt.imshow(manual_levelled[0], cmap=\"afmhot\")" |
187 | | - ] |
188 | | - }, |
189 | | - { |
190 | | - "cell_type": "code", |
191 | | - "execution_count": null, |
192 | | - "id": "17", |
193 | | - "metadata": {}, |
194 | | - "outputs": [], |
195 | | - "source": [] |
196 | | - }, |
197 | | - { |
198 | | - "cell_type": "code", |
199 | | - "execution_count": null, |
200 | | - "id": "18", |
201 | | - "metadata": {}, |
202 | | - "outputs": [], |
203 | | - "source": [ |
204 | | - "from pnanolocz_lib.level import get_background" |
205 | | - ] |
206 | | - }, |
207 | | - { |
208 | | - "cell_type": "code", |
209 | | - "execution_count": null, |
210 | | - "id": "19", |
211 | | - "metadata": {}, |
212 | | - "outputs": [], |
213 | | - "source": [ |
214 | | - "bg = get_background(afm_stack.data, 1, 0, 'med_line')" |
215 | | - ] |
216 | | - }, |
217 | | - { |
218 | | - "cell_type": "code", |
219 | | - "execution_count": null, |
220 | | - "id": "20", |
221 | | - "metadata": {}, |
222 | | - "outputs": [], |
223 | | - "source": [ |
224 | | - "plt.imshow(bg[0])" |
225 | | - ] |
226 | | - }, |
227 | | - { |
228 | | - "cell_type": "code", |
229 | | - "execution_count": null, |
230 | | - "id": "21", |
231 | | - "metadata": {}, |
232 | | - "outputs": [], |
233 | 171 | "source": [] |
234 | 172 | } |
235 | 173 | ], |
|
249 | 187 | "name": "python", |
250 | 188 | "nbconvert_exporter": "python", |
251 | 189 | "pygments_lexer": "ipython3", |
252 | | - "version": "3.11.13" |
| 190 | + "version": "3.12.12" |
253 | 191 | } |
254 | 192 | }, |
255 | 193 | "nbformat": 4, |
|
0 commit comments