Python大法好!一键批量处理荧光图像并进行3D可视化

学术   2024-05-09 09:50   日本  
3D Surface Plot 图绘制功能是荧光图像分析中的一个关键工具,它允许研究人员将荧光图像数据以三维形式可视化,从而更全面地理解样品的荧光强度分布和空间结构。
在之前的“用ImageJ的3D Surface Plot可视化荧光图像”推文中,小编为大家分享了在ImageJ软件中绘制3D Surface Plot的方法,通常来说,我们会有多张图像需要分析,且有些小伙伴可能没有安装ImageJ这款软件,那么可以使用Python非常快速的批量绘制3D Surface Plot
这里我们可以将所有需要分析的图像都放置在一个文件夹中,新建一个.py文件,将以下代码复制后保存
# 导入必要的库import osfrom PIL import Imageimport matplotlib.pyplot as pltfrom matplotlib.colors import ListedColormap, Normalizeimport numpy as npimport pandas as pdimport seaborn as snsfrom scipy.ndimage import gaussian_filter
def smooth_data(data, sigma=3): # 使用 Gaussian 滤波进行数据平滑处理 smoothed_data = gaussian_filter(data, sigma=sigma) return smoothed_data
# 设置全局字体plt.rcParams['font.family'] = 'Arial' # 请替换 ' Arial ' 为你希望使用的字体plt.rcParams['font.size'] = 10 # 设置字体大小
# 获取当前路径下的所有图像文件image_files = [file for file in os.listdir() if file.lower().endswith(('.png', '.jpg', '.jpeg', '.tif'))]
for image_file in image_files: # 读取图像 image_path = os.path.join(os.getcwd(), image_file) image = Image.open(image_path)
# 将图像转换为灰度图 gray_image = image.convert("L")
# 将灰度图转换为NumPy数组 data = np.array(gray_image)
# 对数据进行平滑处理 smoothed_data = smooth_data(data)
# 将平滑后的数据转换为长格式 df = pd.DataFrame(smoothed_data, columns=np.arange(data.shape[1])).stack().reset_index() df.columns = ["X", "Y", "Z"]
# 将旧的列名转换为数值 df['X'] = pd.Categorical(df['X']) df['X'] = df['X'].cat.codes
# 创建图形 fig = plt.figure() ax = fig.add_subplot(111, projection='3d')
#自定义颜色映射 colors = sns.color_palette("icefire", 256) # 请替换 ' icefire ' 为你希望使用的颜色映射 fire_cmap = ListedColormap(colors)
# 设置颜色映射范围为 0 到 100 norm = Normalize(vmin=0, vmax=100) surf = ax.plot_trisurf(df['Y'], df['X'], df['Z'], cmap=fire_cmap, norm=norm, linewidth=0.6)
# 将结果保存为图像文件 result_image_path = f"result_{os.path.splitext(image_file)[0]}.png" plt.savefig(result_image_path, bbox_inches='tight', dpi=300)
为了让大家更好的理解代码功能,下面小编对代码功能进行一下解释:
①平滑处理图像数据:通过使用 Gaussian 滤波器(gaussian_filter 函数)对图像进行平滑处理。平滑后的数据保存在 smoothed_data 中。
平滑数据是为了绘制的图像更加平滑,可根据需要调整代码中的“sigma”的数值。
②将平滑后的数据转换为 3D 表面图:利用 matplotlib 库的 plot_trisurf 函数,将平滑后的数据以三维表面图的形式呈现。
③自定义颜色映射和范围:通过 sns.color_palette 创建了一个自定义的颜色映射 fire_cmap,并使用 Normalize 类设置了颜色映射的范围。
如果需要修改颜色映射,可在下面的网站中找到所有的调色板,只需要更改代码中的"icefire"为需要的调色板即可。
https://www.practicalpythonfordatascience.com/ap_seaborn_palette

④设置图形属性:对图形进行了颜色映射范围属性的设置。我们需要根据自己图像的荧光强度设置颜色映射范围,通常需要修改代码中的“vmax” 值,大家可自己修改尝试设置合适的值。
⑤保存结果图像:最后,通过 plt.savefig 将生成的三维表面图保存为图像文件。输出文件名为原始图像文件名前缀加上 "_result",保存的图像就在当前的工作目录。
特别需要注意的是,为运行以上代码,需要安装几个Python库,其中:PIL(Python Imaging Library)用于图像处理,Matplotlib用于绘制图形,Seaborn是Matplotlib的扩展,提供更多的统计图表类型,NumPy用于处理数组和数学计算,SciPy包含了一些用于科学计算的工具。
可通过pip安装:
pip install pillow matplotlib seaborn numpy scipy
使用时,只需要将该Python文件与分析的图像放置在同一文件夹下,运行代码即可。下面是使用该代码绘制的图像,大家可与ImageJ绘制的图像进行比较。

如果您喜欢我们的文章,欢迎关注

更多科研干货点击👇,输入关键词搜索🔍

叮当学术
📚零零碎碎的科研学习记录~🔬科研本沉闷,但跑起来有风。
 最新文章