# 图像分割 | FCN数据集制作的全流程（图像标注）

## 一 全卷积神经网络

https://github.com/315386775/FCN_train

1.为自己的数据制作label；

2.将自己的数据分为train,val和test集；

3.仿照voc_lyaers.py编写自己的输入数据层。

（1）单张图片的resize

```# coding = utf-8
import Image

def  convert(width,height):
im = Image.open("C:\\xxx\\test.jpg")
out = im.resize((width, height),Image.ANTIALIAS)
out.save("C:\\xxx\\test.jpg")
if __name__ == '__main__':
convert(256,256)```

（2）resize整个文件夹里的图片

```# coding = utf-8
import Image
import os

def convert(dir,width,height):
file_list = os.listdir(dir)
print(file_list)
for filename in file_list:
path = ''
path = dir+filename
im = Image.open(path)
out = im.resize((256,256),Image.ANTIALIAS)
print "%s has been resized!"%filename
out.save(path)

if __name__ == '__main__':
dir = raw_input('please input the operate dir:')
convert(dir,256,256)```

(3)按比例resize

```# coding = utf-8
import Image

def  convert(width,height):
im = Image.open("C:\\workspace\\PythonLearn1\\test_1.jpg")
(x, y)= im.size
x_s = width
y_s = y * x_s / x
out = im.resize((x_s, y_s), Image.ANTIALIAS)
out.save("C:\\workspace\\PythonLearn1\\test_1_out.jpg")
if __name__ == '__main__':
convert(256,256)```

## 二 图像标签制作

```function cmap = labelcolormap(N)

if nargin==0
N=256
end
cmap = zeros(N,3);
for i=1:N
id = i-1; r=0;g=0;b=0;
for j=0:7
r = bitor(r, bitshift(bitget(id,1),7 - j));
g = bitor(g, bitshift(bitget(id,2),7 - j));
b = bitor(b, bitshift(bitget(id,3),7 - j));
id = bitshift(id,-3);
end
cmap(i,1)=r; cmap(i,2)=g; cmap(i,3)=b;
end
cmap = cmap / 255;```

```类别名称 R G B
background 0 0 0 背景
aeroplane 128 0 0 飞机
bicycle 0 128 0
bird 128 128 0
boat 0 0 128
bottle 128 0 128 瓶子
bus 0 128 128 大巴
car 128 128 128
cat 64 0 0 猫
chair 192 0 0
cow 64 128 0
diningtable 192 128 0 餐桌
dog 64 0 128
horse 192 0 128
motorbike 64 128 128
person 192 128 128
pottedplant 0 64 0 盆栽
sheep 128 64 0
sofa 0 192 0
train 128 192 0
tvmonitor 0 64 128 显示器```

```#!usr/bin/python
# -*- coding:utf-8 -*-
import PIL.Image
import numpy as np
from skimage import io,data,color
import matplotlib.pyplot as plt

img = PIL.Image.open('xxx.png')
img = np.array(img)
dst = color.label2rgb(img, bg_label=0, bg_color=(0, 0, 0))
io.imsave('xxx.png', dst)```

```DEFAULT_COLORS1 = ('maroon', 'lime', 'olive', 'navy', 'purple', 'teal',
'gray', 'fcncat', 'fcnchair', 'fcncow', 'fcndining',
'fcndog', 'fcnhorse', 'fcnmotor', 'fcnperson', 'fcnpotte',
'fcnsheep', 'fcnsofa', 'fcntrain', 'fcntv')```

```In [23]: img = PIL.Image.open('F:/DL/000001_json/test/dstfcn.png')
In [24]: np.unique(img)
Out[24]: array([0, 1, 2], dtype=uint8)```

```dirs=dir('F:/xxx/*.png');
for n=1:numel(dirs)
strname=strcat('F:/xxx/',dirs(n).name);
[x,map]=rgb2ind(img,256);
newname=strcat('F:/xxx/',dirs(n).name);
imwrite(x,map,newname,'png');
end```

## 四 测试图片结果上色

```from PIL import Image
import numpy as np
from datasets import CONFIG

# The arr is a predicted result

print 'The shape of the image is:', arr.shape
print 'The classes in the image are:', np.unique(arr)

# Define the palette
palette = []
for i in range(256):
palette.extend((i, i, i))

# define the color of the 21 classes(PASACAL VOC)
palette[:3*21] = CONFIG['voc12']['palette'].flatten()

assert len(palette) == 768

im = Image.fromarray(arr)
im.show()
im.putpalette(palette)
im.show()

im.save('out.png')```

67 篇文章39 人订阅

0 条评论

## 相关文章

3009

### 深入机器学习系列7-Random Forest

1 Bagging   采用自助采样法()采样数据。给定包含个样本的数据集，我们先随机取出一个样本放入采样集中，再把该样本放回初始数据集，使得下次采样时，样本仍...

4616

4749

### Tensorflow：基于LSTM轻松生成各种古诗

RNN不像传统的神经网络-它们的输出输出是固定的，而RNN允许我们输入输出向量序列。RNN是为了对序列数据进行建模而产生的。 样本序列性：样本间存在顺序关系，...

4476

### 用scikit-learn和pandas学习Ridge回归

本文将用一个例子来讲述怎么用scikit-learn和pandas来学习Ridge回归。

1232

### tensorflow笔记（四）之MNIST手写识别系列一

http://www.cnblogs.com/fydeblog/p/7436310.html

1131

34911

2868

3238

1532