您的位置:首页 > 编程语言 > Python开发

【python】还原二进制图像(可视化):mnist,cifar10,cifar100

2018-03-20 22:22 127 查看
Mnist
参考网址:
1)http://blog.csdn.net/u014046170/article/details/47445919
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image
import struct

def read_image(filename):
f = open(filename, 'rb')
index = 0
buf = f.read()
f.close()

magic, images, rows, columns = struct.unpack_from('>IIII' , buf , index)
index += struct.calcsize('>IIII')

# xrange has become range in python 3
for i in range(images):
# for i in xrange(2000):
# 创建一张空白的图片,其中的’L’代表这张图片是灰度图
image = Image.new('L', (columns, rows))
for x in range(rows):
for y in range(columns):
image.putpixel((y, x), int(struct.unpack_from('>B', buf, index)[0]))
index += struct.calcsize('>B')

print('save ' + str(i) + ' image')
image.save('test_data/' + str(i) + '.png')

def read_label(filename, saveFilename):
f = open(filename, 'rb')
index = 0
buf = f.read()

f.close()

magic, labels = struct.unpack_from('>II' , buf , index)
index += struct.calcsize('>II')

labelArr = [0] * labels
#labelArr = [0] * 2000

for x in range(labels):
#for x in xrange(2000):
labelArr[x] = int(struct.unpack_from('>B', buf, index)[0])
index += struct.calcsize('>B')

save = open(saveFilename, 'w')

save.write(','.join(map(lambda x: str(x), labelArr)))
save.write('\n')

save.close()
print('save labels success')

if __name__ == '__main__':
read_image('t10k-images.idx3-ubyte')
read_label('t10k-labels.idx1-ubyte', 'test_data/label.txt')





Cifar10
参考网址:
1)数据官网:http://www.cs.toronto.edu/~kriz/cifar.html
# -*- coding: utf-8 -*-

import pickle as p
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as plimg
from PIL import Image
import os

def load_CIFAR_batch(filename):
""" load single batch of cifar """
with open(filename, 'rb')as f:
datadict = p.load(f)
X = datadict['data']
Y = datadict['labels']
X = X.reshape(10000, 3, 32, 32)
Y = np.array(Y)
return X, Y

def load_CIFAR_Labels(filename):
with open(filename, 'rb') as f:
lines = [x for x in f.readlines()]
print(lines)

def get_class_name(lable_id):
if(lable_id=="0"):
class_name = "airplane"
elif(lable_id=="1"):
class_name = "automobile"

elif(lable_id=="2"):
class_name = "bird"

elif(lable_id=="3"):
class_name = "cat"

elif(lable_id=="4"):
class_name = "deer"

elif(lable_id=="5"):
class_name = "dog"

elif(lable_id=="6"):
class_name = "frog"

elif(lable_id=="7"):
class_name = "horse"

elif(lable_id=="8"):
class_name = "ship"

elif(lable_id=="9"):
class_name = "truck"

return class_name

def create_dir(dir_path):
if not os.path.exists(dir_path):
print("Create dir = {}".format(dir_path))
os.makedirs(dir_path)

train_img_num = 0
test_img_num = 0
def visualize_data(binary_img_path_list, folder_name):
global train_img_num
global test_img_num
for item in binary_img_path_list:
imgX, imgY = load_CIFAR_batch(item)
print("image [{}] saving...".format(item))
xx = 0
for i in xrange(imgX.shape[0]):
imgs = imgX[i - 1]
print("imgY = {}".format(imgY[i-1]))
img0, img1, img2 = imgs[0], imgs[1], imgs[2]
i0 = Image.fromarray(img0)
i1 = Image.fromarray(img1)
i2 = Image.fromarray(img2)
img = Image.merge("RGB",(i0,i1,i2))

if(folder_name == "train"):
name = folder_name + "_" + str(train_img_num) + ".png"
else:
name = folder_name + "_" + str(test_img_num) + ".png"

class_name = get_class_name(str(imgY[i-1]))
save_path = os.path.join(folder_name, class_name, name)
create_dir(os.path.join(folder_name, class_name))
img.save(save_path, "png")

train_img_num += 1
test_img_num += 1

# xx += 1
# if(xx>10):
# break

if __name__ == "__main__":
# load_CIFAR_Labels("./cifar-10-batches-py/batches.meta")

binary_img_path_list = []
binary_img_path_list.append("./cifar-10-batches-py/data_batch_1")
binary_img_path_list.append("./cifar-10-batches-py/data_batch_2")
binary_img_path_list.append("./cifar-10-batches-py/data_batch_3")
binary_img_path_list.append("./cifar-10-batches-py/data_batch_4")
binary_img_path_list.append("./cifar-10-batches-py/data_batch_5")

visualize_data(binary_img_path_list, "train")

test_binary_img_path_list = []
test_binary_img_path_list.append("./cifar-10-batches-py/test_batch")
visualize_data(test_binary_img_path_list, "validation")





Cifar100
参考网址:
1)数据官网:http://www.cs.toronto.edu/~kriz/cifar.html
2)http://blog.csdn.net/yj3254/article/details/52303800# -*- coding: utf-8 -*-

import pickle as p
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as plimg
from PIL import Image
import os

def load_CIFAR_batch(filename, folder_name):
""" load single batch of cifar """
with open(filename, 'rb')as f:
datadict = p.load(f)
"""
cifar100 data content:
{
"coarse_labels":[0,...,19], # 0~19 super category
"filenames":["volcano_s_000012.png",...],
"batch_label":"",
"fine_labels":[0,1...99] # 0~99 category
}
return list of numpy arrays [na,...,na] with specific batch_size
na: N dimensional numpy array
"""
# print(datadict.keys())
## ['data', 'batch_label', 'fine_labels', 'coarse_labels', 'filenames']

batch_label = datadict['batch_label']
fine_labels = datadict['fine_labels']
coarse_labels = datadict['coarse_labels']
batch_label = np.array(batch_label)
fine_labels = np.array(fine_labels)
coarse_labels = np.array(coarse_labels)

X = datadict['data']
# print(X.shape)
if(folder_name == "train"):
X = X.reshape(50000, 3, 32, 32)
elif(folder_name == "validation"):
X = X.reshape(10000, 3, 32, 32)

4000
return X, batch_label, fine_labels, coarse_labels

def unpickle(file):
import cPickle
fo = open(file, 'rb')
dict = cPickle.load(fo)
fo.close()
return dict

filename = "./cifar-100-python/meta"
dict_meta_batch = unpickle(filename)

def get_class_name(lable_id):

fine_label_names_list = dict_meta_batch['fine_label_names']
class_name = fine_label_names_list[lable_id]

return class_name

def create_dir(dir_path):
if not os.path.exists(dir_path):
print("Create dir = {}".format(dir_path))
os.makedirs(dir_path)

train_img_num = 0
test_img_num = 0
def visualize_data(binary_img_path_list, folder_name):
global train_img_num
global test_img_num
for item in binary_img_path_list:
# imgX, imgY = load_CIFAR_batch(item)
imgX, batch_label, fine_labels, coarse_labels = load_CIFAR_batch(item, folder_name)
print("image [{}] saving...".format(item))
xx = 0
for i in xrange(imgX.shape[0]):
imgs = imgX[i - 1]
# print("fine_labels = {}".format(fine_labels[i-1]))
img0, img1, img2 = imgs[0], imgs[1], imgs[2]
i0 = Image.fromarray(img0)
i1 = Image.fromarray(img1)
i2 = Image.fromarray(img2)
img = Image.merge("RGB",(i0,i1,i2))

class_name = get_class_name(fine_labels[i-1])
print("class_name = {}".format(class_name))

if(folder_name == "train"):
name = class_name + "_" + str(train_img_num) + ".png"
else:
name = class_name + "_" + str(test_img_num) + ".png"

save_path = os.path.join(folder_name, class_name, name)
create_dir(os.path.join(folder_name, class_name))
img.save(save_path, "png")

train_img_num += 1
test_img_num += 1

# xx += 1
# if(xx>10):
# break

if __name__ == "__main__":

binary_img_path_list = []
binary_img_path_list.append("./cifar-100-python/train")
visualize_data(binary_img_path_list, "train")

test_binary_img_path_list = []
test_binary_img_path_list.append("./cifar-100-python/test")
visualize_data(test_binary_img_path_list, "validation")



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息