在Matlab中边界去除图像

时间:2016-12-16 17:38:48

标签: matlab image-processing

我试图在Matlab中删除我的图像边界。 enter image description here 我试过这个

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)')

,结果是

enter image description here

但有两个明显的问题:

  1. edge默认Sobel的输出包含一些内部形状。
  2. binary一个中减去gray scale张图片!edge的输出为binary

    任何帮助都将不胜感激。

  3. Download原始图片。

1 个答案:

答案 0 :(得分:1)

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

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

enter image description here

这种缩小和成长的“一点点”你将不得不玩。我选择了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);

我们现在得到这张图片:

enter image description here

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