Отслеживание частиц с помощью trackpy выдает ошибку ‘keframe’?

#python #image #tracking #tiff #trackpy

#python #изображение #отслеживание #tiff #trackpy

Вопрос:

У меня есть стеки изображений tiff по 1000 кадров, в которых я пытаюсь отслеживать частицы, рассеивающиеся в броуновском движении. Итак, я использую trackpy для отслеживания частиц: импортируйте стек tiff, найдите объекты (частицы), а затем постройте их траектории. Я использую следующий код (как на странице пошагового руководства trackpy):

 import pims
import trackpy as tp 
frames = pims.open("image.tif")
f = tp.locate(frames[0], 9, invert=False)
  

Но эта последняя строка (tp.locate) дает обратную трассировку:

 AttributeError                            Traceback (most recent call last)
<ipython-input-78-0fbce96715a7> in <module>
----> 1 f = tp.locate(frames[0], 9, invert=False)

~anaconda3libsite-packagesslicerator__init__.py in __getitem__(self, i)
    186                 indices, new_length = key_to_indices(i, len(self))
    187                 if new_length is None:
--> 188                     return self._get(indices)
    189                 else:
    190                     return cls(self, indices, new_length, propagate_attrs)

~anaconda3libsite-packagespimsbase_frames.py in __getitem__(self, key)
     96         """__getitem__ is handled by Slicerator. In all pims readers, the data
     97         returning function is get_frame."""
---> 98         return self.get_frame(key)
     99 
    100     def __iter__(self):

~anaconda3libsite-packagespimstiff_stack.py in get_frame(self, j)
    119         t = self._tiff[j]
    120         data = t.asarray()
--> 121         return Frame(data, frame_no=j, metadata=self._read_metadata(t))
    122 
    123     def _read_metadata(self, tiff):

~anaconda3libsite-packagespimstiff_stack.py in _read_metadata(self, tiff)
    124         """Read metadata for current frame and return as dict"""
    125         # tags are only stored as a TiffTags object on the parent TiffPage now
--> 126         tags = tiff.keyframe.tags
    127         md = {}
    128         for name in ('ImageDescription', 'image_description'):

~anaconda3libsite-packagesskimageexternaltifffiletifffile.py in __getattr__(self, name)
   2752             setattr(self, name, value)
   2753             return value
-> 2754         raise AttributeError(name)
   2755 
   2756     def __str__(self):

AttributeError: keyframe
  

где я ошибаюсь?
Я также пытался использовать

 imageio.imread("image.tif")
  

чтобы импортировать изображение, а затем использовать

 f=tp.locate(frames[0], 9, invert=False)
  

чтобы найти частицы. Но предполагается, что результатом этого будут данные как для координат x, так и для координат y, например

введите описание изображения здесь

тогда как то, что я получаю, относится только к оси x:

введите описание изображения здесь

Ответ №1:

У меня только что была такая же проблема, и я решил ее, введя «conda install pims» в мое приглашение anaconda. Раньше я делал «pip install pims», и я думаю, что это все испортило.

Комментарии:

1. Спасибо, то, что я здесь делал неправильно, заключалось в импорте файла в виде стека tiff (например, видео). Это сработало, когда я сохранил стек в виде 1000 отдельных изображений в папке, а затем импортировал папку с помощью pims.open(«folder_path / *.tif)