import logging
from functools import lru_cache
import numpy
from PIL import Image
from pwem.emlib.image.image_handler import ImageReadersRegistry
from metadataviewer.dao.numpy_dao import NumpyDao
logger = logging.getLogger(__name__)
import metadataviewer
from metadataviewer.model.renderers import ImageReader
from pwem.viewers.mdviewer.star_dao import StarFile
from pwem.viewers.mdviewer.sqlite_dao import ScipionSetsDAO
[docs]class ScipionImageReader(ImageReader):
[docs] @classmethod
def getCompatibleFileTypes(cls) -> list:
return ImageReadersRegistry.getAvailableExtensions()
[docs] @classmethod
@lru_cache
def open(cls, path):
imgStack = ImageReadersRegistry.open(path)
# They return in this case the whole stack. Ask for the central slice
return cls._normalize(imgStack.getCentralImage())
@classmethod
def _normalize(cls, npImage):
iMax = npImage.max()
iMin = npImage.min()
im255 = ((npImage - iMin) / (iMax - iMin) * 255).astype(numpy.uint8)
return Image.fromarray(im255)
[docs]def extendMDViewer(om: metadataviewer.model.ObjectManager):
""" Function to extend the object manager with DAOs and readers"""
om.registerDAO(ScipionSetsDAO)
om.registerReader(ScipionImageReader)
NumpyDao.addCompatibleFileType('cs')
om.registerDAO(StarFile)