语义分割的标签在原图像上显示

最近在做医学图像的语义分割,新手一枚,现实情况是小朋友我真得有很多问号【手动捂脸哭】。经过一段时间的钻(tuo)研(fa),终于有了些许眉目,也有时间在这里记录一下自己的一些想法。这篇博客主要介绍一种将最终标签在原始图像上显示的思路,在此之前在网上查找了好多,换了几种思路【新手总是要尝试些弯路,手动狗头】,希望有帮到也正在为这个问题发难的你。废话不多说了,上干货。

原始图像记为pic,分割后得到的标签图像label_pic,这两部分往往是单独的两个图片,或是两个数组。为了使分割结果更直观我们往往需要将标签在原始图像上进行显示,并希望显示的标签为彩色(pic往往是灰度图),不建议在原始图像上做修改,原因略。下面介绍我用的方法:

1. 要解决的第一个问题:将label图像上的非标签区域进行透明化,同时把标签区域设置为橙色(随意选择)。将标签数组(由于某些设计的需要和方便起见,我这里的标签是数组格式)转换为RGBA格式图像,因为RGBA格式图像可以修改透明度

from PIL import Image
import numpy as np
def show_label(label):
    img = Image.fromarray(np.uint8(label))  #我这里的label是数组形式,所以要改为图像格式
    img =img.convert('RGBA')   #转换成'RGBA格式
    x, y = img.size
    for i in range(x):
        for j in range(y):
            color = img.getpixel((i, j))
            Mean = np.mean(list(color[:-1]))
            if Mean < 255:      					# 我的标签区域为白色,非标签区域为黑色
                color = color[:-1] + (0,)    	    # 若非标签区域则设置为透明
            else:
                color = (255, 97, 0, 255)           # 标签区域设置为橙色,前3位为RGB值,最后一位为透明度情况,255为完全不透明,0为完全透明 
            img.putpixel((i, j), color)
    return img

以上代码参考借鉴:https://blog.csdn.net/qq_35106907/article/details/103223434

2. 把pic和步骤1转换出来的img一起显示就OK啦。

import matplotlib.pyplot as plt
new_label = trans(label)
plt.imshow(x, cmap='gray')
plt.imshow(new_label)
plt.show()

先简单记录下吧,以后有时间再讲的详细些。

感觉只要是语义分割的标签在原始图像上显示都可以采用这个思路,希望有帮到其他新手ヾ(◍°∇°◍)ノ゙,感谢点赞支持呀!

你可能感兴趣的:(pytorch,神经网络,深度学习,tensorflow)