MATLAB在图像处理中的应用

图像处理概念、算法和MATLAB

H-Maxima变换的小峰抑制

最后一次 ,我介绍了 区域最大值 .今天,我想添加一个使区域最大值更有用的概念:在识别区域最大值之前,抑制非常小的局部最大值,可能仅因噪声而存在,这些都不重要。这种“小峰值抑制”可以使用称为 h-maxima变换。 今天感兴趣的功能: imregionalmax , imhmax , imextendedmax , 伊敏 , 伊姆明 imextendedmin
让我们再次从定义 区域最大值 :具有常数值的像素连接组件 H ,其中与该连接组件相邻的每个像素的值都小于 H .我想用一个一维的例子来详细说明。
y = peaksAndPlateaus;
x = 1:长度(y);
绘图(x,y)
轴([-5 105 0 120])
网格在…上
我将使用膨胀和侵蚀来识别高原上的曲线样本。
plateau_mask = (y = = imdilate (y) (1 1 1))) & (y = = imerode (y) (1 1 1)));
Plateau_mask = imdilate(Plateau_mask,[1 1 1]);
持有在…上
绘图(x(高原遮罩),y(高原遮罩),"*")
持有
这里有一些放大的视图,展示了三种有趣的平台。
平铺布局(2,2)
奈克斯提尔
绘图(x,y)
持有在…上
绘图(x(高原遮罩),y(高原遮罩),"*")
持有
轴([0 40 60])
网格在…上
52岁的文本(20“地区最大”,水平对齐=“中心”)
奈克斯提尔
绘图(x,y)
持有在…上
绘图(x(高原遮罩),y(高原遮罩),"*")
持有
轴([40 60 10 30])
网格在…上
案文(47,14[“地区”“最低”), HorizontalAlignment =“中心”,...
VerticalAlignment =“顶级”)
文本(55岁,14日(“地区”“最低”), HorizontalAlignment =“中心”,...
VerticalAlignment =“顶级”)
案文(51,19[“区域”“最大”), HorizontalAlignment =“中心”,...
VerticalAlignment =“底部”)
奈克斯提尔
绘图(x,y)
持有在…上
绘图(x(高原遮罩),y(高原遮罩),"*")
持有
轴([58 69 40 95])
网格在…上
案文(66,83,“高原”,水平对齐=“正确”)
文本(64、79、"不是区域的最大值" "不是区域的最小值"],...
HorizontalAlignment =“左”VerticalAlignment =“顶级”)
正如我上次展示的,这个函数 imregionalmax 标识区域最大值的位置。这些可以是单个的样本或像素,也可以是平台。看一看:
reg_max_mask = imregionalmax (y);
tiledlayout (2)
奈克斯提尔
绘图(x,y)
轴([-5 105 0 120])
网格在…上
标题(“输入曲线”)
奈克斯提尔
情节(x, reg_max_mask)
轴([-5105-0.051.05])
网格在…上
标题(“imregionalmax输出”)
nexttile (2 [2])
绘图(x,y)
持有在…上
绘图(x(注册表最大值掩码),y(注册表最大值掩码),"*")
持有
轴([-5 105 0 120])
网格在…上
标题(“地区maxima高原”)
我一直在试验的曲线是相对平滑的,高原是完全平坦的 imregionalmax 当输入有一点噪声时,它的用处就大打折扣了。这是因为噪声会在很多地方引入局部极小值 imregionalmax 即使是最微小的局部最大值,我们也可以尝试。如果我添加了非常小的噪音,你甚至无法在绘图中看到它:
rng (17)
= y + (0 * randn(size(y))));
clf
情节(x, yn)
轴([-5 105 0 120])
网格在…上
但是现在 imregionalmax 看起来完全不同。
reg_max_mask_n = imregionalmax (yn);
情节(x, yn)
持有在…上
绘图(x(寄存器最大值掩码)、yn(寄存器最大值掩码),"*")
持有
轴([-5 105 0 120])
网格在…上
现在,只有广阔高原上分散的样本被确定为区域最大值,而小“肩”高原上的样本被标记为区域最大值,而之前没有。我们必须放大相当远的距离才能看到为什么会发生这种情况。
轴([52049.850.1])
轴([62 67 79.9 80.2])
您可以看到,添加的噪声在不同的地方引入了微小的局部极大值,这就是投掷 imregionalmax 从我们希望它做的事情中去掉气味。

imhmax

这是函数的位置 imhmax 发挥作用了。它计算的是 h-maxima 变换。这个操作本质上抑制了任何小于某个高度( H )。例如,我们只对局部或区域的高度大于5个单位的最大值感兴趣。我们通过调用 imhmax 这样地:
yn_h=imhmax(yn,5);
情节(x, yn)
持有在…上
绘图(x,yn_h)
持有
轴([-5 105 0 120])
网格在…上
传奇([原始“h-极大值变换”])
在输出中 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),"*")
持有
轴([-5 105 0 120])
网格在…上
通过这种计算,我们只识别出明显高于周围的峰值,而这正是我们感兴趣的。请注意 h-maxima 变换将峰值展开一点,因此上面显示的结果是在每个宽平台的左右两侧拾取一点“肩部”。如有必要,我们可以做一些后处理来纠正这一点。
还有另一个函数, imextendedmax ,它简单地将h-极大值变换和区域极大值步骤组合成一个函数。如果你对minima感兴趣,你可以使用这些函数的倒置版本: 伊姆明 , 伊敏 imextendedmin
如果您在自己的工作中发现了这些函数的有趣用法,我很想听听,所以请留下评论。

效用函数

作用y=峰值和高原
f=@(x)最小值(最大值(1-abs(x/5),0),0.5);
g1=@(x)100*f((x-20)/5);
x = (x-80)/5;
g3=@(x)30*f((x-50)/3);
g4=@(x)5*f(2*(x-50));
G5 = @(x) 30*f((x-60));
g=@(x)g1(x)+g2(x)+g3(x)+g4(x)+g5(x);
y=圆形(g(0:100));
终止
|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。