[已解决] MATLAB 图像分割

[复制链接]
沉迷学习4645 发表于 2022-5-8 11:52:06
基于RGB图像的图像分割(无边缘检测),这个是什么图像分割手段啊,求各位大佬指点。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

最佳答案


gywxd 发表于 2022-5-8 18:04:43
看这结构还不是按颜色提取,是按连通区域选择的, 膨胀腐蚀 也就是预处理,避免一些图象粘连。  这方法还是比较好的,大体上交通标识 都有  外围一圈封闭 颜色, 这样 进行轮廓和填充后 就会得到一个连通区域,  根据区域大小,区域 长宽比  基本可以过滤其他干扰例如  树干  长宽比太大,     不过这种做法也是不靠谱的, 如果地上有个大小相似的有色气球  就 无法区分了
还应该  加一个连通区域轮廓获取  对该连通区域里面 颜色值分布做一个检验, 如果连通区域颜色总数高于多少,低于多少 排除。 一般这类标识 就2 到3  个颜色 这样能更好的过滤。

3 条回复


gywxd 发表于 2022-5-8 16:32:51
估计是按红色进行颜色提取,然后获取红色图象像素的范围,得到红色出现的 xy 范围并以此作为切割依据进行切割

沉迷学习4645 发表于 2022-5-8 17:02:32
gywxd 发表于 2022-5-8 16:32
估计是按红色进行颜色提取,然后获取红色图象像素的范围,得到红色出现的 xy 范围并以此作为切割依据进行切 ...

就是它在分割的时候先进行了腐蚀膨胀运算,然后就直接进行分割了,代码如下:
d = handles.GI;




se = ones(3);  % 腐蚀膨胀模版

d = imdilate(d,se);% 再做膨胀运算
d = imerode(d,se); % 先做腐蚀运算
% 先膨胀后腐蚀的过程称为开运算。用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。
d = bwareaopen(d,100); % 移除小对象 小区域肯定是噪声

L = bwlabel(d,8); %标记连通
Num = max(max(L)); % 有几个区域
S = zeros(1,Num);
for i = 1:Num
    S(i) = sum(sum(L == i));
end
[S,id] = sort(S,'descend');
Ran = zeros(Num,4); % 范围
Fig = zeros(1,Num); % 长宽比
for i = 1:Num
    [ix,iy] = find(L == id(i));
    Ran(i,:) = [min(ix),max(ix),min(iy),max(iy)]; % 每一个区域的范围


end


for i = 1:Num

    Fig(i) = max(Ran(i,2)-Ran(i,1),Ran(i,4)-Ran(i,3))/min(Ran(i,2)-Ran(i,1),Ran(i,4)-Ran(i,3));

end

in = 0;

for i = 1:Num

    if Fig(i) < 1.5 % 长宽比是接近1的 所以不会太离谱

        in = i;

        break;

    end

end

if in == 0

    in = 1; % 如果都不满足就认定面积最大的一个了 这时候肯定是有干扰的

end

axes(handles.axes3);

imshow(L == id(in));

if handles.Color ~= 3

    xmin = Ran(in,1);
    xmax = Ran(in,2);
    ymin = Ran(in,3);
    ymax = Ran(in,4);

    II = handles.I(xmin:xmax,ymin:ymax,:);

elseif handles.Color == 3 % 黄色的多切一点 有黑色边框

    xmin = Ran(in,1)-round((Ran(in,2)-Ran(in,1))*0.15);
    xmax = Ran(in,2)+round((Ran(in,2)-Ran(in,1))*0.15);
    ymin = Ran(in,3)-round((Ran(in,4)-Ran(in,3))*0.15);
    ymax = Ran(in,4)+round((Ran(in,4)-Ran(in,3))*0.15);

    II = handles.I(xmin:xmax,ymin:ymax,:);

end

axes(handles.axes4);
imshow(II);
% imwrite(II,'5.png','png')
handles.Divice = II;
guidata(hObject, handles);


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

gywxd 发表于 2022-5-8 18:04:43
看这结构还不是按颜色提取,是按连通区域选择的, 膨胀腐蚀 也就是预处理,避免一些图象粘连。  这方法还是比较好的,大体上交通标识 都有  外围一圈封闭 颜色, 这样 进行轮廓和填充后 就会得到一个连通区域,  根据区域大小,区域 长宽比  基本可以过滤其他干扰例如  树干  长宽比太大,     不过这种做法也是不靠谱的, 如果地上有个大小相似的有色气球  就 无法区分了
还应该  加一个连通区域轮廓获取  对该连通区域里面 颜色值分布做一个检验, 如果连通区域颜色总数高于多少,低于多少 排除。 一般这类标识 就2 到3  个颜色 这样能更好的过滤。
回复此楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表