CryoEM - 冷冻电镜聚类中心(2D Class)粒子图像的解析

2023-11-20 18:20

本文主要是介绍CryoEM - 冷冻电镜聚类中心(2D Class)粒子图像的解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://blog.csdn.net/caroline_wendy/article/details/126244406

冷冻电镜粒子图像聚类:

  1. Import Particles:读取原始的冷冻电镜粒子图像

  2. 2D Class:2D聚类,获取聚类中心的清晰粒子图像

image-20220807235834719

下载图像的 聚类中心(MRC文件) 和 标签信息(CS文件):

  • MRC:cryosparc_P1_J12_020_class_averages.mrc
  • CS:cryosparc_P1_J12_020_particles.cs

image-20220808142238715

加载MRC文件函数:

def mrc_loader(mrc_path):"""加载MRC文件"""mrc = mrcfile.open(mrc_path, permissive=True)data = mrc.dataarr = np.zeros(shape=data.shape, dtype=data.dtype)arr[:] = data[:]return arr

解析MRC文件:

def mrc_parser(mrc_path, out_dir, is_log=False):"""读取MRC文件,获取Particle图像的最小、最大值,归一化,存储于输出文件夹:param mrc_path: MRC文件:param out_dir: 输出文件夹:param is_log: 日志:return: None"""arr = mrc_loader(mrc_path)i_min, i_max = np.min(arr), np.max(arr)for i in tqdm(range(arr.shape[0]), desc="particles"):img = np.squeeze(arr[i, :, :])img = (img - i_min) / (i_max - i_min)img = np.clip(img * 255., 0, 255)img = img.astype(np.uint8)out_path = os.path.join(out_dir, "{}.png".format(i))cv2.imwrite(out_path, img)if is_log:print(f"[Info] arr: {arr.shape}, i_min: {i_min}, i_max: {i_max}")print(f"[Info] out_dir: {out_dir}")

样本:

01234
image-20220808003133191image-20220808003159115image-20220808003204626image-20220808003210275image-20220808003218445

安装PyEM包,用于处理CS文件:参考 Install pyem with Miniconda

conda activate cryosparc-master
conda install numpy scipy matplotlib seaborn numba pandas natsort
conda install -c conda-forge pyfftw healpy pathos   # 安装速度较慢git clone https://github.com/asarnow/pyem.git
cd pyem
pip install --no-dependencies -e .

使用PyEM:参考 Export from cryoSPARC v2

运行脚本:

cd workspace/pyem
conda activate cryosparc-masterpython csparc2star.py cryosparc_P1_J12_020_particles.cs cryosparc_P1_J12_020_particles.star --relion2

数据,与待处理的particle图像,同名文件:

  • _rlnAnglePsi #2 :面内旋转,PSI(ψ),Peptide torsion angles:肽扭转角
  • _rlnClassNumber #15 :类别,1~50
  • 样本从第20行开始,4个head行+15个label行
000001@J11/imported/017214887957000494328_000000855321499642015_stack_1293_cor2_DW_particles.mrc 83.571426 -0.450000 -5.250000 300.000000 10000.000000 1.082500 13015.895508 12950.861328 9.064259 2.700000 0.000000 0.100000 0.000000 29
000002@J11/imported/017214887957000494328_000000855321499642015_stack_1293_cor2_DW_particles.mrc 254.387726 -2.550000 1.050000 300.000000 10000.000000 1.082500 12611.307617 12546.273438 9.064259 2.700000 0.000000 0.100000 0.000000 15

测试,图像旋转效果:

  • 原始路径:datasets/cryoEM/kongfang/Data/extract
  • 替换路径:去掉索引017214887957000494328
Data/extract/000000855321499642015_stack_1293_cor2_DW_particles.mrc

28聚类中心角度差异较大:

image-20220808144537732

测试Case:

000005@J11/imported/017214887957000494328_000000855321499642015_stack_1293_cor2_DW_particles.mrc 247.040802 -2.850000 0.750000 300.000000 10000.000000 1.082500 13292.802734 13227.768555 9.064259 2.700000 0.000000 0.100000 0.000000 28
000020@J11/imported/004046678624515756479_000077449707304157065_stack_2096_cor2_DW_particles.mrc 70.714287 -0.150000 0.750000 300.000000 10000.000000 1.082500 17615.394531 17506.113281 -3.673789 2.700000 0.000000 0.100000 0.000000 28

路径变换:

Data/extract/000000855321499642015_stack_1293_cor2_DW_particles.mrc

图像:

rawlowpassrotated center
image-20220808155257093image-20220808155244360image-20220808161714604

旋转聚类中心图像的源码:

def rotate(img, angle, out_wh=None):"""旋转粒子粒子图像,填充背景像素:param img: 待旋转的图像:param angle: 旋转角度,来源于_rlnAnglePsi,顺时针旋转:param out_wh: 输出尺寸:return: 旋转之后的图像"""h, w = img.shape[:2]bkg_val = int(np.argmax(np.bincount(img.flatten())))  # 背景像素,用于填充# 旋转图像img, _ = rotate_img_with_bound(img, 360-angle, border_value=bkg_val)# 截取图像中心img = center_crop(img, h, w)if out_wh:img = cv2.resize(img, out_wh)return img

这篇关于CryoEM - 冷冻电镜聚类中心(2D Class)粒子图像的解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/396530

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实