在Matlab中边界去除图像

我试图在Matlab中删除我的图像边界.

《在Matlab中边界去除图像》

我试过这个

clc,clear,clf

Im=im2double(imread('Im.png'));
imshow(Im);title('Original Image')
pause(.5)
imshow(edge(Im));title('after Sobel')
pause(.5)
imshow(Im-edge(Im));title('Im-edge(Im)')

结果是

《在Matlab中边界去除图像》

但有两个明显的问题:

>默认情况下,Sobel的边缘输出包含一些内部形状.
>从灰度级减去二进制图像!(边缘的输出是二进制)

任何帮助,将不胜感激.

Download原始图像.

最佳答案 我可以想到这样做的一种方法是对图像进行阈值处理,以便您拥有一个坚固的白色物体,将物体缩小一点.然后,使用略微减小的对象索引到主对象蒙版并删除此区域.此外,稍微增加中间结果的面积以确保您移除边界的外边缘.这将最终产生一个挖空的遮罩,该遮罩设计用于在一定的公差范围内移除物体的边界,同时保留图像的其余部分.此掩码中的任何值都可用于删除边界.

为了重现性,我已将您的图像上传到Stack Imgur,这样我们就不必依赖第三方网站下载您的图像:

《在Matlab中边界去除图像》

这种“缩小”和“成长”的“一点点”将不得不玩弄.我选择了5个像素,因为这似乎有效.为了进行收缩和生长,分别使用imerodeimdilate进行侵蚀和扩张,并使用5 x 5像素正方形的结构元素.

% Read from Stack Imgur directly
im = imread('https://i.stack.imgur.com/UJcKA.png');

% Perform Sobel Edge detection
sim = edge(im, 'sobel');

% Find the mask of the object
mask = im > 5;

% Shrink the object
se = strel('square', 5);
mask_s = imerode(mask, se);

% Remove the inner boundary of the object
mask(mask_s) = false;

% Slightly enlarge now to ensure outer boundary is removed
mask = imdilate(mask, se);

% Create new image by removing the boundaries of the 
% edge image
sim(mask) = false;

% Show the result
figure; imshow(sim);

我们现在得到这个图像:

《在Matlab中边界去除图像》

您必须使用Sobel阈值,因为我实际上不知道您用什么来获得所需的图像.我只想说默认阈值没有给出预期结果显示的结果.

点赞