如何在matlab中通过简单的方法对给定的图像进行分割

时间:2014-03-31 18:22:14

标签: matlab image-processing

我有一张图片。我想通过简单的方法对其进行细分。您能否告诉我使用matlab对其进行细分的最佳方法?请参阅我给出的图像文件here
 here以下的分割图像文件(红色是分割图像的边界)

3 个答案:

答案 0 :(得分:2)

以下代码可以作为起点。

I = load('imagetest.mat');
I = I.imagetest;
I = I./max(I(:));
se = strel('disk', 3);
Io = imopen(I, se);
Ie = imerode(I, se);
Iobr = imreconstruct(Ie, I);
Iobrd = imdilate(Iobr, se);
Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));
Iobrcbr = imcomplement(Iobrcbr);
bw = im2bw(Iobrcbr, graythresh(Iobrcbr));
figure
imshow(bw, 'InitialMagnification', 'fit')
title('Binary image')

输出

enter image description here

您可以使用watershed命令获取分隔黑色和白色线段的分水岭线。可以实验的一些参数是形态结构元素(strel命令),graythresh返回的级别,以及形态操作的继承和类型。

希望有所帮助。

答案 1 :(得分:2)

如果您知道阈值,最简单的方法是:

BW = im2bw(I, level)

其中I是灰度图像,level是阈值。阈值的另一个不太难的方法是local adaptive threshold。它将阈值决定基于本地窗口的平均强度。再说一遍,这里没什么特别的,最简单的分割。

答案 2 :(得分:2)

没有细分的一般定义。有时人们想要从背景或对象或文本的一部分中分割对象或前景。您必须定义所需的分段类型。对于文本,您可以使用adaptive threshold,对于灰度图形图像,您可以使用connected components,对于可以使用模糊提示的对象(如果可用),对于颜色场景GMM - 高斯混合模型 - 可以是合适的,见grab cut