用MATLAB进行图像处理

图像处理概念,算法和MATLAB

局部最大值,区域最大值,以及函数imregionalmax

Image Processing Toolbox开发团队最近对算法的讨论让我想起了很久以前我最初想做的事情:解释 imregionalmax 以及一些相关的操作。(我想我跑题了。)
为了解释这一点,我将使用下面的示例图像:
P = sampleImage;
imshow (P)
注意,这幅图有许多常值环。人们可以把这些地区称为“高原”。这是像素值的横截面图:
p256 = P(256,:);
情节(p256)
轴([1 500 0 300])
文本(250255“高原”HorizontalAlignment =“中心”...
VerticalAlignment =“底”
文本(345204“高原”HorizontalAlignment =“中心”...
VerticalAlignment =“底”
文本(415153“高原”HorizontalAlignment =“中心”...
VerticalAlignment =“底”
文本(471102“高原”HorizontalAlignment =“中心”...
VerticalAlignment =“底”

局部极大值

在图像处理中,通常的定义是 局部最大值 当且仅当一个像素大于或等于它的所有近邻时,它才被认为是局部最大值。
利用图像膨胀法可以方便有效地找到所有的局部极大值像素。如果一个像素在膨胀后没有变化,那么这个像素就是局部最大值。
Pd = imdilate(P,ones(3,3));
local_maxima = (P == Pd);
imshow (local_maxima)
标题(局部极大值(白色像素)
下面是我们横截面上的局部极大值:
情节(p256)
Local_maxima_256 = local_maxima(256,:);
K = find(local_maxima_256);
持有
情节(k, p256 (k),“*”
持有

区域最大值

让我们来仔细看看其中的一些高原,看看它们在一个重要的方面有什么不同。首先,这是中央圆盘平台的横截面特写:
情节(p256)
xlim(325年[175])
如果你想象自己正站在高原中间,你就会意识到要想离开高原就必须下坡。
接下来,让我们放大围绕中心圆盘的第一个圆环的横截面:
情节(p256)
xlim(375年[315])
如果你站在高原的中间,那么你可以通过向下或向上移动离开高原,这取决于你移动的方向。
现在让我们放大下一个戒指:
情节(p256)
xlim(440年[375])
你看到高原左边的那个小凹陷了吗?这意味着你不能离开高原 没有走下坡路 .更大的向左趋势肯定更高,但首先你必须下降。
考虑到这些不同的高原,我们对一个概念的正式定义叫做 地区最大 :一个固定值的像素连接组件 h (这是平台),其中与连接组件相邻的每个像素都有一个低于的值 h (也就是说,高原的每个相邻像素都是下坡的)。
这就是 imregionalmax 计算。

函数imregionalmax

这个函数 imregionalmax 获取灰度图像,并以二进制掩码的形式返回所有区域最大像素。下面是这个函数从样本图像中得到的结果。为了便于比较,我将把它与上面的局部极大值蒙版并排显示。
regional_maxima = imregionalmax(P);
tiledlayout(1、2)
nexttile
imshow (local_maxima)
标题(“最大值”
nexttile
imshow (regional_maxima)
标题(“地区最大值”
您可以看到,只有中心圆盘和第二个环(从中心开始)被标记为区域极大值。
一般来说,如果您正在寻找图像中的峰值,并且图像中可能有高原,那么您最好寻找区域最大值而不是局部最大值。
然而 ,区域极大值的位置可能对像素值中非常小的噪声变化非常敏感。所以,我很快就会写另一篇关于 h-maxima变换 还有函数 imhmax 而且 imextendedmax
请继续关注!

效用函数

函数out = sampleImage
X = linspace(-100,100,501);
R = hypot(x,x');
Out = 0 (size(r));
戒指= 25:25:125;
% for k = 1:长度(环)
% out = out + tanh((rings(k) - abs(r))./2);
%结束
% out = out - 0.15*exp(-((r-54)/3).^2);
K = 1:长度(环)
Out = Out + profile((rings(k) - r)/2);
结束
Out = Out - 0.15*三角形(r-53);
Out = im2uint8(mat2gray(Out));
结束
函数Y =剖面(x)
Y = min(abs(x),1) .*符号(x);
结束
函数Y =三角形(x)
Y = max(1-abs(x),0);
结束
|
  • 打印
  • 发送电子邮件

コメント

コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。