Выбор изолиний из контурной функции Matlab

Функция контура Matlab (и imcontour) строит изолинии разных уровней матрицы. Я хотел бы знать: как я могу манипулировать выходными данными этой функции, чтобы получить все (x,y) координаты каждого контура вместе с уровнем? Как я могу использовать выходные данные [C,h] = контур (...) для достижения вышеупомянутой задачи? Кроме того, я не заинтересован в манипулировании базовой сеткой, которая является непрерывной функцией, а только извлекает соответствующие пиксели, которые я вижу на графике.

1 ответ

Решение

Вы можете использовать эту функцию. Требуется вывод contour функция, и возвращает массив структуры в качестве вывода. Каждая структура в массиве представляет одну контурную линию. Структура имеет поля

  • v, значение контурной линии
  • xкоординаты х точек на линии контура
  • yкоординаты y точек на контурной линии

    функция s = getcontourlines(с)

    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')

Который даст этот сюжет:

введите описание изображения здесь

Другие вопросы по тегам