首页 > 解决方案 > Matlab函数Contourc产生的Contour Levels代表什么

问题描述

我一直在试图了解轮廓水平是什么。

据我了解,函数 Z(x,y) 的轮廓是 (x,y) 平面中的一组点,因此 Z(x,y) 固定在某个恒定值,该恒定值是轮廓水平

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

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

例如,我在 0.1 轮廓级别上运行代码,轮廓函数生成图片中的所有轮廓,而不仅仅是 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]);

如果有人能给我提供线索,我将不胜感激。

标签: matlabimage-processingcomputer-vision

解决方案


MATLAB 等高线图将数据表示Z为 的连续函数,X并通过在和的网格上提供的值Y之间进行线性插值。ZXY

您生成的网格在0整个背景中具有值,0.1并且在网格的各个矩形部分中具有更高的值。在每个矩形部分周围,假定相邻背景网格值与您分配的值之间的值呈线性梯度,并且在某个点上,线性梯度总是相交0.1并在该点绘制轮廓。

我们可以通过添加更多轮廓级别来更清楚地看到它是如何工作的:

contour(pic, 0:0.02:0.1)

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

放大的轮廓

对于所有三个盒子,pic位于盒子0的侧面X=49和旁边。X=51底部框的值为0.1at X=50,因此0.1-contour 恰好在该位置绘制。

中间的方框到达0.2at X=50,因此从0到 再到0.2的进展0导致 -0.1轮廓出现在 处X=49.5和再次出现在 处X=50.5

顶部框到达0.3X=50,因此梯度更陡峭,并且与中间框相比,-0.1轮廓更接近 - 值。0X=49X=51

TL;DR:如果您的数据的值位于轮廓级别的任一侧,则轮廓始终存在于这些值之间的某个位置。


推荐阅读