matlab中针对二值图像的形态学运算

1、imclose

功能:对图像执行形态学闭运算
语法:

J = imclose(I,SE)
J = imclose(I,nhood)

说明
J = imclose(I,SE) 使用结构元素 SE 对灰度或二值图像 I 执行形态学闭运算。形态学闭运算是先膨胀后腐蚀,这两种运算使用相同的结构元素。
J = imclose(I,nhood) 对图像 I 执行闭运算,其中 nhood 是由指定结构元素邻域的 0 和 1 组成的矩阵。此语法等效于 imclose(I,strel(nhood))。

使用形态学闭运算填充图像中的空缺
示例代码:

originalBW = imread('circles.png');
imshow(originalBW);

se = strel('disk',10);  % 使用一个盘形结构元素来保持对象的圆形特性。指定半径为 10 个像素,以便填充最大空缺

closeBW = imclose(originalBW,se);  % 对图像执行形态学闭运算
figure, imshow(closeBW)

输入参数:

参数描述
I输入图像,指定为任意维度的灰度图像或二值图像
SE结构元素,指定为单个 strel 对象或 offsetstrel 对象。如果图像 I 的数据类型为 logical,则结构元素必须为平面。
nhood结构元素邻域,指定为 0 和 1 组成的矩阵

输出参数
J — 经过闭运算的图像,以灰度图像或二值图像形式返回。J 与输入图像 I 具有相同的数据类型。

2、bwmorph

功能:针对二值图像的形态学运算
语法

BW2 = bwmorph(BW,operation)
BW2 = bwmorph(BW,operation,n)

说明:
BW2 = bwmorph(BW,operation) 对二值图像 BW 应用特定的形态学运算。

注意:
要对三维体图像执行形态学运算,请使用 bwmorph3。

BW2 = bwmorph(BW,operation,n) 应用 n 次运算。n 可以是 Inf,在这种情况下会一直重复运算,直到图像不再变化。

示例:对二值图像执行形态学运算

BW = imread('circles.png');
imshow(BW);

BW2 = bwmorph(BW,'remove');  % 删除内部像素以保留形状轮廓
figure
imshow(BW2)

BW3 = bwmorph(BW,'skel',Inf);  % 获取图像骨架
figure
imshow(BW3)

输入参数

参数选项描述
BW数据类型:single double int8 int16 int32 int64 uint8 uint16 uint32 uint64 logical二值图像,指定为二维数值矩阵或二维逻辑矩阵。对于数值输入,任何非零像素都被视为 1 (true)
operationbothat执行形态学“底帽”运算,返回原图像减去执行形态学闭运算之后得到的图像
branchpoints找到骨架的分支点
bridge桥接未连通的像素,即如果 0 值像素有两个未连通的非零邻点,则将这些 0 值像素设置为 1
clean删除孤立像素(由 0 包围的单个 1),例如以下图案中的那个中心像素
close执行形态学闭运算(先腐蚀后膨胀)
diag使用对角填充以消除背景的 8 连通
endpoints找到骨架的终点
fill填充孤立的内部像素(由 1 包围的单个 0),例如以下图案中的那个中心像素
hbreak删除具有 H 连通的像素
majority如果像素的 3×3 邻域中有 5 个或更多像素为 1,则将像素设置为 1;否则,将像素设置为 0
open执行形态学开运算(先腐蚀后膨胀)
remove删除内部像素。如果一个像素的所有 4 连通邻点均为 1,则此选项会将该像素设置为 0,因此只保留边界像素为 on
shrink使用 n = Inf,通过从对象边界删除像素,将对象收缩为点。使没有孔洞的对象收缩为点,有孔洞的对象收缩为每个孔洞和外边界之间的连通环。此选项保留欧拉数(也称为欧拉示性数)
skel使用 n = Inf,删除对象边界上的像素,而不允许对象分裂。其余的像素构成图像骨架。此选项会保留欧拉数
spur删除杂散像素
thicken在 n = Inf 时,通过向对象外部添加像素来加厚对象,直到先前未连通的对象实现 8 连通为止。此选项会保留欧拉数
thin在 n = Inf 时,通过从对象边界删除像素,将对象收缩为线。使没有孔洞的对象收缩为具有最小连通性的线,有孔洞的对象收缩为每个孔洞和外边界之间的连通环。此选项会保留欧拉数
tophat执行形态学“顶帽”运算,返回原图像减去执行形态学开运算之后得到的图像
n数据类型:char/string,正整数执行运算的次数,指定为正整数或 Inf。当您将 n 指定为 Inf 时,bwmorph 函数会重复该运算,直到图像不再变化

3、bwareafilt

功能:按大小从二值图像中提取对象
语法:

BW2 = bwareafilt(BW,range)
BW2 = bwareafilt(BW,n)
BW2 = bwareafilt(BW,n,keep)
BW2 = bwareafilt(___,conn)

说明:
BW2 = bwareafilt(BW,range) 从二值图像 BW 中提取对象面积在指定 range 内的所有连通分量(对象),并生成另一个二值图像 BW2。bwareafilt 返回仅包含符合条件的那些对象的二值图像 BW2。
BW2 = bwareafilt(BW,n) 保留 n 个最大对象。如果第 n 个位置出现结值,则 BW2 中仅包含前 n 个对象。
BW2 = bwareafilt(BW,n,keep) 指定是保留 n 个最大对象还是 n 个最小对象。
BW2 = bwareafilt(___,conn) 指定定义对象的像素连通性。

示例代码:
按对象面积对二值图像进行滤波

BW = imread('text.png');          % 读取图像
BW2 = bwareafilt(BW,[40 50]);     % 对图像进行滤波,只保留那些面积在 40 到 50 之间的对象
imshowpair(BW,BW2,'montage')      % 并排显示原始图像和滤波后的图像

按对象大小对二值图像进行滤波

BW = imread('text.png');          % 读取图像
BW2 = bwareafilt(BW,5);           % 对图像进行滤波,只保留面积最大的 5 个对象
imshowpair(BW,BW2,'montage')      % 并排显示原始图像和滤波后的图像

输入参数:

参数选项描述
BW数据类型:logical要滤波的图像,指定为二值图像
range数据类型:single double int8 int16 int32 int64 uint8 uint16 uint32 uint64面积的最小值和最大值,指定为 [low high] 形式的二元素数值向量
n数据类型: double按大小对图像对象进行滤波时要包含的对象数量,指定为数值标量
keeplargest(默认)/ smallest,数据类型: char/string要包含在输出图像中的对象的大小,指定为 ‘largest’ 或 ‘smallest’。如果第 n 个位置出现结值,则 bwareafilt 仅包括前 n 个对象
conn4,由 0 和 1 组成的 3×3 矩阵如果像素的边缘相互接触,则这些像素具有连通性。如果两个相邻像素都为 on 并在水平或垂直方向上连通,则它们是同一对象的一部分
8,由 0 和 1 组成的 3×3 矩阵如果像素的边缘或角相互接触,则这些像素具有连通性。如果两个相邻像素都为 on 并在水平、垂直或对角线方向上连通,则它们是同一对象的一部分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值