光学分辨率转换公式

在这里插入图片描述

一、光学分辨率

  • 光学分辨率:在显微镜拍摄图像时,光学分辨率参数的设置决定了图像的精度和细节。分辨率越高,能够分辨的细节就越多。
  • 光学分辨率转换:由于内存限制和不同的应用需求,实际操作中常常需要对图像的分辨率进行转换。例如,在图像配准时,通常使用各向同性图像(各方向上的分辨率相同),而显微镜下机得到的图像可能是各向异性的(不同方向上的分辨率不同)。这种转换能够保证在后续分析中的一致性和准确性。

二、放大倍率与光学分辨率

2.1、光学误差

在显微镜成像中,放大倍率和分辨率之间存在直接关系。

  • 理论上,分辨率与放大倍率成正比。这意味着随着放大倍率的增加,能够分辨的细节也应相应增加。
  • 但在实际操作中,由于成像系统和采集设备的光学特性,理论和现实之间往往会产生差异。这种差异在高倍率情况下尤其明显。
    • 例如:当像元尺寸固定时,理论放大倍率设定为4倍,但实际测量结果可能仅为3.95倍。这表明,尽管硬件条件未发生问题,但光学因素(如镜头的衍射效应、成像质量等)会影响实际分辨率,导致实际成像效果低于理论预期。

已知:使用光学显微镜得到原始图像,然后使用后处理得到下采样图像,然后开始图像配准。

放大倍率					XZY光学分辨率(μm)			图像内存
------------------------------------------------------------
原始图像					1.625	1.625	3			261.12GB
4x(XYZ均下采样四倍)	6.5		6.5		12		  	4.08GB
8x(XYZ均下采样八倍)	13		13		24		  	0.51GB

############################################################
使用8x图像完成图像配准:
	使用[13, 13, 24]配准失败;
	使用[15, 15, 24]配准成功; 为什么是15?实验值
############################################################

2.2、由于光学误差,图像配准需要调参

在这里插入图片描述

在这里插入图片描述

三、光学分辨率转换

3.1、计算公式

输入图像的像素分辨率 X Y Z = [ 6.5 , 6.5 , 12 ] 输出图像的像素分辨率 X Y Z = [ 3.25 , 6.5 , 24 ] = 输出图像的图像分辨率 X Y Z = [ 548 , 431 , 2182 ] 输入图像的图像分辨率 X Y Z = [ 1096 , 431 , 1091 ] \frac{\text{输入图像的像素分辨率} XYZ=[6.5,6.5,12]}{\text{输出图像的像素分辨率} XYZ=[3.25,6.5,24]} = \frac{\text{输出图像的图像分辨率} XYZ=[548,431,2182]}{\text{输入图像的图像分辨率} XYZ=[1096,431, 1091]} 输出图像的像素分辨率XYZ=[3.256.524]输入图像的像素分辨率XYZ=[6.56.512]=输入图像的图像分辨率XYZ=[10964311091]输出图像的图像分辨率XYZ=[5484312182]
备注:像素分辨率越小,图像分辨率越大。

3.2、代码复现

在这里插入图片描述

import tifffile
from skimage import transform


def resolution_conversion(image, resolution, resolution_target):
    """将三维图像的光学分辨率从原始分辨率转换为目标分辨率。
    参数:
            image:               numpy 数组, 输入的三维图像。
            resolution:          列表 [Z, Y, X], 图像的原始光学分辨率 (单位:微米)。
            resolution_target:   列表 [Z, Y, X], 图像的目标光学分辨率 (单位:微米)。
    返回:
            target_image:        numpy 数组, 调整分辨率后的三维图像。
    """
    # (1)计算 Z、Y、X 方向的缩放比例
    scale_Z = resolution_target[0] / resolution[0]
    scale_Y = resolution_target[1] / resolution[1]
    scale_X = resolution_target[2] / resolution[2]

    # (2)根据缩放比例计算目标图像的形状
    image_shape_Z_target = int(resolution[0] / resolution_target[0] * image.shape[0])
    image_shape_Y_target = int(resolution[1] / resolution_target[1] * image.shape[1])
    image_shape_X_target = int(resolution[2] / resolution_target[2] * image.shape[2])
    target_size = (image_shape_Z_target, image_shape_Y_target, image_shape_X_target)
    print(f"转换比例:{
      
      [scale_X, scale_Y, scale_Z]}, 原图形状: {
      
      image.shape}, 目标形状: {
      
      target_size}")

    # (3)插值与缩放
    target_image = transform.resize(image, target_size, mode='constant', cval=0, order=0)

    return target_image


if __name__ == "__main__":
    # (1)读取图像
    image = tifffile.imread(r"F:/py/image.tif")

    # (2)图像的光学分辨率转换 ———— 根据放大倍率的不同:4倍200GB图像,[10, 10, 10]大约1GB,[20, 20, 20]大约100MB
    resolutionZYX = [6.5, 6.5, 12]  # 原始图像的光学分辨率ZYX,单位:微米(um)
    converted_image = resolution_conversion(image, resolutionZYX, resolution_target=[20, 20, 20])

    # (3)保存图像
    target_image_path = "converted_image.tif"
    tifffile.imwrite(target_image_path, converted_image)

    # (4)可视化图像
    # import napari
    # viewer = napari.Viewer()
    # viewer.add_image(image, name='image')
    # viewer.add_image(converted_image, name='converted_image')
    # viewer.grid.enabled = not viewer.grid.enabled  # 切换到网格模式
    # napari.run()
"""
转换比例:[1.6666666666666667, 3.076923076923077, 3.076923076923077]
原图形状: (1084, 754, 1198)
目标形状: (352, 245, 718)
"""

猜你喜欢

转载自blog.csdn.net/shinuone/article/details/143222371