Применить адаптивный порог openCV-python к 3D TIFF
Я работаю с трехмерными томами, полученными с помощью конфокальной микроскопии. Эти изображения имеют размеры x,y,z около 1024,1024,50 и хранятся в файле.tif.
Я хочу применить OpenCV-Python cv2.adaptiveThreshold
на весь стек изображений. Приведенный ниже код хорошо работает для 2D-изображения (1024,1024,1). Как я могу расширить его на весь том и сохранить выходной файл.tif?
img = cv2.imread("1024x1024x40.tif")
gimg = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
th = cv2.adaptiveThreshold(gimg, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 7, -20)
cv2.imshow('original',img)
cv2.imshow('Adaptive threshold',th)
cv2.waitKey(0)
cv2.destroyAllWindows()
Спасибо!
1 ответ
Использование пакета биоформатов:
У меня нет тестовых данных, но используя этот ответ в качестве руководства, вы можете попробовать что-то вроде следующего:
import javabridge
import bioformats
javabridge.start_vm(class_path=bioformats.JARS)
path_to_data = '/path/to/data/file_name.tif'
xml_string = bioformats.get_omexml_metadata(path_to_data)
ome = bioformats.OMEXML(xml_string) # be sure everything is ascii
iome = ome.image(0) # e.g. first image
reader = bioformats.ImageReader(path_to_data)
raw_data = []
for z in range(iome.Pixels.get_SizeZ()):
img = reader.read(z=z, series=0, rescale=False)
gimg = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
th = cv2.adaptiveThreshold(gimg, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 7, -20)
img = cv2.bitwise_and(img, img, mask = th)
raw_data.append(img)
bioformats.write_image("/path/to/data/file_name_OUTPUT.tif", raw_data)