工欲善其事,必先利其器

 第二步,熟悉常用的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()