在进行深度学习时,可用于扩充图像库。
图像裁剪
matlab中的imcrop函数
I2=imcrop(I,[a b c d]);
对图像I进行裁剪,[a b c d]表示了一个区域,其中a是水平方向的坐标(从左往右),b是竖直方向上的坐标(从上到下),c是长,d是宽。
size():获取矩阵的行数和列数
1、s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素是矩阵的行数,第二个元素是矩阵的列数。
2、[r,c]=size(A),当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量c。
3、size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的是矩阵A的行数, c=size(A,2) 该语句返回的是矩阵A的列数。
代码:
clear all;
clc;
%取样图片函数
Files=dir('E:\图片\*.jpg');
N=length(Files);
Names={};
for k = 1:N
B=imread(strcat('E:\图片\',num2str(k),'.jpg'));
a=223;%裁剪宽度
b=223;%裁剪长度
c=5;%每张照片裁剪数量
%size(第一个行数,第二个列数)
X=size(B,1); %横向列数
Y=size(B,2); %纵向列数|
for j= 1:c
y=randperm(X-223,1);
x=randperm(Y-223,1);
% x=unidrnd(X-150,1,1);%宽的随机数()
% y=unidrnd(Y-150,1,1);%宽的随机数()
C=imcrop(B,[x y a b]);%利用裁剪函数裁剪图像,其中,(a,b)表示裁剪后左上角像素在原图像中的位置;c表示裁剪后图像的宽,d表示裁剪后图像的高
% 关于矩形区域[Xmin Ymin Width Height],Xmin是横向第Xmin个像素,Ymin是纵向第Ymin个像素;
% B = imresize(B,0.5,'bilinear');
A=k*1000+j;
imwrite(C,strcat('E:\图片1\',num2str(A),'.jpg'));% 保存帧
end
end
遇到的问题
1、图像库没裁剪完
原因:因为遇到了长度或宽度小于224的图像(就程序中使用的数值而言)。
解决方法:采用图像插值生产高分辨率图像。或者进行图像缩放。
在MATLAB中,interp2函数用于对图像进行插值处理。