如何用Python为16位灰度TIFF图像应用*.cube格式LUT
Python实现16位灰度TIFF应用16位RGB Cube LUT
依赖安装
需要安装以下Python库处理图像和LUT:
pip install numpy tifffile pillow
解析Cube格式LUT
Cube格式的3D LUT包含头部定义(LUT_3D_SIZE指定三维网格尺寸)和逐行的RGB数值(通常为0-1范围的浮点数)。以下函数读取并转换为16位整数格式的三维数组:
import numpy as np def load_cube_lut(lut_path): with open(lut_path, 'r') as f: lines = [line.strip() for line in f if line.strip() and not line.startswith('#')] # 获取LUT三维尺寸 lut_size = None for line in lines: if line.startswith('LUT_3D_SIZE'): lut_size = int(line.split()[-1]) break if not lut_size: raise ValueError("Cube文件未包含LUT_3D_SIZE定义") # 提取并转换RGB数据为16位整数 rgb_data = [] for line in lines[lines.index(f'LUT_3D_SIZE {lut_size}')+1:]: r, g, b = map(float, line.split()) rgb_data.append([int(r * 65535), int(g * 65535), int(b * 65535)]) # 重塑为三维LUT数组:(size, size, size, 3) return np.array(rgb_data, dtype=np.uint16).reshape(lut_size, lut_size, lut_size, 3), lut_size
读取16位灰度TIFF
使用tifffile库可靠读取16位单通道灰度图像:
import tifffile def load_16bit_gray_tiff(tiff_path): img = tifffile.imread(tiff_path) if img.dtype != np.uint16 or len(img.shape) != 2: raise TypeError("输入必须是16位单通道灰度TIFF") return img
应用LUT到灰度图像
将灰度值映射为LUT的三维索引(灰度值同时作为R、G、B维度的输入),提取对应RGB值生成彩色图像:
def apply_lut_to_gray(img, lut, lut_size): # 归一化灰度值到0-1范围,计算LUT索引 norm_img = img / 65535.0 idx = (norm_img * (lut_size - 1)).astype(np.int32) # 利用广播机制提取对应RGB值 return lut[idx, idx, idx]
保存16位RGB TIFF
保存处理后的彩色图像为16位RGB格式:
def save_16bit_rgb_tiff(img, output_path): tifffile.imwrite(output_path, img, dtype=np.uint16)
完整执行代码
if __name__ == "__main__": # 替换为实际文件路径 LUT_PATH = "your_lut_file.cube" TIFF_PATH = "your_core_image.tif" OUTPUT_PATH = "processed_core_rgb.tif" lut, lut_size = load_cube_lut(LUT_PATH) gray_img = load_16bit_gray_tiff(TIFF_PATH) colored_img = apply_lut_to_gray(gray_img, lut, lut_size) save_16bit_rgb_tiff(colored_img, OUTPUT_PATH) print(f"处理完成,结果已保存至 {OUTPUT_PATH}")
关键注意事项
- 若Cube文件中的RGB值已为16位整数(而非0-1浮点数),需修改
load_cube_lut函数,直接读取整数无需乘以65535。 - 确保LUT为3D类型(即包含
LUT_3D_SIZE),1D LUT需调整索引逻辑。 - 全程使用
uint16数据类型,避免16位图像数据溢出或精度损失。
内容的提问来源于stack exchange,提问作者rach
相关产品推荐
相关产品推荐

