在原始图像Matlab上叠加分割区域的边界

时间:2014-11-09 01:01:19

标签: image matlab image-processing

我正在尝试从图像中分割对象。对象是叶子,如左图所示。我做了分段并获得了正确的图像:

现在我试图从原始图像上的二进制图像覆盖分割区域轮廓的边界,因此我可以得到与此图像类似的图像:

我不确定该怎么做。我试图追踪二进制图像的边界,然后在主图像上发布,但无法弄清楚如何做到这一点。

2 个答案:

答案 0 :(得分:2)

这很容易做到。只需使用面罩并使用bwperim计算面罩的周长。找到这些边后,您可以使用这些位置并将原始图像中的像素设置为黄色。为此,只需提取原始图像的每个颜色平面,然后使用沿着遮罩周边的像素索引到每个颜色平面,并将这些颜色平面设置为特定的通道值。要使其变为黄色,您可以沿着周边将红色和绿色值设置为255,将蓝色值设置为沿周长为0。如果要将所有这些组合成单个图像,请使用cat并沿第三维进行。换句话说,假设您的二进制图像存储在mask中,原始图像存储在im中,您可以这样做(假设是彩色图像):

perim = bwperim(mask, 8); %// Get perimeter of the mask
red = im(:,:,1); %// Extract the colour planes of the original image
green = im(:,:,2);
blue = im(:,:,3);
red(perim) = 255; %// Set those pixels in the perimeter to yellow
green(perim) = 255;
blue(perim) = 0;
out = cat(3, red, green, blue); %// Make an output image
figure;
imshow(out);

out应该包含原始图像,其中叶子的周长以黄色覆盖在顶部。

答案 1 :(得分:0)

从Matlab版本R2015a开始,您可以在图像处理工具箱中执行此操作: visboundaries

我认为链接中提供的文档应该很容易理解:)