<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在機器視覺領域的深度學習中,每個資料集都有一份標註好的資料用於訓練神經網路。
為了節省空間,很多資料集的標註檔案使用RLE的格式。
但是神經網路的輸入一定是一張圖片,為此必須把RLE格式的檔案轉變為影象格式。
影象格式主要又分為 .jpg 和 .png 兩種格式,其中label資料一定不能使用 .jpg,因為它因為壓縮算演演算法的原因,會造成影象失真,影象各個畫素的值可能會發生變化。分割任務的資料集的 label 影象中每一個畫素都代表了該畫素點所屬的類別,所以這樣的失真是無法接受的。為此只能使用 .png 格式作為label,pascol voc 和 coco 資料集正是這樣做的。
PNG格式轉RLE格式
#!---- coding: utf- ---- import numpy as np
def rle_encode(binary_mask): ''' binary_mask: numpy array, 1 - mask, 0 - background Returns run length as string formated ''' pixels = binary_mask.flatten() pixels = np.concatenate([[0], pixels, [0]]) runs = np.where(pixels[1:] != pixels[:-1])[0] + 1 runs[1::2] -= runs[::2] return ' '.join(str(x) for x in runs)
RLE格式轉PNG格式
#!--*-- coding: utf- --*-- import numpy as np def rle_decode(mask_rle, shape): ''' mask_rle: run-length as string formated (start length) shape: (height,width) of array to return Returns numpy array, 1 - mask, 0 - background ''' s = mask_rle.split() starts, lengths = [np.asarray(x, dtype=int) for x in (s[0:][::2], s[1:][::2])] starts -= 1 ends = starts + lengths binary_mask = np.zeros(shape[0] * shape[1], dtype=np.uint8) for lo, hi in zip(starts, ends): binary_mask[lo:hi] = 1 return binary_mask.reshape(shape)
''' RLE: Run-Length Encode ''' from PIL import Image import numpy as np def __main__(): maskfile = '/path/to/test.png' mask = np.array(Image.open(maskfile)) binary_mask = mask.copy() binary_mask[binary_mask <= 127] = 0 binary_mask[binary_mask > 127] = 1 # encode rle_mask = rle_encode(binary_mask) # decode binary_mask_decode = self.rle_decode(rle_mask, binary_mask.shape[:2])
''' RLE: Run-Length Encode ''' #!--*-- coding: utf- --*-- import numpy as np from PIL import Image import matplotlib.pyplot as plt # M1: class general_rle(object): ''' ref.: https://www.kaggle.com/stainsby/fast-tested-rle ''' def __init__(self): pass def rle_encode(self, binary_mask): pixels = binary_mask.flatten() # We avoid issues with '1' at the start or end (at the corners of # the original image) by setting those pixels to '0' explicitly. # We do not expect these to be non-zero for an accurate mask, # so this should not harm the score. pixels[0] = 0 pixels[-1] = 0 runs = np.where(pixels[1:] != pixels[:-1])[0] + 2 runs[1::2] = runs[1::2] - runs[:-1:2] return runs def rle_to_string(self, runs): return ' '.join(str(x) for x in runs) def check(self): test_mask = np.asarray([[0, 0, 0, 0], [0, 0, 1, 1], [0, 0, 1, 1], [0, 0, 0, 0]]) assert rle_to_string(rle_encode(test_mask)) == '7 2 11 2' # M2: class binary_mask_rle(object): ''' ref.: https://www.kaggle.com/paulorzp/run-length-encode-and-decode ''' def __init__(self): pass def rle_encode(self, binary_mask): ''' binary_mask: numpy array, 1 - mask, 0 - background Returns run length as string formated ''' pixels = binary_mask.flatten() pixels = np.concatenate([[0], pixels, [0]]) runs = np.where(pixels[1:] != pixels[:-1])[0] + 1 runs[1::2] -= runs[::2] return ' '.join(str(x) for x in runs) def rle_decode(self, mask_rle, shape): ''' mask_rle: run-length as string formated (start length) shape: (height,width) of array to return Returns numpy array, 1 - mask, 0 - background ''' s = mask_rle.split() starts, lengths = [np.asarray(x, dtype=int) for x in (s[0:][::2], s[1:][::2])] starts -= 1 ends = starts + lengths binary_mask = np.zeros(shape[0] * shape[1], dtype=np.uint8) for lo, hi in zip(starts, ends): binary_mask[lo:hi] = 1 return binary_mask.reshape(shape) def check(self): maskfile = '/path/to/test.png' mask = np.array(Image.open(maskfile)) binary_mask = mask.copy() binary_mask[binary_mask <= 127] = 0 binary_mask[binary_mask > 127] = 1 # encode rle_mask = self.rle_encode(binary_mask) # decode binary_mask2 = self.rle_decode(rle_mask, binary_mask.shape[:2])
到此這篇關於Python實現RLE格式與PNG格式互轉的文章就介紹到這了,更多相關Python RLE轉PNG內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45