表面测量#
在这个笔记本中,我们演示如何在表格中检索表面/顶点测量结果,以及如何在表面上可视化它们。所使用的示例数据是从AV Luque和JV Veenvliet (2023)派生的,采用CC-BY许可。有关如何从原始成像数据创建表面,请参阅creating_surfaces笔记本。
另请参阅
import napari
import matplotlib.pyplot as plt
from napari.utils import nbscreenshot
import numpy as np
import vedo
from napari_process_points_and_surfaces import add_curvature, Curvature, spherefitted_curvature
import napari_process_points_and_surfaces as nppas
import vedo
viewer = napari.Viewer(ndisplay=3)
viewer.camera.angles = (40, -30, 55)
surface = nppas.gastruloid()
The nppas gastruloid example is derived from AV Luque and JV Veenvliet (2023) which is licensed CC-BY (https://creativecommons.org/licenses/by/4.0/legalcode) and can be downloaded from here: https://zenodo.org/record/7603081
表面可视化#
表面本身并不包含任何量化信息。它看起来像这样:
surface
|
|
nppas.SurfaceTuple
|
量化#
我们可以像这样创建一个表格(pandas DataFrame)。
requested_measurements = [nppas.Quality.AREA,
nppas.Quality.ASPECT_RATIO,
nppas.Quality.GAUSS_CURVATURE,
nppas.Quality.MEAN_CURVATURE,
nppas.Quality.SPHERE_FITTED_CURVATURE_DECA_VOXEL,
nppas.Quality.SPHERE_FITTED_CURVATURE_HECTA_VOXEL,
nppas.Quality.SPHERE_FITTED_CURVATURE_KILO_VOXEL,
]
df = nppas.surface_quality_table(surface, requested_measurements)
df
| vertex_index | Quality.AREA | Quality.ASPECT_RATIO | Quality.GAUSS_CURVATURE | Quality.MEAN_CURVATURE | Quality.SPHERE_FITTED_CURVATURE_DECA_VOXEL | Quality.SPHERE_FITTED_CURVATURE_HECTA_VOXEL | Quality.SPHERE_FITTED_CURVATURE_KILO_VOXEL | |
|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 29.997389 | 1.600400 | 0.030287 | 0.000490 | 0.000691 | 0.000257 | 0.000019 |
| 1 | 1 | 46.087046 | 1.602183 | 0.011136 | 0.000018 | NaN | 0.000250 | 0.000019 |
| 2 | 2 | 35.886338 | 1.400599 | 0.012633 | 0.000142 | 0.000542 | 0.000253 | 0.000019 |
| 3 | 3 | 22.887296 | 1.751932 | 0.036979 | 0.000548 | 0.000339 | 0.000379 | 0.000019 |
| 4 | 4 | 29.952347 | 1.220882 | 0.010277 | 0.000047 | 0.000366 | 0.000391 | 0.000019 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 3319 | 3319 | 25.079661 | 1.340802 | 0.031878 | 0.000606 | 0.001081 | 0.000168 | 0.000019 |
| 3320 | 3320 | 47.213916 | 1.254924 | 0.004615 | 0.000003 | NaN | 0.000169 | 0.000019 |
| 3321 | 3321 | 35.964707 | 1.140267 | 0.015661 | 0.000198 | 0.000547 | 0.000163 | 0.000019 |
| 3322 | 3322 | 45.673529 | 1.189562 | 0.011380 | 0.000100 | 0.000026 | 0.000152 | 0.000019 |
| 3323 | 3323 | 30.105530 | 1.151230 | 0.014396 | 0.000190 | 0.000158 | 0.000163 | 0.000019 |
3324 rows × 8 columns
为了对测量结果有一个概览,我们可以对其进行汇总:
df.describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| vertex_index | 3324.0 | 1661.500000 | 959.700474 | 0.000000e+00 | 830.750000 | 1661.500000 | 2492.250000 | 3323.000000 |
| Quality.AREA | 3324.0 | 33.753233 | 10.790780 | 5.677486e+00 | 26.694735 | 32.956835 | 39.255080 | 125.564101 |
| Quality.ASPECT_RATIO | 3324.0 | 7.126810 | 89.909602 | 1.038034e+00 | 1.292444 | 1.437911 | 1.648299 | 3421.965459 |
| Quality.GAUSS_CURVATURE | 3324.0 | 0.016958 | 0.035275 | -1.031106e+00 | 0.005509 | 0.013645 | 0.024739 | 0.348243 |
| Quality.MEAN_CURVATURE | 3324.0 | 0.000383 | 0.007653 | -2.803460e-02 | -0.000135 | 0.000010 | 0.000270 | 0.426018 |
| Quality.SPHERE_FITTED_CURVATURE_DECA_VOXEL | 2750.0 | 0.002875 | 0.004761 | 1.791201e-09 | 0.000341 | 0.001004 | 0.003054 | 0.043508 |
| Quality.SPHERE_FITTED_CURVATURE_HECTA_VOXEL | 3324.0 | 0.000258 | 0.000069 | 1.516446e-04 | 0.000214 | 0.000241 | 0.000275 | 0.000545 |
| Quality.SPHERE_FITTED_CURVATURE_KILO_VOXEL | 3324.0 | 0.000019 | 0.000000 | 1.853513e-05 | 0.000019 | 0.000019 | 0.000019 | 0.000019 |
我们可以从表格中提取单个列作为列表。
curvature = list(df['Quality.SPHERE_FITTED_CURVATURE_HECTA_VOXEL'])
curvature[:5]
[0.0002572409502622459,
0.0002504286604301336,
0.00025319922419934937,
0.00037887302369609083,
0.00039058361737075804]
可视化测量结果#
为了可视化测量结果,我们需要将它们附加到表面上:
quantified_surface = nppas.set_vertex_values(surface, curvature)
quantified_surface
|
|
nppas.SurfaceTuple
|
可视化也可以进行自定义,例如通过改变视角和颜色映射。
nppas.show(quantified_surface, azimuth=-90, cmap='jet')
nppas.show(quantified_surface, azimuth=-90, cmap='hsv')