工欲善其事,必先利其器
第二步,熟悉常用的python库
在完成第一步环境安装后,还无法直接上手做项目,因为如果这个时候你就开始写代码或读代码,简直步步难行。所以可以先熟悉一下常用的python库文件和其中常用的函数,不要求记下,只求有个印象,在用的时候能找到怎么用就行。
重中之重 openslide
因为病理切片用机器扫描出来以后都是几万乘几万的分辨率,使用OpenCV读图的话 会直接报错,因为cv读图会有大小限制,而且由于WSI独特的存储方式,cv也读取不了。所以使用openslide来读取WSI的属性和图像。
WSI的属性,一般包括制片时间、使用的机器、下采样的倍率、尺寸等。
WSI的图像,每一级的图像数据。
仔细看代码的注释,有我踩过的坑
# wsi的路径
src_wsi_path
# 实例化
slide = openslide.OpenSlide(src_wsi_path)
# 返回一个列表 下采样倍率,返回的下采样倍率 不是整数
slide.level_downsamples
>>>(1.0, 4.000062733092662, 16.00193771455457, 32.00677217584325)
# 返回一个列表 下采样尺寸
slide.level_dimensions
>>>((99726, 88409), (24931, 22102), (6232, 5525), (3116, 2762))
# 获取缩略图RGB,如果(w, h)不是slide存储的长宽比,则会以高为定值去计算一个新的宽,
# 返回一个(h, w_new, 3)大小的图片数据
slide.get_thumbnail((w, h))
# 获取指定级别、指定区域的图像数据,(x, y)和(w, h)必须是0级下的坐标
slide.read_region((x, y), level, (w, h))
# 对给定的下采样因子返回一个下采样级别的索引,对应下采样倍率和下采样尺寸 返回的列表。
# 只会向下取,比如想取下采32对应的索引,输入31.5 只会得到下采16的索引,
# 想要得到下采32的索引,就要输入大于等于32.00677217584325的数。
slide.get_best_level_for_downsample(float)
OpenCV库
OpenCV库是图像处理的一个必学的库,有时间可以在网上多看看他实现的各种功能,不局限与图像的传统处理手段,还有人脸识别、关键点检测,特征提取等。
在医学图像领域中的应用,主要是利用OpenCV对图像数据 进行预处理或后处理。
- 预处理是指在图像数据输入模型训练之前,先对图像进行一些列操作,比如分割筛选、归一化等操作。目的是给模型输入理想的数据,加速模型的收敛,提升模型的性能。比如我要分割某个器官的血管,我就可以先对颜色进行预处理,分割出大于红色阈值的部分。
- 后处理是指在模型推理出结果后,对结果的部分区域不满意,则可以用后处理调整。比如模型对血管分割的推理结果中有粘连现象,则可以通过形态学操作处理。
# 阈值函数
cv2.threshold()
# 自适应阈值函数
cv2.adaptiveThreshold()
# 形态学操作
# 得到一个结构元素(卷积核)
cv2.getStructuringElement()
# 腐蚀
cv2.erode()
# 膨胀
cv2.dilate()
# 形态学变化函数,可以完成开运算、闭运算、腐蚀、膨胀等操作
cv2.morphologyEx()
# 轮廓提取
cv2.findContours()
# 画轮廓
cv2.drawContours()
# 求 轮廓面积
cv2.contourArea()
# 求 点和轮廓的关系
cv2.pointPolygonTest()
# opencv位操作
# 将 图片 和 目标图片 里的像素值按位与
cv2.bitwise_and()
# 将 图片 里像素值按位反向
cv2.bitwise_not()
# 将 图片 和 目标图片 里的像素值按位异或
Cv2.bitwise_xor (),
numpy库
一种开源的高效的大型矩阵运算的库。
在医学图像领域中的应用,主要是利用numpy对图像数据 进行 矩阵计算。
只列了一些常用的,具体需要用到什么功能可以搜。
import numpy as np
np.array()
np.zeros()
np.zeros_like()
np.ones()
np.ones_like()
np.where()
np.floor()
np.around()
np.ceil()
np.percentile()
np.clip()
np.bitcount()