Matlab函数轮廓生成的轮廓级别代表什么

时间:2018-10-22 11:18:08

标签: matlab image-processing computer-vision

我一直试图了解轮廓线的水平。

据我了解,函数Z(x,y)的轮廓是(x,y)平面上的一组点,因此Z(x,y)固定为某个常数,该常数值是轮廓 level

Matlab文档指出,contourc函数采用一个参数来确定在其上计算轮廓的级别。

我想尝试一下,所以我构建了一个包含10个矩形的图片,每个矩形的深度从0.1开始,直到1.0为止,然后运行轮廓函数,根据输入中指定的级别查看突出显示的轮廓,但结果出乎意料。

例如,我在0.1轮廓级别上运行代码,轮廓函数在picture中生成所有轮廓,不仅是0.1级别的轮廓。

这是用于构造图片并找到其轮廓的Matlab代码:

pic = zeros(500, 500);
val = 0.1;
shift = 40;

for j = 1:10
  for i= 50:450
    pic(shift*j,i) = val;
  end
  for i= 50:450
    pic(shift*j+25,i) = val;
  end
  for i = shift*j: shift*j+25
    pic(i, 50) = val;
    pic(i,450) = val;
  end
  val = val + 0.1;

end

imshow(pic);
figure(2);
contour(pic, [0.1 0.1]);

如果有人可以帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:1)

MATLAB等高线图通过在网格上提供的Z值之间进行线性插值,将数据X表示为YZ连续函数XY中的一个。

您生成的网格在整个背景中的值为0,在网格的各个矩形部分中的值为0.1,甚至更高。在每个 矩形截面周围,假定相邻背景网格值与您分配的值之间的值呈线性梯度,并且在某个点上,线性梯度始终穿过{{ 1}},并在该点绘制轮廓。

通过添加更多轮廓级别,我们可以更清楚地了解其工作原理:

0.1

如果我们放大到底部三个框的左边缘,则会得到:

Zoomed-in contours

对于所有三个框,contour(pic, 0:0.02:0.1) 分别是pic在框0X=49的旁边。底部的框在X=51处具有值0.1,因此X=50轮廓正好在该位置绘制。

中间框在0.1到达0.2,因此从X=500再回到0.2的过程导致0-等高线出现在0.1,然后又出现在X=49.5

顶部的框到达X=50.5处的0.3,因此梯度更陡,X=50的轮廓更接近0.1处的0值和X=49与中间框相比。

TL; DR:如果数据的值位于轮廓级别的两侧,则轮廓总是存在于这些值之间的某个地方