语义分割将分割图和原图合在一起

博客介绍了两种信息技术相关操作,一是使用matplotlib.pyplot,二是使用PIL Image里的blend函数,并都展示了效果图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 使用matplotlib.pyplot   

# 将分割图和原图合在一起
from PIL import Image
import matplotlib.pyplot as plt

#image1 原图 
#image2 分割图
image1 = Image.open("1.jpg")
image2 = Image.open("1.png")

plt.figure()

plt.subplot(221)
plt.imshow(image1)

plt.subplot(222)
plt.imshow(image2)

plt.subplot(223)
plt.imshow(image1)
plt.imshow(image2,alpha=0.5)

plt.show()

效果图: 

二 使用 PIL Image 里面的blend函数 

# 将分割图和原图合在一起
from PIL import Image
import matplotlib.pyplot as plt

#image1 原图 
#image2 分割图
image1 = Image.open("1.jpg")
image2 = Image.open("1.png")

image1 = image1.convert('RGBA')
image2 = image2.convert('RGBA')

#两幅图像进行合并时,按公式:blended_img = img1 * (1 – alpha) + img2* alpha 进行
image = Image.blend(image1,image2,0.3)
image.save("test.png")
image.show()

效果图:

### 实例分割头与语义分割头的区别 在深度学习计算机视觉领域,实例分割头与语义分割头是两种不同的网络结构设计,用于解决各自特定的任务需求。 #### 1. 定义上的区别 语义分割的目标是对输入像中的每个像素赋予一个类别标签,而不区分同一类别的不同对象。这意味着,在语义分割的结果中,所有的“猫”都会被标记为相同的颜色或标签,而不会进一步区分哪只猫属于哪个具体个体[^1]。 相比之下,实例分割不仅需要标注每个像素的类别,还需要区分出同属一类的不同对象。例如,如果片中有两只猫,则每只猫会被单独标记并区分开来[^2]。 #### 2. 输出形式的差异 - **语义分割头**通常输出的是一个二维矩阵,其中每个位置对应于原图的一个像素点,并携带该像素所属类别的信息。这种输出不涉及边界框或其他额外的信息。 - **实例分割头**则更复杂一些,除了提供像素级别的分类外,还会附加掩码(mask),这些掩码可以用来精确描绘各个独立目标的具体轮廓形状。此外,某些模型还可能结合边界框预测一起完成任务,比如 Mask R-CNN 中就采用了这样的方式[^3]。 #### 3. 技术实现层面 从技术角度来看,两者所采用的方法也有显著差别: - 对于**语义分割**而言,全卷积神经网络(FCNs)是一种非常经典的解决方案。通过一系列下采样操作提取特征后再利用上采样的手段恢复空间分辨率从而得到最终逐像素分类结果。 - 而对于**实例分割**, 则往往基于检测框架扩展而来, 如 Faster R-CNN 加入了专门负责生成高质量区域提议(region proposal) 的子模块;随后在此基础上再加入 mask prediction branch 来获得更加精细的对象级描述 。另外还有像 Panoptic Segmentation 这种融合了二者优点的新范式也被提出 . 以下是简单的代码示例展示如何定义这两种类型的头部: ```python import torch.nn as nn class SemanticSegmentationHead(nn.Module): def __init__(self, num_classes=20): super(SemanticSegmentationHead, self).__init__() self.conv = nn.Conv2d(in_channels=256, out_channels=num_classes, kernel_size=1) def forward(self, x): return self.conv(x) class InstanceSegmentationHead(nn.Module): def __init__(self, num_classes=20): super(InstanceSegmentationHead, self).__init__() self.mask_conv = nn.ConvTranspose2d(in_channels=256, out_channels=num_classes, kernel_size=2, stride=2) def forward(self, x): return self.mask_conv(x) ``` 上述代码片段分别展示了简化版的语义分割实例分割头的设计思路。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值