-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
"Add activity to open TIFF series image swap name, #720"
- Loading branch information
Showing
2 changed files
with
20 additions
and
203 deletions.
There are no files selected for viewing
189 changes: 20 additions & 169 deletions
189
_includes/image_file_formats/open_em_tiff_series_bioio.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,183 +1,34 @@ | ||
# %% | ||
# Open a CZI image file | ||
# Open a TIFF series | ||
# minimal conda env for this module | ||
# conda create -n ImageFileFormats python=3.10 | ||
# activate ImageFileFormat | ||
# pip install bioio bioio-tifffile bioio-lif bioio-czi bioio-ome-tiff bioio-ome-zarr notebook | ||
# Note: for only dealing with .tif just do pip install bioio bioio-tifffile | ||
|
||
# TODO | ||
# - Change the below code to only open the CZI image | ||
# - Implement that it opens both images that are contained in the file (see ImageJ GUI activity) | ||
|
||
# %% | ||
# Load .tif file with minimal metadata | ||
# - Observe that BioImage chooses the correct reader plugin | ||
# - Observe that the return object is not the image matrix | ||
from bioio import BioImage | ||
image_url = 'https://github.com/NEUBIAS/training-resources/raw/master/image_data/xy_8bit__nuclei_PLK1_control.tif' | ||
bioimage = BioImage(image_url) | ||
print(bioimage) | ||
print(type(bioimage)) | ||
|
||
# %% | ||
# Print some onject attributes | ||
# - Observe that the object is 5 dimensional with most dimensions being empty | ||
# - Observe that the dimension order is always time, channel, z, y, x, (TCZYX) | ||
print(bioimage.dims) | ||
print(bioimage.shape) | ||
print(f'Dimension order is: {bioimage.dims.order}') | ||
print(type(bioimage.dims.order)) | ||
print(f'Size of X dimension is: {bioimage.dims.X}') | ||
# create list of image file names and order them | ||
from pathlib import Path | ||
path_to_files = Path('/Users/fschneider/Training/training-resources/image_data/xyz_8bit__em_volume_tiff_series') | ||
tiff_files = [file for file in path_to_files.glob("*.tif")] | ||
# order files | ||
tiff_files.sort() | ||
print(tiff_files) | ||
|
||
# %% | ||
# Extract image data | ||
# - Observe that the returned numpy.array is still 5 dimensional | ||
image_data = bioimage.data | ||
print(type(image_data)) | ||
print(image_data) | ||
print(image_data.shape) | ||
# Open each image with BioIO | ||
from bioio import BioImage | ||
bioimages = [BioImage(file) for file in tiff_files] | ||
|
||
# %% | ||
# Extract specific part of image data | ||
# - Observe that numpy.array is reduced to populated dimensions only | ||
yx_image_data = bioimage.get_image_data('YX') | ||
print(type(yx_image_data)) | ||
print(yx_image_data) | ||
print(yx_image_data.shape) | ||
# Print pixel sizes | ||
for bioimage in bioimages: | ||
print(bioimage.physical_pixel_sizes) | ||
|
||
# %% | ||
# Access pixel size | ||
# Concatenate in 3D volume | ||
em_volume = [bioimage.data.squeeze() for bioimage in bioimages] | ||
# make numpy array | ||
import numpy as np | ||
print(bioimage.physical_pixel_sizes) | ||
print(f'An pixel has a length of {np.round(bioimage.physical_pixel_sizes.X,2)} microns in X dimension.') | ||
|
||
# %% | ||
# Access general metadata | ||
print(type(bioimage.metadata)) | ||
print(bioimage.metadata) | ||
|
||
# %% | ||
# Load .tif file with extensive metadata | ||
image_url = "https://github.com/NEUBIAS/training-resources/raw/master/image_data/xy_16bit__collagen.md.tif" | ||
bioimage = BioImage(image_url) | ||
print(bioimage) | ||
print(type(bioimage)) | ||
|
||
# - Observe that the image is larger than the previous | ||
print(bioimage.dims) | ||
|
||
# %% | ||
# Access image and reduce to only populated dimensions | ||
yx_image_data = bioimage.data.squeeze() | ||
print(type(yx_image_data)) | ||
print(yx_image_data) | ||
print(yx_image_data.shape) | ||
|
||
# %% | ||
# Access pixel size | ||
print(bioimage.physical_pixel_sizes) | ||
print(f'An pixel has a length of {np.round(bioimage.physical_pixel_sizes.Y,2)} microns in Y dimension.') | ||
|
||
# Access general metadata | ||
# - Observe that metadata are more extensive than in the previous image | ||
print(type(bioimage.metadata)) | ||
print(bioimage.metadata) | ||
|
||
# %% | ||
# Load .lif file | ||
# - Observe that BioImage chooses the correct reader plugin | ||
# - Observe that the return object has 4 different channels | ||
# - Observe that the general metadata are an abstract element | ||
image_url = "https://github.com/NEUBIAS/training-resources/raw/master/image_data/xy_xyc__two_images.lif" | ||
bioimage = BioImage(image_url) | ||
print(bioimage) | ||
print(type(bioimage)) | ||
print(bioimage.dims) | ||
print(bioimage.metadata) | ||
print(type(bioimage.metadata)) | ||
|
||
# %% | ||
# Access channel information | ||
print(bioimage.channel_names) | ||
|
||
# %% | ||
# Access image data for all channels | ||
img_4channel = bioimage.data.squeeze() | ||
|
||
# Alternative | ||
img_4channel = bioimage.get_image_data('CYX') | ||
|
||
# - Observe that numpy.array shape is 3 dimensional representing channel,y,x | ||
print(img_4channel.shape) | ||
|
||
# Access only one channel | ||
img_1channel = bioimage.get_image_data('YX',C=0) | ||
|
||
# Alternative | ||
img_1channel = img_4channel[0] | ||
|
||
# - Observe that numpy.array shape is 2 dimensional representing y,x | ||
print(img_1channel.shape) | ||
|
||
# %% | ||
# Access different images in one image file (scenes) | ||
# - Observe that one image file can contain several scenes | ||
# - Observe that they can be different in various aspects | ||
print(bioimage.scenes) | ||
print(f'Current scene: {bioimage.current_scene}') | ||
|
||
# - Observe that the image in the current scene as 4 channel and Y/X dimensions have the size of 1024 | ||
print(bioimage.dims) | ||
print(bioimage.physical_pixel_sizes) | ||
|
||
# Switch to second scene | ||
# - Observe that the image in the other scene as only one channel and Y/X dimensions are half as large as the first scene | ||
# - Observe that the pixel sizes are doubled | ||
bioimage.set_scene(1) | ||
print(bioimage.dims) | ||
print(bioimage.physical_pixel_sizes) | ||
|
||
# %% | ||
# Load .czi file | ||
# file needs first to be downloaded from https://github.com/NEUBIAS/training-resources/raw/master/image_data/xyz__multiple_images.czi | ||
# save file in the same directory as this notebook | ||
# - Observe that BioImage chooses the correct reader plugin | ||
# - Observe that the return object has a z dimension | ||
bioimage = BioImage('/Users/fschneider/skimage-napari-tutorial/ExampleImages/xyz__multiple_images.czi') | ||
print(bioimage) | ||
print(type(bioimage)) | ||
|
||
# %% | ||
# little excersise in between | ||
# Access image dimensions | ||
print(bioimage.dims) | ||
|
||
# Access general metadata | ||
# - Observe that metadata are abstract | ||
print(bioimage.metadata) | ||
print(type(bioimage.metadata)) | ||
|
||
# Access pixel size | ||
print(bioimage.physical_pixel_sizes) | ||
|
||
# Access image data for all channels | ||
img_3d = bioimage.data.squeeze() | ||
|
||
# Alternative | ||
img_3d = bioimage.get_image_data('ZYX') | ||
|
||
# - Observe that numpy.array shape is 3 dimensional representing z,y,x | ||
print(img_3d.shape) | ||
|
||
# Access only one channel | ||
img_2d = bioimage.get_image_data('YX',Z=0) | ||
|
||
# Alternative | ||
img_2d = img_3d[0] | ||
|
||
# - Observe that numpy.array shape is 2 dimensional representing y,x | ||
print(img_2d.shape) | ||
|
||
# %% | ||
# little excercise: | ||
# paticipants should try to open one of their files with python | ||
em_volume = np.stack(em_volume,axis=0) | ||
print(em_volume.shape) |
This file was deleted.
Oops, something went wrong.