[英]How can pixel size be set for tiff images saved using python so that the pixel height and width are set to particular values in ImageJ?
[英]How to save ImageJ tiff metadata using Python
我正在嘗試使用tifffile保存tiff堆棧,並使用此解決方案添加ImageJ tiff元數據標記和值。
該代碼運行沒有錯誤,但是當我在ImageJ中打開“圖像信息”時,看不到我創建的新標簽。
我真的不知道Tiff標簽是如何工作的,所以我選擇了一個名為“名稱”的標簽,因為當我打開用ImageJ保存的元數據時,該標簽名稱存在。
我只更改了原始解決方案中的功能以支持我的標簽。 這是我正在使用的代碼:
def imagej_metadata_tags(metadata, byteorder):
"""Return IJMetadata and IJMetadataByteCounts tags from metadata dict.
The tags can be passed to the TiffWriter.save function as extratags.
"""
header = [{'>': b'IJIJ', '<': b'JIJI'}[byteorder]]
bytecounts = [0]
body = []
def writestring(data, byteorder):
return data.encode('utf-16' + {'>': 'be', '<': 'le'}[byteorder])
def writedoubles(data, byteorder):
return struct.pack(byteorder+('d' * len(data)), *data)
def writebytes(data, byteorder):
return data.tobytes()
metadata_types = [
('Name', b'Name', 1, writestring),
]
for key, mtype, count, func in metadata_types:
if key not in metadata:
continue
if byteorder == '<':
mtype = mtype[::-1]
values = metadata[key]
if count is None:
count = len(values)
else:
values = [values]
header.append(mtype + struct.pack(byteorder+'I', count))
for value in values:
data = func(value, byteorder)
body.append(data)
bytecounts.append(len(data))
body = b''.join(body)
header = b''.join(header)
data = header + body
bytecounts[0] = len(header)
bytecounts = struct.pack(byteorder+('I' * len(bytecounts)), *bytecounts)
return ((50839, 'B', len(data), data, True),
(50838, 'I', len(bytecounts)//4, bytecounts, True))
ijtags = imagej_metadata_tags({'Name': 'DPY'}, '>')
tif.imsave(some_path, frame, imagej=True, extratags=ijtags)
IJMetadata
標記只能包含特定於應用程序的信息。 請參見imagej_metadata_tag
函數的說明。 您可以指定metadata={'Name': 'A name'}
來將其他元數據保存在ImageDescription
標記中。 ImageJ可能會或可能不會使用此信息。 沒有記錄ImageJ使用的TIFF標簽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.