我有一个分割的图像

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

我想要一条薄薄的周长--只有一个像素厚。这对于进一步的加工工作是必不可少的。什么是最好的方法?
请建议一下。
====== BoundingBox
%% 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结束
发布于 2015-01-02 06:27:06
这是因为您的图像在保存图像时有量化错误。您是否使用有损压缩算法保存图像,如JPEG?如果您希望保留强度,使其在保存图像时不会发生变化,请使用无损压缩算法,如PNG。
为了消除这些“噪声”效应,首先对图像进行阈值化以消除任何量化误差,这样就可以将这些像素设置为完全白色,然后再尝试使用bwperim。换句话说,做这样的事情:
im = im2bw(imread('http://i.stack.imgur.com/dagEc.png'));
im_noborder = imclearborder(im);
out = bwperim(im_noborder);
imshow(out);第一行代码直接从StackOverflow读取图像,我们使用im2bw对图像进行阈值化。这个图像最初是灰度的,所以我们只想把它转换成黑色和白色。这也将消除任何量化伪影,因为它阈值高于128。下一行代码将删除围绕您的形状的带有imclearborder的白色边框,因为由于某种原因,您上传的图像周围有一个白色边框。一旦我们删除这个边框,然后应用bwperim并显示图像。
这就是我得到的图像:

https://stackoverflow.com/questions/27737760
复制相似问题