matlab - 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]);
如果有人能给我提供线索,我将不胜感激。
解决方案
MATLAB 等高线图将数据表示Z
为 的连续函数,X
并通过在和的网格上提供的值Y
之间进行线性插值。Z
X
Y
您生成的网格在0
整个背景中具有值,0.1
并且在网格的各个矩形部分中具有更高的值。在每个矩形部分周围,假定相邻背景网格值与您分配的值之间的值呈线性梯度,并且在某个点上,线性梯度总是相交0.1
并在该点绘制轮廓。
我们可以通过添加更多轮廓级别来更清楚地看到它是如何工作的:
contour(pic, 0:0.02:0.1)
如果我们放大底部三个框的左侧边缘,我们会得到:
对于所有三个盒子,pic
位于盒子0
的侧面X=49
和旁边。X=51
底部框的值为0.1
at X=50
,因此0.1
-contour 恰好在该位置绘制。
中间的方框到达0.2
at X=50
,因此从0
到 再到0.2
的进展0
导致 -0.1
轮廓出现在 处X=49.5
和再次出现在 处X=50.5
。
顶部框到达0.3
处X=50
,因此梯度更陡峭,并且与中间框相比,-0.1
轮廓更接近 - 值。0
X=49
X=51
TL;DR:如果您的数据的值位于轮廓级别的任一侧,则轮廓始终存在于这些值之间的某个位置。
推荐阅读
- r - 在绘图图中显示右 y 轴,只有 1 条轨迹
- mysql - 获取每个类别的最新状态
- java - 如果我从带有 Room 和 LiveData 的数据库中获得一行,我如何将它与 UI 线程中的变量“同步”?
- cmd - 使用Python自动运行.exe
- plugins - Dynamics 365 c# 插件:过滤查找字段数据
- macos - ioreg 列出多个 dext
- haskell - 在 `unsafeDupablePerformIO` 中分配内存是否安全?
- c++ - 使用类作为数据类型时如何在 std::variant 中存储值?
- javascript - Android 上的 Chrome 按键事件报告很有趣
- c# - 一个用于多站点的 Asp.Net Core Api 服务