多颜色绘制语义分割/变化检测结果图

news2024/11/15 11:18:31

在论文绘图时,传统的二元语义分割结果图颜色单一(下图左),所以论文中常根据混淆矩阵类别使用多颜色进行绘制(下图右),可以看到,结果的可视化效果更好。

     

以下是绘制代码:

import os
import cv2
import argparse
import numpy as np
from tqdm import tqdm

def intersection_color(binary_result, ground_truth):
   
    if len(binary_result.shape) != 2 or len(ground_truth.shape) != 2:
        raise ValueError(
            f"The dim numbers of binary_result and ground_truth must be 2!"
        )
    # 将255的值转换为1
    binary_result = np.where(binary_result > 128, 1, 0)
    ground_truth = np.where(ground_truth > 128, 1, 0)
   
    # 创建RGB图像,根据TP、FP和FN的位置使用不同的颜色
    rgb_image = np.zeros(
        (binary_result.shape[0], binary_result.shape[1], 3), dtype=np.uint8
    )

    # True Positives (TP) - 白色
    rgb_image[(binary_result == 1) & (ground_truth == 1)] = [255, 255, 255]

    # False Positives (FP) - 红色
    rgb_image[(binary_result == 1) & (ground_truth == 0), 2] = 255

    # False Negatives (FN) - 绿色
    rgb_image[(binary_result == 0) & (ground_truth == 1), 1] = 255


    # rgb_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2BGR)
    return rgb_image

def visual_label(args):
    pred_list = os.listdir(args.pred_root)
    gt_list = os.listdir(args.gt_root)
    if len(pred_list)!= len(gt_list):
        raise ValueError(
            f"The number of predicted result is not equal to that of ground truth!"
        )
        
    if not os.path.exists(args.out_root):
        os.makedirs(args.out_root)
        
    for file_name in tqdm(pred_list):
        pred_file = os.path.join(args.pred_root, file_name)
        gt_file = os.path.join(args.gt_root, file_name)
        pred = cv2.imread(pred_file, cv2.IMREAD_GRAYSCALE)
        gt = cv2.imread(gt_file, cv2.IMREAD_GRAYSCALE)
        rgb_label = intersection_color(pred, gt)
        out_path = os.path.join(args.out_root, file_name)
        cv2.imwrite(out_path, rgb_label)
        
def parse_args():
    parser = argparse.ArgumentParser(
        description='Open-CD test (and eval) a model')
    parser.add_argument('--pred_root', help='predict results path')
    parser.add_argument('--gt_root', help='gt path')
    parser.add_argument(
        '--out_root',
        help=('if specified, the evaluation metric results will be dumped'
              'into the directory as json'))
    args = parser.parse_args()
    return args


def main():
    args = parse_args()
    visual_label(args)
    
if __name__ == "__main__":
    main()

欢迎关注大地主的Github仓库(ABCnutter (PengChen) (github.com)),谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2161479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同等学力申硕英语网课如何选择

很多考生想知道同等学力申硕英语网课如何选择,小编告诉大家,首先明确自己的学习目标和需求是为了提高口语、阅读、写作还是听力能力? 只有明确了自己的学习目标和需求,才能更好地选择适合自己的课程和平台。 二、选择知名品牌和口碑良好的平…

UE5地图白屏/过曝/非常亮の解决方法

今天遇到一个问题 , 新建项目 , 打开虚幻第三人称地图的默认关卡 , 发现白屏 , 啥也看不见 猜测可能是虚幻编辑器的bug , 造成白屏的原因应该是场景过曝了 记录一下解决方案 第一种解决方法 找到场景中的 后期处理体积 (PostProcessVolume) 直接删掉 或者找到 细节面板中 -…

衍射的角谱理论

一、单色平面波与本征函数 不考虑夫琅禾费近似, 则相干光场在给定二平面间的传播过程就是通过一个二维线性空不变系统。 上式函数是这个系统的本征函数,表示振幅为1的平面波在xy平面上的复振幅分布,空间频率分量 = cos / , = cos / 与平面波的传播方向相联系, 空间…

java和mysql命名规则不一样,每次在mybatis中起别名太麻烦?来看看如何设置自动自动映射!

简介: 在 Java 开发中,当使用 MyBatis 框架连接 Java 代码与 MySQL 数据库时,常常会遇到 Java 和 MySQL 命名规则不一致的问题,这使得每次在 MyBatis 中为查询结果起别名变得繁琐。本教程将深入探讨如何设置自动映射,以…

java节假日工具类,判断一个日期是否是法定节假日

java节假日工具类,判断一个日期是否是法定节假日 1.HolidayUtil工具类2.工具类生成的日期json文件3.结果展示 无需链接数据库,无需手写节假日集合列表 1.HolidayUtil工具类 import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.data…

DataGemma:谷歌大模型

诸神缄默不语-个人CSDN博文目录 DataGemma是谷歌出的大模型,是gemma 2的升级版,主要亮点是基于检索解决幻觉问题。 在huggingface和kaggle上均可下载模型权重。 检索数据源是Google’s Data Commons知识图谱。 官方博客:https://blog.googl…

Centos redis下载安装以及redis manager连接详细教程

一、redis下载以安装: 1.切换到home目录下 cd /home(/是根目录,./是当前目录 ../是父目录) 2.执行wget http://download.redis.io/releases/redis-5.0.2.tar.gz(这里,不知道为什么安装6开头的版本在make的…

定制智慧科技展厅方案:哪些细节是成功的秘诀?

随着数字科技浪潮的迅猛推进,智慧科技展厅跃升为科技成果展示与技术对话的前沿阵地。其策划与实施方案因而显得尤为关键。在此过程中,精雕细琢每一环节,确保创意与技术的无缝对接,成为不可或缺的要点。现在,让我们深入…

CS创世8GB SD NAND的低功耗特性

在电子设备不断追求低功耗的今天,CS创世半导体的8GB SD NAND芯片以其低功耗特性脱颖而出。这款芯片的读写电流仅为15mA,相较于同类产品,其功耗显著降低,这不仅延长了设备的使用时间,还减少了对电池的依赖。这种低功耗特…

HDMI20协议解析_Audio_Sample

HDMI20协议解析_Audio_Sample 1.版本说明 日期作者版本说明202409XX风释雪初始版本 2.概述 当通过HDMI传输音频信号时,Audio_Sample是必须要传输的数据包之一; 通过前端硬件或软件收到PCM原始音频数据后,需要通过Audio_Sample packet发送给…

跟着B战学习JAVA面试八股文

学习链接:https://www.bilibili.com/video/BV1gm411S7EX/?spm_id_from333.337.search-card.all.click&vd_sourceefbaa07876b231ae3225ba8999116807 创建线程的几种方式? 继承Thread类实现Runnable接口实现Callable接口通过线程池来创建线程 为什么…

fiddler抓包09_过滤站点请求

课程大纲 1、 界面 Fiddler列表默认显示所有请求,可以设置过滤,按照规则只显示指定的请求。 界面介绍: “Use Filters”:过滤功能开关。勾选,开启过滤;反之不开启。 “Hosts”:根据站点&#xf…

免费ppt模板哪里找?职场必备这些利器

一眨眼,9月份的尾声渐近,无论是学生还是职场人士,都开始准备着新一轮的演讲和报告。在这个忙碌的时期,一份精美的PPT模板能够大幅提升你的工作效率,让你的演示更加引人入胜。 不用担心高昂的版权费用,市场…

LPDDR4芯片学习(一)——基础知识与引脚定义

一、基础知识 01 dram基本存储单元 当需要将一位数据存储到DRAM中时,晶体管会充电或放电电容。充电的电容表示逻辑高(1),放电的电容表示逻辑低(0)。由于电容会随着时间泄漏电荷,因此需要定期刷…

接口测试Postman关联,断言,前置,参数化用法

一、Postman下载 我们直接搜索Postman官网下载即可 Postman API Platformhttps://www.postman.com/ 二、使用 下载安装完成后我们需要登录注册,按照Postman的指示进行注册登录,不登陆可能有些功能无法使用 登陆完成我们就可以开始对接口进行测试了 …

用于体积医学图像分割的跨视角差异依赖网络|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割

Title 题目 Cross-view discrepancy-dependency network for volumetric medical image segmentation 用于体积医学图像分割的跨视角差异依赖网络 01 文献速递介绍 医学图像分割的目标是通过为每个像素分配语义类别,从原始图像中描绘出受试者的解剖结构&#x…

Python项目的质量保证

首先来打个不恰当比喻,你在市场上购买苹果时,挑选最好的苹果相当简单。你可以通过触摸它们来挑选,选择最好的颜色、成熟度和没有可见的伤疤。这个过程称为质量控制——你只选择满足你要求的优质产品。当分拣站里有大量苹果时,事情…

利用F.interpolate()函数进行插值操作

函数简介 功能: 利用插值方法,对输入的张量数组进行上\下采样操作,换句话说就是科学合理地改变数组的尺寸大小,尽量保持数据完整。 torch.nn.functional.interpolate(input, sizeNone, scale_factorNone, modenearest, align_c…

Node.JS有什么用?给谁用?怎么学?通俗易懂,超级详细!

现在,nodejs主要是前端的小伙伴来用的。前端小伙伴也不用说去怎么学node,而是把node当做是一个环境。我们利用这个环境去搭建上层的一些应用,去使用一些工具。就像学习Windows一样,我们没有必要深入了解Windows的每一个细节&#…

【解密!】终端安全管理软件究竟是什么?一文给您揭晓答案!

在数字化时代,随着企业信息化程度的不断提升,网络安全问题日益凸显。 终端作为网络连接的最后一环,其安全性直接关系到整个网络体系的安全与稳定。 那么,终端安全管理软件究竟是什么呢?本文将为您深入解析这一重要话…