用MATLAB进行图像处理

图像处理概念,算法和MATLAB

二值图像命中算子

几个月前,MATLAB用户Julia询问如何“独占填充4连通像素”MATLAB的答案.这里有一个更精确的问题声明:如果二值图像中的零值像素在北、东、南、西四个方向都有一个值,那么将这个零值像素更改为一个值像素。

我建议bwhitmiss在我的回答中。这个函数bwhitmiss是一个非常有用的工具,用于搜索二值图像中的特定像素邻域配置。下面是它的工作原理。

首先,创建一个结构元素(作为0和1的矩阵),表示您想要“命中”的邻域像素。例如,如果你想让一个3 × 3的邻域中的北、东、南、西四个邻域都是一个值,可以使用下面的结构化元素:

Se1 = [0 1 0 1 0 1 0 1 0]
Se1 = 0 1 0 1 0 1 0 1 0

现在创建第二个结构元素,表示你想“错过”的邻域像素。例如,如果你想让一个3 × 3邻域的中心像素值为零,可以使用下面的结构元素:

Se2 = [0 0 0 0 1 0 0 0 0]
Se2 = 0 0 0 0 1 0 0 0 0

然后你把二值图像和这两个结构元素传递给bwhitmiss.让我们构建一个小的测试图像进行实验。

Bw = [1 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 1]
bw = 1 1 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 1 0 1 0 1 1 1 1 0 1 0 1
Pixel_matches = bwhitmiss(bw,se1,se2)
Pixel_matches = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

你们可以看到bwhitmiss找到两个地方,一个零值的像素有一个值的北、东、南和西邻居。要修改原始图像,将这些0值像素转换为1值像素,使用一个元素或操作符:

Bw2 = bw | pixel_matches
bw2 = 1 1 0 0 0 0 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 1

有时您会在关于命中操作符的讨论中看到“不在乎”邻居的引用。这些是邻域像素,可以是0或1而不影响匹配。就输入而言bwhitmiss在美国,“不在乎”的邻居两者都不关心se1也不se1等于1。

Dont_care_neighbors = ~(se1 | se2)
Dont_care_neighbors = 1 0 1 0 0 0 1 0 1

这里还有一个例子来结束。让我们使用bwhitmiss以识别孤立的像素。这些是完全被零像素包围的单值像素。

Se1 = [0 0 0 0 1 0 0 0 0];Se2 = [1 1 1 1 0 1 1 1 1];Bw3 = bwhitmiss(bw,se1,se2)
Bw3 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

在我们的小样本图像中只有一个孤立的像素。




使用MATLAB®7.12发布

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。