matlab对图像进行区域分块----imgSegFix

对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构造图片序列,在后续会对图片提取特征,进行下一步训练。
 

你可能感兴趣的:(matlab)