这几天一直在帮一个学妹做毕业设计,用深度学习的方法来做遥感图像分类。原来准备将图像分为:林地、道路、裸地、建筑、草地、水域这6个部分,这6部分对应的颜色分别为:
1. 林地:红色 (255, 0, 0) 0xFF0000
2. 道路:黄色 (255, 255, 0) 0xFFFF00
3. 裸地:紫红 (255, 0, 255) 0xFF00FF
4. 建筑:青色 (0, 255, 255) 0x00FFFF
5. 草地:绿色 (0, 255, 0) 0x00FF00
6. 水域:蓝色 (0, 0, 255) 0x0000FF
由于感觉林地、裸地、草地难以区分。即使是强大的深度学习,在样本量不足的情况下,也难以学习到好的特征。于是,想写个脚本把林地、裸地与草地进行合并。
同时,由于使用的是AlexNet,训练图像为 224×224 大小的,于是我事先通过python
脚本工具将图像全都resize
到 224×224 大小。
之后,通过如下matlab
代码将图像中的林地、裸地与草地合并,方法很简单,就是如果图像是裸地的紫红 (255,255,0) 颜色,便将其转为 (255,0,0) 颜色,草地同理。
clear;
clc;
close all;
line = (1:224);
column = (1:224);
img = imread('/Users/chenxinpeng/Documents/MATLAB/superpixel-sowerby/groundtruth_png_resize224/Classification90.png');
R=img(:,:,1);
G=img(:,:,2);
B=img(:,:,3);
for i = line
for j = column
%将紫红色的(255,0,255)裸地转变为红色的(255,0,0)林地
if(R(i,j) == 255 && G(i,j) == 0 && B(i,j) == 255)
B(i,j) = 0;
end
%将绿色的(0,255,0)草地转变为红色的(255,0,0)林地
if(R(i,j) == 0 && G(i,j) == 255 && B(i,j) == 0)
R(i,j) = 255;
G(i,j) = 0;
end
end
end
img2(:,:,1) = R;
img2(:,:,2) = G;
img2(:,:,3) = B;
%img2.show()
imwrite(img2,'/Users/chenxinpeng/Documents/MATLAB/superpixel-sowerby/4class_groundtruth_png_resize224/Classification90.png')
但是我发现,经过这段代码,仍有部分不能转换到红色 (255,0,0) ,我十分纳闷,情况如下,第一张是原图片,第二张是转换后图片:
可以明显看到,原先紫红色裸地部分还有边缘区域没有转换为红色。
我将原来的图像放大:
可以发现,每种颜色的边缘区有混合像元,那么原因也找到了。就是我进行resize
操作的时候,原先纯色像元由于某种原因混合了。
怎么避免呢,这是我原先resize
操作的代码:
from PIL import Image
import matplotlib.pyplot as plt
import os
import glob
Height = 224 #Required Height for resize
Width = 224 #Required Width for resize
outdir = '/path/to/output/your/directory'
#/path/to/output/your/directory/for/read
imageList = sorted(glob.glob('/media/chenxp/Datadisk/labelsample/groundtruth_png/*.png'))
for item in imageList:
img = Image.open(item)
temp = os.path.basename(item)
img = img.resize((Height,Width),Image.ANTIALIAS)
img.save(os.path.join(outdir,temp))
我原先以为产生混合像元是无法避免的,于是都开始想其他办法了。
突然,我想到可resize
代码里的这么一句话:img = img.resize((Height,Width),Image.ANTIALIAS)
。从这个网站,我发现,Image.ANTIALIAS
这句话的意思是Image.ANTIALIAS参数表示新生成的图片消除锯齿,我将后面这个参数取消掉。发现既能够成功的resize
,也不会产生混合像元。
图中黄色的区域是道路,问题解决了。接下来就是训练对比结果了。