使用 MATLAB 进行图像边界提取
图像的边界与图像中的边缘不同。边缘表示像素强度值的突然变化,而图像的边界是轮廓。正如名称边界所暗示的那样,当像素所有权从一个表面变化到另一个表面时,图像中的所有权发生了变化,边界就出现在图片中。边缘基本上是边界线,但边界是划分两个表面的线或位置。
边界提取技术的类型
二值图像中有两种类型的边界。
- 内边界:它是原始图像和侵蚀图像之间的差异。腐蚀图像是对原始图像应用腐蚀时的缩小图像。通过获取原始图像和侵蚀版本之间的差异,我们得到了图像的内边界。内边界是主表面分隔另一个表面的部分。侵蚀使白色部分收缩,因此边界是白色表面本身的一部分。
- 外边界:它是膨胀图像和原始图像之间的差异。膨胀图像是对原始图像应用膨胀时的扩展图像。膨胀会增加图像的白色部分。在获取图像的扩张版本和原始版本之间的差异时,我们得到边界,这是原始图像黑色表面的丢失艺术。
什么是 imerode() 和 imdilate()?
腐蚀和膨胀都是形态学操作。
- imerode(): imerode() 是 Matlab 内置的腐蚀函数。 imerode(I,SE) 侵蚀灰度、二值或压缩二值图像。
句法:
J = imerode(I,SE)
- imdilate(): imdilate() 是 MatLab 内置的膨胀函数。它使用结构元素 SE 膨胀灰度、二值或压缩二值图像 I。
句法:
J = imdilate(I,SE)
示例 1:
Matlab
% MATLAB code for INNER Boundary
% read the image.
k=imread("1.png");
% Convert into grayscale.
k=rgb2gray(k);
% Define structuring element.
SE=strel('disk',2,0);
% Erode the image.
k1=imerode(k,SE);
% Take the difference of original
% and eroded image.
k2= k-k1;
% Display original image.
imtool(k);
% Display inner boundary image.
imtool(k2);
Matlab
% MATLAB code OUTER Boundary
% Read the image.
k=imread("1.png");
% Convert to grayscale.
k=rgb2gray(k);
% Define the structuring element.
SE=strel('disk',2,0);
% Dilate the image.
k1=imdilate(k,SE);
% Take the difference
k2= k1-k;
% Display original image.
imtool(k);
% Display outer boundary image.
imtool(k2);
输出:
代码说明:
- 首先,图像由 imread() 内置函数读取。
- 图像是 GFG 的彩色标志,我们将其转换为灰度。
- 结构元素是为形态学操作而创建的。
- 使用 imerode() 内置函数侵蚀图像。
- 从原始图像中减去被侵蚀的图像。
- 显示两个图像。
示例 2:
MATLAB
% MATLAB code OUTER Boundary
% Read the image.
k=imread("1.png");
% Convert to grayscale.
k=rgb2gray(k);
% Define the structuring element.
SE=strel('disk',2,0);
% Dilate the image.
k1=imdilate(k,SE);
% Take the difference
k2= k1-k;
% Display original image.
imtool(k);
% Display outer boundary image.
imtool(k2);
输出: