2

我正在尝试在 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

这些在视觉上可以工作,但是当我尝试覆盖用它们制作的区域时,它会变得一团糟,因为图像矩阵的尺寸已经改变。我已经确定问题出在col2im或中im2col。谁能告诉我我做错了什么?

玩弄它,我发现它可能与如何将转换后的矩阵中的列的大小减小到 1min相关联。max

4

1 回答 1

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]);
于 2013-02-12T05:55:45.723 回答