【影象分類】基於matlab極限學習分類器對遙感影象分類【含Matlab原始碼 150期】

語言: CN / TW / HK

一、原始碼

```c clear all;close all;clc;

%讀入影象 Image=imread('p_small.tif'); Image=Image(2:(size(Image,1)-1),2:(size(Image,2)-1),:); Ls_Image=Linear_stretch(Image,8);%線性灰度拉伸 Im=double(Image)/255; nums=size(Im,3);%波段數 %讀入樣本 snum=14;%樣本數 cli_list=1:14;%各樣本對應初分類別號 for i=1:snum eval(['sss{i}=double(imread(''s',num2str(i),'.tif''));']);%樣本檔名:si.bmp,i=1,2,3... if size(sss{i},1)<=2 || size(sss{i},1)<=2 error('第%d個樣本圖太小!',i); end s{i}=sss{i}(2:(size(sss{i},1)-1),2:(size(sss{i},2)-1),:); end %初分類別各引數計算 numcli=length(unique(cli_list));%初分類別數 %當類標不是連續自然數時,修改為從1開始的連續自然數編號 cli_sort=sort(unique(cli_list)); for i=1:numcli ff=find(cli_list==cli_sort(i)); clilist(ff)=i;%整理好的連續自然數類別表 end %ELM分類 sample_s=[]; label=[]; for i=1:snum for j1=1:size(s{i},1) for j2=1:size(s{i},2) temp_v=[]; for k=1:nums temp_v=[temp_v s{i}(j1,j2,k)]; end sample_s=[sample_s; temp_v]; label=[label; cli_list(i)]; end end end sample_s=double(sparse(sample_s))/255; x=sample_s; %重新編碼 la_temp=label; for i=1:ceil(log(snum)/log(2)) y(:,i)=mod(la_temp,2); la_temp=floor(la_temp/2); end y=sign(y-0.5); nump=size(y,1); ELM=ELM_train(y,x,300); %待分類原圖,資料變形 Cmap=zeros(size(Im,1),size(Im,2)); for i=1:size(Im,2) Pclass=ELM_classify(reshape(Im(:,i,:),size(Im,1),nums),ELM); for j=1:1:ceil(log(snum)/log(2)) la_temp=(sign(Pclass)+1)0.5; Cmap(:,i)=Cmap(:,i)+la_temp(:,j)2^(j-1); end end Cmap(find(Cmap>snum))=snum; Cmap(find(Cmap<1))=1; Image_cli=mat2gray(Cmap); %製作配色表 for i=1:numcli map(i,1)=i; map(i,2)=floor(abs(i-0.5numcli)2); map(i,3)=numcli-i+1; end map=map./max(max(map)); Image_cli_c=grayslice(Image_cli,numcli); %類別合併,以下內容在初次分類完成後,給定引數 %1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 clf_list=[1 1 2 2 2 2 3 3 4 5 5 5 6 6];%對初分類標進行合併,各類標對應的最終類標(連續自然數); numclf=length(unique(clf_list)); for i=1:size(Cmap,1) for j=1:size(Cmap,2) Im_clf(i,j)=clf_list(Cmap(i,j));%最終分類矩陣 end end fprintf('\n最終分類完成。'); Image_clf=mat2gray(Im_clf); for i=1:numclf mapf(i,1)=i; mapf(i,2)=floor(abs(i-0.5numclf)2); mapf(i,3)=numclf-i+1; end mapf=mapf./max(max(mapf)); Image_clf_c=grayslice(Image_clf,numclf); figure(); imshow(Image); title('待分類原始影象'); figure(); imshow(Ls_Image) title('待分類影象(線性拉伸)'); figure(); imshow(Image_cli_c,map); title('初次分類結果圖'); figure(); imshow(Image_clf_c,mapf); title('最終分類結果圖'); ill=ones(50,150); illu=ill; if(numclf>1) for i=2:numclf illu=[illu;ill*i]; end end figure(); imshow(illu,mapf); ylabel(' 6 5 4 3 2 1'); title('各類顏色圖例');

```

二、執行結果

在這裡插入圖片描述\ 在這裡插入圖片描述\ 在這裡插入圖片描述

三、備註

版本:2014a

「其他文章」