史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

小峰抑制H-Maxima变换

最后一次 我介绍的概念 地区最大 。今天,我想添加一个概念,使区域最大更有用:抑制很小的局部极大值,可能只是因为噪音,不重要,在识别区域最大值。这个“小峰抑制”可以使用所谓的成就 h-maxima变换。 今天感兴趣的功能: imregionalmax , imhmax , imextendedmax , imregionalmin , imhmin , imextendedmin
让我们开始再一次的定义 地区最大 :一个恒定值的像素连接组件 h ,每个像素是邻居,连接组件的值低于 h 。我想详细说明,使用一个一维的例子。
y = peaksAndPlateaus;
x = 1:长度(y);
情节(x, y)
轴(105 0 120 [5])
网格
我将使用膨胀和侵蚀识别曲线样品上高原。
plateau_mask = (y = = imdilate (y) (1 1 1))) & (y = = imerode (y) (1 1 1)));
plateau_mask = imdilate (plateau_mask (1 1 1));
持有
情节(x (plateau_mask), y (plateau_mask),“*”)
持有
这里有一些放大视图说明三种高原感兴趣的。
tiledlayout (2, 2)
nexttile
情节(x, y)
持有
情节(x (plateau_mask), y (plateau_mask),“*”)
持有
轴(40 40 60 [0])
网格
52岁的文本(20“地区最大”HorizontalAlignment =“中心”)
nexttile
情节(x, y)
持有
情节(x (plateau_mask), y (plateau_mask),“*”)
持有
轴([30]40 60 10)
网格
文本(47岁,14日(“地区”“最低”),HorizontalAlignment =“中心”,
VerticalAlignment =“顶级”)
文本(55岁,14日(“地区”“最低”),HorizontalAlignment =“中心”,
VerticalAlignment =“顶级”)
文本(51岁,19日(“地区”、“最大”),HorizontalAlignment =“中心”,
VerticalAlignment =“底”)
nexttile
情节(x, y)
持有
情节(x (plateau_mask), y (plateau_mask),“*”)
持有
轴([58 69 40 95])
网格
文本(66、83、“高原”HorizontalAlignment =“正确”)
文本(64、79、“不是一个地区最大”“不是一个区域最小值”),
HorizontalAlignment =“左”VerticalAlignment =“顶级”)
上次我给的函数 imregionalmax 识别区域极大值的位置。这些可以单个样本像素或高原。看一看:
reg_max_mask = imregionalmax (y);
tiledlayout (2)
nexttile
情节(x, y)
轴(105 0 120 [5])
网格
标题(“输入曲线”)
nexttile
情节(x, reg_max_mask)
轴([105 -0.05 - 1.05])
网格
标题(“imregionalmax输出”)
nexttile (2 [2])
情节(x, y)
持有
情节(x (reg_max_mask), y (reg_max_mask),“*”)
持有
轴(105 0 120 [5])
网格
标题(“地区maxima高原”)
我已经试验过的曲线是相对平静,高原,是完全平坦的。不幸的是, imregionalmax 输入时大大减少有用甚至有点吵。这是因为噪音介绍小局部极大值在很多地方,和 imregionalmax 拿起甚至最微小的局部极大值。让我们试一试。如果我添加少量的噪音,你甚至不能看到它的情节:
rng (17)
yn = y + (0.01 * randn(大小(y)));
clf
情节(x, yn)
轴(105 0 120 [5])
网格
但现在的输出 imregionalmax 看起来完全不同。
reg_max_mask_n = imregionalmax (yn);
情节(x, yn)
持有
情节(x (reg_max_mask_n), yn (reg_max_mask_n),“*”)
持有
轴(105 0 120 [5])
网格
现在,只有少量的样品在广阔的高原被确定为区域极大值,并在小样本被标记为“肩膀”高原地区最大的地方不是之前。我们必须放大很明白这是为什么发生。
轴(20 49.8 - 50.1 [5])
轴([62 67 79.9 - 80.2])
您可以看到添加噪声引入小局部极大值在各个地方,扔 imregionalmax 香气从我们想做什么。

imhmax

这里的功能 imhmax 发挥作用了。计算的 h-maxima 变换。这个操作本质上抑制任何局部极大值小于一定高度( h )他们当前的环境。假设,例如,我们只对本地或感兴趣区域极大值的高度超过5单位立即高于其周围环境。我们完成这个调用 imhmax 是这样的:
yn_h = imhmax (yn, 5);
情节(x, yn)
持有
情节(x, yn_h)
持有
轴(105 0 120 [5])
网格
传奇([“原始”“h-maxima变换”])
在输出的 imhmax ,广泛的山峰被夷为平地,在中间的小峰,具有高度只有3高于其周围环境,已经被夷为平地,消除。现在让我们来试一试 imregionalmax 一次。
reg_max_mask_n_h = imregionalmax (yn_h);
情节(x, yn)
持有
情节(x (reg_max_mask_n_h), yn (reg_max_mask_n_h),“*”)
持有
轴(105 0 120 [5])
网格
计算,我们已经识别出的峰值明显高于周围,这通常是我们感兴趣的。请注意, h-maxima 变换伸展的高峰,所以上面所示的结果是挑选一些左派和右派的“肩膀”每一个广阔的高原。我们可以做一些后期处理正确,如果必要的。
还有另一个函数, imextendedmax ,简单地将h-maxima变换和地区maxima步骤组合成一个函数。如果你感兴趣的是最小值,那么您可以使用的版本的这些功能: imhmin , imregionalmin , imextendedmin
如果你发现有趣的在您自己的工作中使用这些功能,我想听它,所以请留下你的评论。

效用函数

函数y = peaksAndPlateaus
f = @ (x)最小(最大(1-abs (x / 5), 0), 0.5);
g1 = @ f (x) 100 * ((* 20) / 5);
g2 = @ f (x) 200 * ((x - 80) / 5);
g3 = @ 30 * f (x) ((x 50) / 3);
g4 = @ (x) 5 * f (2 * (x 50));
g5 = @ 30 * f (x) ((x 60));
g = @ (x) g1 (x) + g2 (x) + g3 (x) + g4 (x) + g5 (x);
y =圆(g (0:100));
结束
|
  • 打印

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。