HE染色图像标准化对于非计算机专业的人来说有点麻烦,啥都不会连当个脚本小子都不会
找到了一个网友写的python代码基于
A. Vahadane, T. Peng, A. Sethi, S. Albarqouni, L. Wang, M. Baust, K. Steiger, A. M. Schlitter, I. Esposito, and N. Navab, “Structure-Preserving Color Normalization and Sparse Stain Separation for Histological Images,” IEEE Trans. Med. Imaging, vol. 35, no. 8, pp. 1962–1971, 2016.
这篇文章代码在GitHub
需要安装spams和cv2,opencv在conda中安装
conda install opencv
spams win安装
pip install spams-bin
照着给出的示例改了改,也不会什么写代码反正能凑合着用,增加了一个批处理
import numpy as np
import matplotlib.pyplot as plt
import spams
import cv2
import utils
import os
from vahadane import vahadane
from sklearn.manifold import TSNE
%load_ext autoreload
%autoreload 2
%matplotlib inline
# 定义批量处理的源文件夹和目标文件夹
source_folder = './data/spleen/'
target_path = './data/spleen/K85-1-4.tif'
result_folder = './output/' # 注意这里是结果文件夹而不是结果文件路径
# 获取源文件夹下的所有文件路径
source_files = os.listdir(source_folder)
# 遍历每个文件并进行处理
for file_name in source_files:
# 构造完整的源文件路径和目标文件路径
source_path = os.path.join(source_folder, file_name)
# 使用 os.path.splitext() 分离文件名和扩展名
file_name_without_extension, extension = os.path.splitext(file_name)
# 构建输出文件名,加上 "Spleen-" 前缀
result_file_name = "Spleen-" + file_name_without_extension + extension
output_path = os.path.join(result_folder, result_file_name) # 使用 output_path 保存当前文件的输出路径
# 读取源图像和目标图像
source_image = utils.read_image(source_path)
# 如果成功读取了图像
if source_image is not None:
target_image = utils.read_image(target_path)
vhd = vahadane(LAMBDA1=0.01, LAMBDA2=0.01, fast_mode=1, getH_mode=0, ITER=50)
Ws, Hs = vhd.stain_separate(source_image)
Wt, Ht = vhd.stain_separate(target_image)
img = vhd.SPCN(source_image, Ws, Hs, Wt, Ht)
cv2.imwrite(output_path, cv2.cvtColor(img, cv2.COLOR_RGB2BGR)) # 使用 output_path 作为结果文件的路径
else:
print("无法读取图像文件:", source_path)
注意目录和文件不要有英文,虽然原作者用的是.png格式不过不知道为啥我这里跑.png就报错
这东西麻烦是麻烦点,总比拍照片拍几天舒坦