我是靠谱客的博主 悲凉蜡烛,最近开发中收集的这篇文章主要介绍TMA项目技术总结1. 读文件:保存文件:2. 在mask_he图的边界模版下,计算mask_ori图和mask_gen图的各种评测指标(accuracy,f1score,recall,precision)3. 把数字存到列表里面,好几列数据合并在一个列表里面,并保存成本地文件4. 读入图像,是array形式的,把array形式的矩阵转换成tensor颜色反卷积:高斯模糊:两张图像相交:图像增强 阈值分割:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 读文件:

读取单张图片 方法一:

mask_ori = cv2.imread('/Users/gongzhengze/Desktop/xxx/mask_ori.png')
tmp = np.array(mask_ori)[:, :, :3]
mask_ori = cv2.cvtColor(tmp, cv2.COLOR_RGB2GRAY) / 255

读一个黑白二值图,用cv2读进来的文件是三通道的,shape=(2048,2048,3),需要用上面的方法转成二值图,此时shape=(2048,2048),mask_ori.type: <class 'numpy.ndarray'>

读取单张图片 方法二:

img = plt.imread('/Users/gongzhengze/Desktop/xxx/mask_he.png')

这样读进来的图片 直接就是二值图,shape=(2048,2048), img.type: <class 'numpy.ndarray'>

读取单张图片 方法三:

from PIL import Image
img2 = Image.open('/Users/gongzhengze/Desktop/xxx/mask_he.png')
img2 = np.array(img2)

这样读进来的二值图,转换成array后,shape也是(2048,2048), img2.type: <class 'numpy.ndarray'>

读取整个文件夹下.png格式的图片:

import glob
import os
wsi_paths = glob.glob(os.path.join(MASK_HE_PATH, '*.png'))
for wsi_path in wsi_paths:
# obtain the wsi path
name = wsi_path.split('/')[-1]
pid = name[:-4]
# print(name)
print('pid:', pid)
list_of_pid.append(pid)
mask_he = cv2.imread(MASK_HE_PATH + str(pid) + '.png')
# print('mask_he.shape:',mask_he.shape)
# print('mask_he.type:',type(mask_he))

保存文件:

cv2.imwrite('/Users/gongzhengze/Downloads/aaa.png', img1_bg)

或者:

plt.imsave('/Users/gongzhengze/Downloads/aaa.png', bitwiseAnd * 255, cmap='gray')

2. 在mask_he图的边界模版下,计算mask_ori图和mask_gen图的各种评测指标(accuracy,f1score,recall,precision)

def Evaluation(mask_he, mask_ori, mask_gen):
TP = 0
FP = 0
FN = 0
TN = 0
for i in range(0, 2048):
for j in range(0, 2048):
if mask_he[i, j] != 0:
# count_he = count_he + 1
if mask_ori[i, j] == 1 and mask_gen[i, j] == 1:
TP = TP + 1
if mask_ori[i, j] == 0 and mask_gen[i, j] == 1:
FP = FP + 1
if mask_ori[i, j] == 1 and mask_gen[i, j] == 0:
FN = FN + 1
if mask_ori[i, j] == 0 and mask_gen[i, j] == 0:
TN = TN + 1
# accuracy: 正确分类的样本数与总样本数之比(预测为垃圾短信中真正的垃圾短信的比例)
# precision:判定为正例中真正正例数与判定为正例数之比(所有真的垃圾短信被分类求正确找出来的比例)
# recall:被正确判定为正例数与总正例数之比
# f1_score:准确率与召回率的调和平均f1_score
if TP != 0 or TN != 0 or FP != 0 or FN != 0:
accuracy = (TP + TN) / (TP + FP + FN + TN)
else:
accuracy = 0
if TP != 0 or FP != 0:
precision = TP / (TP + FP)
else:
precision = 0
if TP != 0 or FN != 0:
recall = TP / (TP + FN)
else:
recall = 0
if precision != 0 or recall != 0:
f1_score = 2 * precision * recall / (precision + recall)
else:
f1_score = 0
return accuracy, precision, recall, f1_score

3. 把数字存到列表里面,好几列数据合并在一个列表里面,并保存成本地文件

list_of_pid = []
list_of_accuracy = []
list_of_precision = []
list_of_recall = []
list_of_f1_score = []
list_of_pid.append(pid)
list_of_accuracy.append(accuracy)
list_of_precision.append(precision)
list_of_recall.append(recall)
list_of_f1_score.append(f1_score)
list_of_pid = pd.DataFrame(list_of_pid, index=None)
list_of_accuracy = pd.DataFrame(list_of_accuracy, index=None)
list_of_precision = pd.DataFrame(list_of_precision, index=None)
list_of_recall = pd.DataFrame(list_of_recall, index=None)
list_of_f1_score = pd.DataFrame(list_of_f1_score, index=None)
list_total = [list_of_pid, list_of_accuracy, list_of_precision, list_of_recall, list_of_f1_score]
list_total = pd.concat(list_total, axis=1, keys=['pid', 'accuracy', 'precision', 'recall', 'f1_score'])
list_total.to_csv('/Users/gongzhengze/Downloads/tmp/list_total.csv', encoding='gbk')

4. 读入图像,是array形式的,把array形式的矩阵转换成tensor

gen_mask = Image.open(gen_mask)
transf = transforms.ToTensor()
gen_mask = transf(gen_mask)
# tensor数据格式是torch(C,H,W)

6. IHC2mask.py 

颜色反卷积:

def sep_stain(img):
M = np.array([[1.88000259, -1.01536655, -0.55496979],
[-0.0735982, 1.13316777, -0.12641597],
[-0.59521871, -0.48168478, 1.57247275]])
im = np.reshape(-1 * np.log((img / 255.) + 1e-5), (-1, 3))
im = np.matmul(im, M)
# im = im.view(img.size())
ret = np.reshape(im, img.shape)
ret[ret >= 4] = 4 - 0.00001
ret[ret <= 0] = 0.00001
ret = 255 * ret / 4
return np.array(ret, dtype=np.uint8)

高斯模糊:

kernel_size = (3, 3)
sigma = 1.5
# 概括地讲,高斯矩阵的尺寸越大,标准差越大,处理过的图像模糊程度越大。
maskB_blur = cv2.GaussianBlur(maskB, kernel_size, sigma)
# print('maskB_blur:', maskB_blur.shape)

两张图像相交:

maskAB = cv2.bitwise_and(img_mask, maskB_blur)

图像增强 阈值分割:

maskC = cv2.threshold(maskAB, 1, 255, cv2.THRESH_BINARY)[1]

最后

以上就是悲凉蜡烛为你收集整理的TMA项目技术总结1. 读文件:保存文件:2. 在mask_he图的边界模版下,计算mask_ori图和mask_gen图的各种评测指标(accuracy,f1score,recall,precision)3. 把数字存到列表里面,好几列数据合并在一个列表里面,并保存成本地文件4. 读入图像,是array形式的,把array形式的矩阵转换成tensor颜色反卷积:高斯模糊:两张图像相交:图像增强 阈值分割:的全部内容,希望文章能够帮你解决TMA项目技术总结1. 读文件:保存文件:2. 在mask_he图的边界模版下,计算mask_ori图和mask_gen图的各种评测指标(accuracy,f1score,recall,precision)3. 把数字存到列表里面,好几列数据合并在一个列表里面,并保存成本地文件4. 读入图像,是array形式的,把array形式的矩阵转换成tensor颜色反卷积:高斯模糊:两张图像相交:图像增强 阈值分割:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部