对mask进行rle编码然后进行解码-详细注释
代码来自:
https://www.kaggle.com/artgor/segmentation-in-pytorch-using-convenient-tools
代码如下
import numpy as np# 进行mask存储,rle一种压缩存储方式
# 还有一种是polygon(多边形)# 这个函数是对mask进行rle编码,所以输入的值非0即1
import numpy as np# 进行mask存储,rle一种压缩存储方式
# 还有一种是polygon(多边形)# 这个函数是对mask进行rle编码,所以输入的值非0即1
def mask2rle(img):'''Convert mask to rle.img: numpy array, 1 - mask, 0 - backgroundReturns run length as string formated'''print("看下输入的img",img)pixels= img.T.flatten()#转置后看图像print("pixels进行flatten以后=",pixels)
# pixels进行flatten以后= [1 1 0 0 0 0 0 0 0 0 0 0 1 1]#14位pixels = np.concatenate([[0], pixels, [0]])print("pixels=",pixels)
# pixels = [0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0]#16位runs = np.where(pixels[1:] != pixels[:-1])[0] + 1print("runs=",runs)#这个记录的是bit值开始变化的位置,这里+1是为了位置的调整runs[1::2] -= runs[::2]#这句代码写得很抽象,其实是在进行编码.#运行前的结果是:# runs= [ 1 3 13 15] #runs中的每个数值都代表像素值发生变化的位置# 运行后的结果是:# runs= [ 1 2 13 2]# 意思是第1个位置算起,共有2个bit是相同的,所以用3-1得到# 意思是第13个位置算起,共有2个bit是相同的,所以用15-13得到。# 对应上面头部和末尾的两个11print("runs=",runs)return ' '.join(str(x) for x in runs)# 这个是用来解码train.csv中的Encoded Pixels的
def rle_decode(mask_rle: str = '', shape: tuple = (1400, 2100)):'''Decode rle encoded mask.:param mask_rle: run-length as string formatted (start length):param shape: (height, width) of array to return Returns numpy array, 1 - mask, 0 - background'''s = mask_rle.split()#这个运算前后没啥区别print("-----------------------------------------------------------")print("s[0:][::2]=",s[0:][::2])#这个获取的是变化的像素的位置序号的列表# ['1', '13']print("s[1:][::2]=",s[1:][::2])#这个获取的是相同像素的长度列表(分别记录每个变化的像素后面连续的同等像素值的连续长度)#['2', '2']starts, lengths = [np.asarray(x, dtype=int) for x in (s[0:][::2], s[1:][::2])]print("看下最初的starts=",starts)#变化的像素的位置序号的列表print("lengths=",lengths)starts -= 1ends = starts + lengthsprint("ends=",ends)img = np.zeros(shape[0] * shape[1], dtype=np.uint8)for lo, hi in zip(starts, ends):#进行恢复img[lo:hi] = 1return img.reshape(shape, order='F')if __name__ == '__main__':img=np.array([[1,0,0,0,0,0,1],[1,0,0,0,0,0,1]])print("输入的图像是",img)result=mask2rle(img)print("mask2rle的编码结果=",result)result=rle_decode("1 2 13 2", (2, 7))print("rle_decode的解码结果=",result)
上述mask2rle与rle_decode是互为可逆的。
rle编码的格式是:
格式是像素位置,长度(这了包含其实位置的像素的计数)
根据大佬的说法是,rle编码能节省内存。
对mask进行rle编码然后进行解码-详细注释相关推荐
- 语义分割rle编码与mask的转换
语义分割中,常用rle编码来节省标签的存储空间,但是在实际应用的时候还是需要将rle编码转换成mask来展示分割效果. rle编码是这样的:用一对pair值来表示值为1的mask的位置,比如(3,3) ...
- Segmentaion标签的三种表示:poly、mask、rle
Segmentaion标签的三种表示:poly.mask.rle 不同于图像分类这样比较简单直接的计算机视觉任务,图像分割任务(又分为语义分割.实例分割.全景分割)的标签形式稍为复杂.在分割任务中,我 ...
- <DataWhale>- 语义分割 - RLE编码
Task 01 语义分割-RLE编码 目录 思考 源码 自我理解RLE 关于源码中注释部分question的解释 思考 RLE是什么? 它是怎么运作的? 在mask.csv中图片后面的一系列数字具体表 ...
- WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码
转自:http://blog.csdn.net/nonmarking/article/details/47958395 本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine超详细教 ...
- python decode()函数 (使用登记用于编码的编解码器解码字节)
def decode(self, *args, **kwargs): # real signature unknown"""Decode the bytes using ...
- 关于支付接口回调地址参数字段是“notify_url”,签名过后的特殊字符url编码以后再解码后出现错误(¬ , ¢, ¤, £)
今天对接支付接口,参数拼接完了,开始调用的时候,一直报错,签名错误. 但是我用第三方给的签名测试mode测试签名,返回的是true. 这就非常他娘的奇怪. 经过一个个参数对比,我发现,notify_u ...
- des加密+base64编码,base64解码+des解密
des加密+base64编码,base64解码+des解密 des简单介绍 base64简单介绍 运行效果图 TestActivity.java DataEncryptionUtil.java des ...
- Base64的编码(Encode)与解码(Decode)
Base64的编码(Encode)与解码(Decode) 推荐第一种 效率更高. 第一种:java8 新版本 @Testpublic void test1(){//现在Base64编码 import ...
- 特殊字符url编码以后再解码后出现错误(not , cent, curren, pound)
仅仅是在显示的时候,编码传送的时候不会影响 今天遇到一个问题 需要Url编码的原内容是 "¬ify_url=xxxx" 经过url编码以后再解码回来 " ...
最新文章
- 五年引用量最高的10大论文:Adam第一,Transfromer上榜!竟然没有ResNet?
- linux type命令(用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令,如果给出的指令为外部指令,则显示其绝对路径)
- JAVA5000行代码什么概念_GitHub - catstiger/mvc: 一个不超过5000行代码的,快速,简单,易用的MVC框架。...
- oracle ||#039; where #039;||condition;,帝国cms后台添加字段提示#039;Row size too large. The maximum row size...
- 第一章 什么是数组名?
- scp 不输入密码登录
- 手机通话记录重复显示怎么处理_手机通话记录怎么找回
- python菜鸟教程python基础教程
- 软件测试-微信红包测试点
- 前后端开发接口文档模板(登录、注册、项目发布与需求发布)
- python文件写入方式_Python写入文件的方式
- 交易所交易规则和费用计算
- 初级面试常见sql练习
- Redis——Lettuce的主从哨兵模式
- 煤化工工控网络安全解决方案 第一部分
- 电脑运行应用程序出现0xc000007b的解决方法
- 建立里程碑,保证项目进度和质量
- SSM框架中 出现的406 (Not Acceptable)
- Paging内部原理
- zendstiduo背景色设置为保护眼睛的颜色》》》
热门文章
- SPOJ_SUBLEX
- 如何将一个数据库中的一个表复制到另一个数据库中去
- mysql 新增从数据库_从零开始学 MySQL - 创建数据库并插入数据
- 字数监控,价格监控等
- 会linux基本命令是脚本语言吗,如何理解Linux Shell和基本Shell脚本语言?
- 系统页面升级系统中_国产系统哪家强?华为EMUI系统大升级,拿下最强指日可待...
- 解决安卓模拟器没有网络的问题,刚开的做RN的我遇见这个问题真很头疼,所以希望看到我这篇文章能够解决。
- java面试的题积累【持续更新中......】
- windows下备份mysql 数据库
- 人脸检测的harr检测函数