膨胀/侵蚀图像而不改变尺寸

时间:2013-02-04 02:12:42

标签: matlab image-processing

我正在尝试编写自己的扩张并侵蚀matlab中的函数。我有一个可行的实现,但它会改变输出图像的大小。

这就是我所拥有的:

侵蚀

function eroded = erode(X) 
eroded = col2im(min(im2col(X, [3 3])), [3 3], size(X));
end

扩张

function dilated = dilate(X) 
dilated = col2im(max(im2col(X, [3 3])), [3 3], size(X));
end
这些工作在视觉上有效,但是当我尝试覆盖用它们制作的区域时,由于图像矩阵的尺寸发生了变化,它会变得混乱。我发现问题出在col2imim2col。谁能告诉我我做错了什么?

使用它我发现它可能与minmax如何将转换矩阵中列的大小减少为1相关联。

1 个答案:

答案 0 :(得分:1)

您似乎没有考虑实施中的边界条件。

要做到这一点,您很可能无法将功能写在一行中。您可以执行以下两项操作之一:1)创建一个单独的过滤器以应用于边,然后使用这些值附加输出,或者2)忽略边界和零填充,或者3)忽略边界并附加值来自原始图片。

注意:虽然您正在编写自己的函数,但有效的内置Matlab函数如下:

eroded = imerode(X,[1,1,1;1,1,1;1,1,1]);

为了扩张:

dilated = imdilate(X,[1,1,1;1,1,1;1,1,1]);