融和原图和标签图,python实现可视化标签数据,检测标定分割数据的好坏
深度学习的重要环节是数据的采集,采集的数据到底能不能用,是否适合我们的应用场景,需要我们自己检查标定的数据,那么可视化标签数据显得尤为重要,下面是将分割数据映射到原图,判断数据好坏的python实现代码,希望能给大家启发,不足之处多多指教。
下面的代码是以Appllo Scapes数据集为例子,涉及32类。如要引用,请修改相应的路径和文件名,并结合自己数据文件夹的实际情况遍历转换。
import numpy as np
import cv2
import os
def _draw_to_overlay_image(labimgs, name, srcimgs):
num_examples = 2710 * 3384
labimg = cv2.imread(labimgs)
srcimg = cv2.imread(srcimgs)
srcimg = np.reshape(srcimg, [num_examples, 3]) //原图
labimg = np.reshape(labimg, [num_examples, 3]) //标签图
label_mage=np.zeros([num_examples, 3], np.uint8) //定义融合后的新图矩阵
colors=[[255,0,0],[0,255,0],[0,0,255],[139,0,0],[0,0,139],[139,0,139],[144,238,144],[0,139,139],[155,48,288],[255,62,150],[255,165,0],
[255,211,155],[255,193,37],[255,255,0],[192,255,62],[0,255,255],[153,50,204],[255,162,0],[50,205,50],[0,255,255],
[47,79,79],[119,136,153],[25,25,112],[123,104,238],[135,206,250],[0,100,0],[173,255,47],[188,143,143],[250,128,114],
[205,102,29],[205,51,51],[205,16,118]] //每一个类别对应一种颜色
lab_pix=[33,37,35,36,34,165,166,167,50,66,164,40,163,39,38,168,49,65,162,161,67,81,82,83,84,85,86,97,98,99,100,113]//每个类别对应的像素值
yuv_from_rgb = np.array([[0.299, 0.587, 0.114],
[-0.14714119, -0.28886916, 0.43601035],
[0.61497538, -0.51496512, -0.10001026]])//YUV和RGB空间转换的参数矩阵
rgb_from_yuv = np.linalg.inv(yuv_from_rgb)//求转置矩阵
for i in range(0,num_examples):
for a,b in enumerate(lab_pix):
if labimg[i][0] == b:
label_mage[i] = colors[a]//比对标签图中的像素值所属类别,然后下面进行颜色空间的转换
Y = srcimg[i].dot(yuv_from_rgb[0].T.copy())
U = label_mage[i].dot(yuv_from_rgb[1].T.copy())
V = label_mage[i].dot(yuv_from_rgb[2].T.copy())
rgb = np.array([Y, U, V]).dot(rgb_from_yuv.T.copy())
if rgb[0] > 255: rgb[0] = 255//超出像素值255的全部设置为255,下同
if rgb[1] > 255: rgb[1] = 255
if rgb[2] > 255: rgb[2] = 255
if rgb[0] < 0: rgb[0] = 0
if rgb[1] < 0: rgb[1] = 0
if rgb[2] < 0: rgb[2] = 0
label_mage[i] = rgb
rimg = np.reshape(label_mage, [2710, 3384, 3])
cv2.imwrite(name, rimg)
if __name__ == '__main__':
src_dir=os.walk('~/anaysis apollo/srcimg') //需要可视化数据的原图路径
i=1
for path,b,img_list in src_dir:
for srcimg in img_list:
if srcimg.endswith('jpg'):
labimg=path+'/'+srcimg.split('.')[0]+'_bin.png' //找到对应的标签图
if os.path.exists(labimg):
name = '~/anaysis apollo/mage/' + srcimg.split('.')[0] + '_mage.jpg'
srcimg= path + '/' + srcimg
_draw_to_overlay_image(labimg,name,srcimg)
print 'process %d' %i
i += 1
print 'finish!!!'
原图:
标签图:
融合后的图:
融合后的图片中每种颜色代表一个分割图,可以清晰地观察标定数据的好坏。