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