Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get ValueError: Unsupported axes YX when using OME-TIFF for nuclear segmentation #509

Closed
Calebium opened this issue Nov 5, 2022 · 4 comments · Fixed by #777 · May be fixed by #825
Closed

Get ValueError: Unsupported axes YX when using OME-TIFF for nuclear segmentation #509

Calebium opened this issue Nov 5, 2022 · 4 comments · Fixed by #777 · May be fixed by #825
Assignees
Labels
bug Something isn't working stale Old PRs/Issues which are inactive

Comments

@Calebium
Copy link

Calebium commented Nov 5, 2022

  • TIA Toolbox version: 1.3.0
  • Python version: 3.7
  • Operating System: Cent OS

Description

When I try to perform nuclear segmentation using an OME-TIFF file, I get the following error:

ValueError: Unsupported axes YX.

What I Did

wsi_output = objInstSegmentor.predict(
    ['TestSet_ROI_6291.ome.tiff'], 
    ioconfig=objIOConfig, 
    masks=None, 
    save_dir=f'WSITest/', 
    mode="wsi", 
    on_gpu=ON_GPU, 
    crash_on_exception=True, 
)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/local/55164614/ipykernel_10371/3581917802.py in <module>
     54     mode="wsi",
     55     on_gpu=ON_GPU,
---> 56     crash_on_exception=True,
     57 )

~/.conda/envs/single_cell/lib/python3.7/site-packages/tiatoolbox/models/engine/semantic_segmentor.py in predict(self, imgs, masks, mode, on_gpu, ioconfig, patch_input_shape, patch_output_shape, stride_shape, resolution, units, save_dir, crash_on_exception)
   1326         for wsi_idx, img_path in enumerate(imgs):
   1327             self._predict_wsi_handle_exception(
-> 1328                 imgs, wsi_idx, img_path, mode, ioconfig, save_dir, crash_on_exception
   1329             )
   1330 

~/.conda/envs/single_cell/lib/python3.7/site-packages/tiatoolbox/models/engine/semantic_segmentor.py in _predict_wsi_handle_exception(self, imgs, wsi_idx, img_path, mode, ioconfig, save_dir, crash_on_exception)
   1177             wsi_save_path = save_dir.joinpath(f"{wsi_idx}")
   1178             if crash_on_exception:
-> 1179                 raise err
   1180             logging.error("Crashed on %s", wsi_save_path)
   1181 

~/.conda/envs/single_cell/lib/python3.7/site-packages/tiatoolbox/models/engine/semantic_segmentor.py in _predict_wsi_handle_exception(self, imgs, wsi_idx, img_path, mode, ioconfig, save_dir, crash_on_exception)
   1153         try:
   1154             wsi_save_path = save_dir.joinpath(f"{wsi_idx}")
-> 1155             self._predict_one_wsi(wsi_idx, ioconfig, str(wsi_save_path), mode)
   1156 
   1157             # Do not use dict with file name as key, because it can be

~/.conda/envs/single_cell/lib/python3.7/site-packages/tiatoolbox/models/engine/nucleus_instance_segmentor.py in _predict_one_wsi(self, wsi_idx, ioconfig, save_path, mode)
    632         mask_path = None if self.masks is None else self.masks[wsi_idx]
    633         wsi_reader, mask_reader = self.get_reader(
--> 634             wsi_path, mask_path, mode, self.auto_generate_mask
    635         )
    636 

~/.conda/envs/single_cell/lib/python3.7/site-packages/tiatoolbox/models/engine/semantic_segmentor.py in get_reader(img_path, mask_path, mode, auto_get_mask)
    670         """Define how to get reader for mask and source image."""
    671         img_path = pathlib.Path(img_path)
--> 672         reader = WSIReader.open(img_path)
    673 
    674         mask_reader = None

~/.conda/envs/single_cell/lib/python3.7/site-packages/tiatoolbox/wsicore/wsireader.py in open(input_img, mpp, power)
    226 
    227         if suffixes[-2:] in ([".ome", ".tiff"],):
--> 228             return TIFFWSIReader(input_path, mpp=mpp, power=power)
    229 
    230         if last_suffix in (".tif", ".tiff") and is_tiled_tiff(input_path):

~/.conda/envs/single_cell/lib/python3.7/site-packages/tiatoolbox/wsicore/wsireader.py in __init__(self, input_img, mpp, power, series, cache_size)
   3055                 return np.prod(self._canonical_shape(page.shape)[:2])
   3056 
-> 3057             series_areas = [page_area(s.pages[0]) for s in all_series]  # skipcq
   3058             self.series_n = np.argmax(series_areas)
   3059         self._tiff_series = self.tiff.series[self.series_n]

~/.conda/envs/single_cell/lib/python3.7/site-packages/tiatoolbox/wsicore/wsireader.py in <listcomp>(.0)
   3055                 return np.prod(self._canonical_shape(page.shape)[:2])
   3056 
-> 3057             series_areas = [page_area(s.pages[0]) for s in all_series]  # skipcq
   3058             self.series_n = np.argmax(series_areas)
   3059         self._tiff_series = self.tiff.series[self.series_n]

~/.conda/envs/single_cell/lib/python3.7/site-packages/tiatoolbox/wsicore/wsireader.py in page_area(page)
   3053             def page_area(page: tifffile.TiffPage) -> float:
   3054                 """Calculate the area of a page."""
-> 3055                 return np.prod(self._canonical_shape(page.shape)[:2])
   3056 
   3057             series_areas = [page_area(s.pages[0]) for s in all_series]  # skipcq

~/.conda/envs/single_cell/lib/python3.7/site-packages/tiatoolbox/wsicore/wsireader.py in _canonical_shape(self, shape)
   3088         if self._axes == "SYX":
   3089             return np.roll(shape, -1)
-> 3090         raise ValueError(f"Unsupported axes `{self._axes}`.")
   3091 
   3092     def _parse_svs_metadata(self) -> dict:

ValueError: Unsupported axes `YX`.
@John-P
Copy link
Contributor

John-P commented Nov 11, 2022

Hi there, I just wanted to clarify what is happening here. Axes of YX indicates that this is a grayscale image. I am wondering whether this is the case or if it is a planar TIFF being interpreted incorrectly. Are you able to share a sample file?

@Calebium
Copy link
Author

Calebium commented Nov 24, 2022

Hi, I think I can send over a sample file. But I cannot attach it to github, what is the best way to do this?

Thanks,

Caleb

@rogertrullo
Copy link
Contributor

@John-P just chiming in here, I have seen several ome.tiff files where the tiff tag is YX, and they can be either rgb or even multichannel. For example if we use bioformats tools to convert svs files to ome.tiff bioformats2raw followed by raw2ometif this is the case.

@John-P John-P added the bug Something isn't working label Mar 10, 2023
@shaneahmed shaneahmed added the stale Old PRs/Issues which are inactive label Jun 2, 2023
@shaneahmed
Copy link
Member

Partially fixed in #777 and #825

This was linked to pull requests Jun 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working stale Old PRs/Issues which are inactive
Projects
None yet
4 participants