【形态学检测】基于形态学处理的遥感图像的目标提取

1.软件版本

MATLAB2021a

2.本算法理论知识

[1]翟辉琴. 基于数学形态学的遥感影像面状目标提取研究[D]. 中国人民解放军信息工程大学, 2005.

3.部分源码

clc;
clear;
close all;
warning off;

%阈值参数
RGB = [100,20,20];%这个参数用来识别图片中红色的程度,如果红色都类似红色,不变


SL1 = 500;%去掉小面积,具体可以根据实际情况选择
SEL2= 0.2;%形态区域的长宽比例,如果狭长则删除,我这里设置长宽比例为0.4;
SL2 = 2500;%去掉小面积,具体可以根据实际情况选择
WD  = 31;%滤波窗口大小 
%%
I0     = imread('bmp\1.bmp');
R      = I0(:,:,1);
G      = I0(:,:,2);
B      = I0(:,:,3);

R      = medfilt2(R,[WD,WD]);
G      = medfilt2(G,[WD,WD]);
B      = medfilt2(B,[WD,WD]);
% I0(:,:,1) = R;
% I0(:,:,2) = G;
% I0(:,:,3) = B;

[Rr,Cc]= size(R);
areas  = zeros(Rr,Cc);

figure;
imshow(I0);
title('原始图像');

 
%%
%颜色检测
[x1,y1]= find(R>=RGB(1) & G<=RGB(2) & B<=RGB(3));
for i = 1:length(x1)
    if G(x1(i),y1(i)) <= 150 & B(x1(i),y1(i)) <= 50
       areas(x1(i),y1(i))=1; 
    end
end
figure;
imshow(areas,[]);
title('处理1:颜色检测');

%%
%形态学检测
areas  = imfill(areas);
areas2 = bwareaopen(areas,SL1);
figure;
imshow(areas2,[]);
title('处理2:形态学处理');




% se     = strel('disk',20);
% areas4 = imdilate(areas4,se);%图像A1被结构元素B膨胀 

%%
%形状检测
[L,n] = bwlabel(areas2);
areas3= zeros(size(areas2));
for i=1:n
    [r,c]=find(L==i);         %计算每个连通区域的坐标值

    a1(i)=max(r);
    a2(i)=min(r);%X坐标

    b1(i)=max(c);
    b2(i)=min(c);%y坐标

    w(i)=b1(i)-b2(i);%连通区域的行范围
    h(i)=a1(i)-a2(i);%连通区域的列范围

    %计算车的占用面积
    square(i) = w(i) * h(i);%计算每个连通区域的面积

    if sum(sum(areas2(a2(i):a1(i),b2(i):b1(i))))/(square(i)) >=0.3 & (w(i)/h(i)>SEL2 & w(i)/h(i)<1/SEL2)
       areas3(a2(i):a1(i),b2(i):b1(i)) = areas2(a2(i):a1(i),b2(i):b1(i));
     end
end
    

figure;
imshow(areas3,[]);
title('处理3:形状检测');


%颜色填充
areas4=imfill(areas3);
areas4 = bwareaopen(areas4,SL2);
figure;
imshow(areas4,[]);
title('处理4:形状检测');
...................................

4.仿真分析

5.参考文献

[1]翟辉琴. 基于数学形态学的遥感影像面状目标提取研究[D]. 中国人民解放军信息工程大学, 2005.A09-61

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/124675601