我正在尝试编写自己的扩张并侵蚀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
。谁能告诉我我做错了什么?
使用它我发现它可能与min
和max
如何将转换矩阵中列的大小减少为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]);