我有一个视网膜眼底图像,沿着角落有一个白色边框。我试图删除图像四边的边框。这是一个预处理步骤,我的图像如下所示:
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
答案 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;
结果: