2014-11-09 161 views
1

我想分割图像中的对象。该对象是一个叶子,如左图所示。我做了细分,并得到这个权利图像:覆盖原始图像上分割区域的边界Matlab

现在我试图覆盖从原始图像二值图像的分割区域的轮廓边界,这样我就可以得到类似的图像这一个:

我真的不知道如何做到这一点。我试图追踪二进制图像的边界,然后张贴主图像,但无法弄清楚如何做到这一点。

回答

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

外貌像另一个有用的工具'bwperim'!谢谢! +1 – Divakar 2014-11-09 04:39:54

+1

@Divakar - 酷!现在我正在教你的东西!有一天我偶然发现了“bwperim”! – rayryeng 2014-11-09 04:49:01

+1

非常感谢@rayryeng。这是完美的 – Alex 2014-11-09 06:14:50

0

由于matlab版R2015a的还有一个功能,为您的图像处理工具箱内做到这一点: visboundaries

我想在链接提供的文件应该是很容易理解的:)