如何平滑bwperim的周边输出?

How to smooth the perimeter output of bwperim?

我有一个分割图像

当我在此应用 bwperim 函数时,我得到如下输出

我想要一条细线 - 一条 pixel-thick。这对于进一步的处理工作是必不可少的。什么是最好的方法?

求推荐。

====== 边界框

%%% ComputeBoundingBox %%% 功能[统计数据,statsAlreadyComputed] = ... ComputeBoundingBox(imageSize、stats、statsAlreadyComputed) % [minC minR 宽高]; minC 和 minR 以 .5 结尾。

如果~statsAlreadyComputed.BoundingBox statsAlreadyComputed.BoundingBox = 1;

[stats, statsAlreadyComputed] = ...
    ComputePixelList(imageSize,stats,statsAlreadyComputed);

num_dims = numel(imageSize);

for k = 1:length(stats)
    list = stats(k).PixelList;
    if (isempty(list))
        stats(k).BoundingBox = [0.5*ones(1,num_dims) zeros(1,num_dims)];
    else
        min_corner = min(list,[],1) - 0.5;
        max_corner = max(list,[],1) + 0.5;
        stats(k).BoundingBox = [min_corner (max_corner - min_corner)];
    end
end

结束

发生这种情况是因为您在保存图像时存在量化错误。您是否使用 有损 压缩算法(如 JPEG)保存图像?如果您想保留强度以便它们在保存图像时不会改变,请使用 无损 压缩算法,例如 PNG。

要消除这些 "noisy" 影响,请先对图像设置阈值以消除任何量化误差,以便您可以将这些像素设置为全白,然后再次尝试使用 bwperim。换句话说,做这样的事情:

im = im2bw(imread('http://i.stack.imgur.com/dagEc.png'));
im_noborder = imclearborder(im);
out = bwperim(im_noborder);
imshow(out);

第一行代码直接从 Whosebug 读取您的图片,我们使用 im2bw to threshold your image. This image was originally grayscale, and so we want to convert this into black and white only. This will also remove any quantization artifacts as it thresholds anything higher than 128. The next line of code removes the white border with imclearborder 包围您的形状,因为出于某种原因,您上传的图片周围有白色边框。删除此边框后,我们将应用 bwperim 并显示图像。

这是我得到的图像: