【问题标题】:Dilate/Erode image without changing size在不改变大小的情况下扩大/侵蚀图像
【发布时间】:2013-02-12 14:02:13
【问题描述】:

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

【问题讨论】:

  • 第二个函数应该是function f= Dilate(X) ...对吧?

标签: matlab image-processing


【解决方案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]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多