【图像分类】极限学习分类器之对遥感图像分类【Matlab 093期】

一、源代码

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.5*numcli)*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.5*numclf)*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('各类颜色图例');
 
 
    
        
        

二、运行结果

【图像分类】极限学习分类器之对遥感图像分类【Matlab 093期】_第1张图片
【图像分类】极限学习分类器之对遥感图像分类【Matlab 093期】_第2张图片
【图像分类】极限学习分类器之对遥感图像分类【Matlab 093期】_第3张图片

三、备注

完整代码或者代写添加QQ912100926
往期回顾>>>>>>
【图像压缩】图像处理教程系列之图像压缩【Matlab 074期】
【图像分割】图像处理教程系列之图像分割(一)【Matlab 075期】
【图像分割】图像处理教程系列之图像分割(二)【Matlab 076期】
【模式识别】银行卡号之识别【Matlab 077期】
【模式识别】指纹识别【Matlab 078期】
【图像处理】基于GUI界面之DWT+DCT+PBFO改进图像水印隐藏提取【Matlab 079期】
【图像融合】CBF算法之图像融合【Matlab 080期】
【图像去噪】自适应形态学之图像去噪【Matlab 081期】
【图像增强】DEHAZENET和HWD之水下去散射图像增强【Matlab 082期】
【图像增强】PSO寻优ACE之图像增强【Matlab 083期】
【图像重建】ASTRA算法之图像重建【Matlab 084期】
【图像分割】四叉树之图像分割【Matlab 085期】
【图像分割】心脏中心线之提取【Matlab 086期】
【图像识别】SVM植物叶子之疾病检测和分类【Matlab 087期】
【图像识别】基于GUI界面之模板匹配手写数字识别系统【Matlab 088期】
【图像识别】基于GUI界面之不变矩的数字验证码识别【Matlab 089期】
【图像识别】条形码识别系统【Matlab 090期】
【图像识别】基于GUI界面RGB和BP神经网络之人民币识别系统【Matlab 091期】
【图像识别】CNN卷积神经网络之验证码识别【Matlab 092期】

你可能感兴趣的:(matlab,图像处理)