网络上的数据集和验证集每一类都有超过1000的数据量,但是由于手工截图的效率较低,以及房屋矢量影像不够精确,本次学习和验证的最终数据量太小,容易造成训练时的过拟合。过拟合是指为了得到一致假设而使假设变得过度严格,也就是说当前学习后的模型,只适用于当前的数据,换一套建筑物遥感影像就无法识别。因此为了解决过拟合,从数据的角度需要对当前数据进行增强。常用的数据增强方法有:对颜色的数据增强、尺度变换、水平/垂直翻转、旋转/仿射变换以及类别不平衡数据的增广等。
本次实验主要对于单幅影像截取的数据集进行使用了颜色增强、旋转、翻转。
开始阶段主要针对基于phyon进行图像增强技术,发现对于phyon使用过程中缺少opencv库,无法进行相关图像处理,在安装pip,numpy等后,仍无法进行图像处理的设置。转换技术主要通过matlab进行图像处理。
1.图像读取
imread是读取图像的函数。pout.tif是matlab内置的图像,不管在什么程序内都可以直接读取。
> I = imread(‘F:\deep_learn\data\test_tiff\build05.png’);% 读取彩色图
> figure(1); imshow(I) title(‘build05’); %I=rgb2gray(RGB); %imshow(I);
> %title(‘原始灰度图像’);
注:对于图片格式具有要求,在个人测试发现.jpeg,.tiff格式的文件无法读取。
2.图像锐化处理
在图像锐化增强中,我们希望找到一种各向同性的边缘检测算子,这个算子就是拉普拉斯算子,该算子及其对f(x,y)的作用是
由一维信号的锐化公式可得到二维数字图像的锐化公式为
(1)
在数字图像处理中, 和
可用差分方程表示为
(2)
(3)
将式(2)和式(3)代入式(1),可得图像的拉普拉斯锐化表示为
式中,α为锐化强度系数(一般取为正整数),α越大,锐化的程度就越强,对应于图中的“过冲”就越大。
代码:
> a=1;
> model=[0 -2*a 0;-2*a 1+4*a -2*a;0 -2*a 0];
> [m,n]=size(I);
> Ig=I;
> for i=2:m-1
> for j=2:n-1
> Ig(i,j)=(1+4*a).*I(i,j)-a.*(I(i+1,j)+I(i-1,j)+I(i,j+1)+I(i,j-1));
> %Ig(i,j)=sum(sum(Ig));
> end
> end
> %Ig=Ig+I;
> %subplot(132);
> %imshow(uint8(Ig));
> %title('锐化后的图像');
>
> Ig2=double(I); %将f转换归一化的double类图像,然后进行滤波
> w=fspecial('laplacian',0);
> g1=imfilter(I,w,'replicate');
> g=I-g1;
> %subplot(133);
> imshow(g);
> title('matlab自带函数锐化');
3.图像存储
imwrite(g,'F:\\deep_learn\\data\\test_tiff\\build05_sharpen.jpg');
同样,imwrite也有相对路径和绝对路径的存储,以及连续的存储方法。同imread
imwrite(I,’pout1.jpg’);
imwrite(I,’image\pout1.jpg’);
imwrite(I,’D:\Matlab\image\pout1.jpg’);
imwrite(I,[’image\’,num2str(i),’.jpg’]);%i是变量,需要定义
这里的.jpg可以改成.bmp等,想要的格式。
需要注明的是,存储所选择的文件夹,需要已经建立好。那么怎么去自动建立文件夹呢?
需要用mkdir函数。
mkdir(‘D:\image\1’)%绝对路径的建立。
mkdir(‘image\1’);%绝对路径文件夹的建立。创建之后,在Matlab文件夹内。
这样就能够节省很多的人力。当文件比较多的情况下,人工去建立的话,还容易出错。