Calculate Segment Sizes¶
This example loads an Annotation from a URL and calculates the sizes of the segments it contains:
import numpy as np
import webknossos as wk
ANNOTATION_URL = "https://webknossos.org/annotations/622b130a010000220122ebd1"
def main() -> None:
    annotation = wk.Annotation.download(ANNOTATION_URL)
    stats_per_id = {}
    with annotation.temporary_volume_layer_copy() as seg_layer:
        voxel_size = (
            np.array(annotation.voxel_size) * seg_layer.get_finest_mag().mag.to_np()
        )
        seg_data = np.stack(
            [view.read() for view in seg_layer.get_finest_mag().get_views_on_disk()]
        )
        uniques, counts = np.unique(seg_data, return_counts=True)
        for _id, count in zip(uniques, counts):
            if _id == 0:
                continue
            voxel_size_in_nm3 = voxel_size[0] * voxel_size[1] * voxel_size[2]
            volume = count * voxel_size_in_nm3
            stats_per_id[_id] = (count, volume)
    for _id, (count, volume) in stats_per_id.items():
        print(f"ID={_id} Voxel Count={count} Volume={volume}nm³")
if __name__ == "__main__":
    main()
- Get Help
- Community Forums
- Email Support