对wikipedia_dataset下面的images进行切割,然后生成对应的list列表。具体切割方法,见代码
load('H:\root\wz\category.mat')
load('H:\root\wz\imageList_wiki.mat');
fid=fopen('imgSegListAll.txt','w');
for i=1:length(trainImg)
im=imread(['H:\root\wz\images\' trainImg{i}]);
[m,n,d]=size(im);
part = [1,1,round(m/2),round(n/2);
1,round(n/4),round(m/2),round(n/4*3);
1,round(n/2),round(m/2),n;
round(m/4),1,round(m/4*3),round(n/2);
round(m/4),round(n/4),round(m/4*3),round(n/4*3);
round(m/4),round(n/2),round(m/4*3),n;
round(m/2),1,m,round(n/2);
round(m/2),round(n/4),m,round(n/4*3);
round(m/2),round(n/2),m,n];
for j=1:9
subim = im(part(j,1):part(j,3),part(j,2):part(j,4),:);
imwrite(subim, sprintf('H:\\root\\wz\\imageSegFix1\\%s_%d.jpg', trainImg{i}(1:end-4), j));
fprintf(fid, '%s_%d.jpg %d\n', trainImg{i}(1:end-4), j,trCat(i));
end
end
for i=1:length(testImg)
im=imread(['H:\root\wz\images\' testImg{i}]);
[m,n,d]=size(im);
part = [1,1,round(m/2),round(n/2);
1,round(n/4),round(m/2),round(n/4*3);
1,round(n/2),round(m/2),n;
round(m/4),1,round(m/4*3),round(n/2);
round(m/4),round(n/4),round(m/4*3),round(n/4*3);
round(m/4),round(n/2),round(m/4*3),n;
round(m/2),1,m,round(n/2);
round(m/2),round(n/4),m,round(n/4*3);
round(m/2),round(n/2),m,n];
for j=1:9
subim = im(part(j,1):part(j,3),part(j,2):part(j,4),:);
imwrite(subim, sprintf('H:\\root\\wz\\imageSegFix1\\%s_%d.jpg', testImg{i}(1:end-4), j));
fprintf(fid, '%s_%d.jpg %d\n', testImg{i}(1:end-4), j, teCat(i));
end
end
fclose(fid);
其主要思想就是找到所分割这九块区域左右顶点的坐标,进行分块。然后将所得目标图片写入对应文件夹,并将list写入imgSegListAll.txt文件。在此过程中,由于imageList_wiki.mat中的路径是windows格式,因此在linux中运行的时候,需要修改'\'为'/'。
之所以要对wiki的图片进行划分,是为了利用rnn构造图片序列,在后续会对图片提取特征,进行下一步训练。