Выбор изолиний из контурной функции 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')
Который даст этот сюжет: