Matlab - 使用逻辑索引删除图像边框

时间:2014-06-09 18:35:49

标签: matlab

我有一个视网膜眼底图像,沿着角落有一个白色边框。我试图删除图像四边的边框。这是一个预处理步骤,我的图像如下所示:

fundus http://snag.gy/XLGkC.jpg

这是一个RGB图像,我采用了绿色通道,并使用逻辑索引创建了一个掩码。我搜索了图像中全黑的像素,并侵蚀了蒙版以去除白边像素。但是,我不知道如何检索最终图像,没有使用我所拥有的蒙版的白色像素边框。这是我的代码,任何帮助将不胜感激:

maskIdx = rgb(:,:,2) == 0;   # rgb is the original image
se = strel('disk',3);        # erode 3-pixel using a disk structuring element 
im2 = imerode(maskIdx, se);
newrgb = rgb(im2);           # gives a vector - not the same size as original im

1 个答案:

答案 0 :(得分:2)

自己解决了。这就是我在一些帮助下所做的。

我首先计算了所有三个颜色通道组合的遮罩。这是因为当分别应用于所有三个通道时,每个通道的掩码不相同,如果我只使用原始图像中某个通道的掩码,则剩余像素将留在最终图像中:

mask = (rgb(:,:,1) == 0) & (rgb(:,:,2) == 0) & (rgb(:,:,3) == 0);

接下来,我使用半径为9像素的磁盘结构元素来扩展我的蒙版:

se = strel('disk', 9); 
maskIdx = imdilate(mask,se);

编辑:也可以使用任意的结构元素。我用过:se = strel(ones(9,9))

然后,使用新的遮罩,我将原始图像与新的扩张遮罩相乘:

newImg(:,:,1) = rgb(:,:,1) .* uint8(maskIdx);    # image was of double data-type
newImg(:,:,2) = rgb(:,:,2) .* uint8(maskIdx);
newImg(:,:,3) = rgb(:,:,3) .* uint8(maskIdx);

最后,我从原始图像中减去了计算出的颜色遮罩,以获得我想要的边框删除图像:

finalImg = rgb - newImg;

结果:

image http://snag.gy/g2X1v.jpg