1. 程式人生 > >深度學習遙感影像分類(1)_數據集批量準備

深度學習遙感影像分類(1)_數據集批量準備

func 文件夾 cnn images r+ 驗證 fop label read

近年來,深度學習在遙感影像地物分類中取得了一系列顯著的效果。CNN可以很好的獲取影像紋理信息,捕捉像素與像素之間的空間特征,因此,一個訓練好的深度學習模型在地物提取中具有很大的優勢。但模型的訓練卻是一個很繁瑣的任務,需要人工準備數據集,貼標簽,訓練模型等。本文將以sar影像為例實現冰水二分類的數據集批量準備工作(劃線取點截取小圖片保存):

1.原始sar遙感影像技術分享

2.預處理思路:

a.人工劃線:對應在冰和水上畫n條線(自己設置,註意自己需要針對類別所占比例控制線條數量和長度)

b.保存小圖片:獲取直線上點坐標,以每個像素點為中心取21×21的小圖片(類似mnist數據集,尺寸自己設置),保存至文件夾

c. 創建label:以保存的小圖片名稱+空格+類別(0或者1)將label保存至新創建的txt文檔中

3.代碼實現:

a.創建一個main函數調用drawTrainingSamples(img);CreateTrainSmallImages(img);drawValSamples(img);CreateValSmallImages(img);這四個函數,功能分別是和劃訓練集,創建訓練集,劃驗證集,創建驗證集

clear ;
clc;

img = imread(‘150905_multilook_4_s1a-ew-grd-hv-20150905t174712-20150905t174812-007583-00a7f0-002.tiff‘);
%準備訓練集數據
drawTrainingSamples(img);
CreateTrainSmallImages(img);

%準備驗證集數據
drawValSamples(img);
CreateValSmallImages(img);

b.drawTrainingSamples(img)

function [] = drawTrainingSamples(img)
n_ice=4;
n_water=4;
h_im=imshow(img);
bw_train_ice=zeros(size(img));
bw_train_water=zeros(size(img));
fprintf(‘please draw four lines on the picture for preparing the training sets of Ice‘);
for i = 1:n_ice
    h = imline;
    bw = createMask(h,h_im);
    bw_train_ice=bw_train_ice+bw;
end
figure,imshow(bw_train_ice);

 h_im=imshow(img);
 fprintf(‘please draw four lines on the picture for preparing the training sets of Water‘);
 for i = 1:n_water
    h = imline;
    bw = createMask(h,h_im);
    bw_train_water=bw_train_water+bw;
 end
figure,imshow(bw_train_water);

 save(‘bw_train_ice.mat‘,‘bw_train_ice‘);
 save(‘bw_train_water.mat‘,‘bw_train_water‘);

c.CreateTrainSmallImages(img)

function [] = CreateTrainSmallImages(img)

%創建小圖片
      load bw_train_ice;
      load bw_train_water;
       fprintf(‘Creating training small images...‘);
        [X,Y]=find(bw_train_ice==1);
        A=[X,Y];
        A;
        [a,b]=size(A);
        mkdir(‘train‘);
        
            for i=1:a
                    m=A(i,1);
                    n=A(i,2);
                    SmallImage=img(m-10:m+10,n-10:n+10);
                    imwrite(SmallImage,[‘train/‘,num2str(i),‘.jpg‘]);
                     
                    fid = fopen(‘train.txt‘, ‘a‘);  
                    t=[num2str(i),‘.jpg‘];
                    fprintf(fid, ‘%s %d \n‘, t,0);  
                    fclose(fid); 
            end
            
        [X,Y]=find(bw_train_water==1);
        B=[X,Y];
        B;
        [a,b]=size(B);
        
            for j=1:a
                    m=B(j,1);
                    n=B(j,2);
                    SmallImage=img(m-10:m+10,n-10:n+10);
		             j=i+j;
                    imwrite(SmallImage,[‘train/‘,num2str(j),‘.jpg‘]);
                     
                    fid = fopen(‘train.txt‘, ‘a‘);  
                    t=[num2str(j),‘.jpg‘];
                    fprintf(fid, ‘%s %d \n‘, t,1);  
                    fclose(fid); 
                     
            end
end

d.drawValSamples(img)

function [] = drawValSamples(img)
n_ice=4;
n_water=4;
h_im=imshow(img);
bw_val_ice=zeros(size(img));
bw_val_water=zeros(size(img));
fprintf(‘please draw four lines on the picture for preparing the validition sets of Ice‘);
for i = 1:n_ice
    h = imline;
    bw = createMask(h,h_im);
    bw_val_ice=bw_val_ice+bw;
end
figure,imshow(bw_val_ice);

 h_im=imshow(img);
 fprintf(‘please draw four lines on the picture for preparing the validition sets of Water‘);
 for i = 1:n_water
    h = imline;
    bw = createMask(h,h_im);
    bw_val_water=bw_val_water+bw;
 end
figure,imshow(bw_val_water);

 save(‘bw_val_ice.mat‘,‘bw_val_ice‘);
 save(‘bw_val_water.mat‘,‘bw_val_water‘);

e.CreateValSmallImages(img)

function [] = CreateValSmallImages(img)

%創建小圖片
      load bw_val_ice;
      load bw_val_water;

        [X,Y]=find(bw_val_ice==1);
        A=[X,Y];
        A;
        [a,b]=size(A);
        mkdir(‘val‘);
          fprintf(‘Creating validition sets small images...‘);
            for i=1:a
                    m=A(i,1);
                    n=A(i,2);
                    SmallImage=img(m-10:m+10,n-10:n+10);
                    imwrite(SmallImage,[‘val/‘,num2str(i),‘.jpg‘]);
                     
                    fid = fopen(‘val.txt‘, ‘a‘);  
                    t=[num2str(i),‘.jpg‘];
                    fprintf(fid, ‘%s %d \n‘, t,0);  
                    fclose(fid); 
            end
            
        [X,Y]=find(bw_val_water==1);
        B=[X,Y];
        B;
        [a,b]=size(B);
        
            for j=1:a
                    m=B(j,1);
                    n=B(j,2);
                    SmallImage=img(m-10:m+10,n-10:n+10);
		            j=i+j;
                    imwrite(SmallImage,[‘val/‘,num2str(j),‘.jpg‘]);
                     
                    fid = fopen(‘val.txt‘, ‘a‘);  
                    t=[num2str(j),‘.jpg‘];
                    fprintf(fid, ‘%s %d \n‘, t,1);  
                    fclose(fid); 
                     
            end
end

深度學習遙感影像分類(1)_數據集批量準備