4

Matlab 等高线函数(和 imcontour)绘制矩阵不同级别的等值线。我想知道:如何操作此函数的输出以接收每个轮廓的所有 (x,y) 坐标以及级别?如何使用输出 [C,h] = contour(...) 来完成上述任务?另外,我对操作底层网格不感兴趣,它是一个连续函数,只提取我在绘图上看到的相关像素

4

1 回答 1

5

您可以使用此功能。它接受contour函数的输出,并返回一个结构数组作为输出。数组中的每个结构代表一条等高线。该结构具有字段

  • v, 等高线的值
  • x, 等高线上点的 x 坐标
  • y, 等高线上各点的 y 坐标

    函数 s = getcontourlines(c)

    sz = size(c,2);     % Size of the contour matrix c
    ii = 1;             % Index to keep track of current location
    jj = 1;             % Counter to keep track of # of contour lines
    
    while ii < sz       % While we haven't exhausted the array
        n = c(2,ii);    % How many points in this contour?
        s(jj).v = c(1,ii);        % Value of the contour
        s(jj).x = c(1,ii+1:ii+n); % X coordinates
        s(jj).y = c(2,ii+1:ii+n); % Y coordinates
        ii = ii + n + 1;          % Skip ahead to next contour line
        jj = jj + 1;              % Increment number of contours
    end
    

    结尾

你可以像这样使用它:

>> [x,y] = ndgrid(linspace(-3,3,10));
>> z = exp(-x.^2 -y.^2);
>> c = contour(z);
>> s = getcontourlines(c);
>> plot(s(1).x, s(1).y, 'b', s(4).x, s(4).y, 'r', s(9).x, s(9).y, 'g')

这将给出这个情节:

在此处输入图像描述

于 2013-03-08T19:36:29.153 回答