2016-08-19 4 views
0

Я не знаю, является ли это точным сайтом для моего вопроса, но насколько я правильно понимаю FAQ, можно задать вопросы относительно одного конкретного алгоритма программного обеспечения на одном конкретном языке.Высоты автоматических контурных линий в Matlab

У меня есть несколько 2D матриц (содержащих Наны), для которого я хочу обратить один изобутил/горизонталь в Matlab. Для этого я использую функцию реализован контур() следующим образом, где Matlab автоматически выбирает уровень контурных линий, и я только указать количество уровней, я хочу, чтобы отобразить:

Contourline=contour(MyData,1); 

Результаты смотрят отлично , но мне было интересно теперь , как будет выбрана точная высота моей контурной линии, и если высоты сопоставимы между различными матрицами, то есть они всегда рисуются, например, 50% от максимального значения?

Функция контура() также позволяет вручную установить высоту для контурной линии. Сделав это (установив высоту в x% от максимального значения в моей матрице), результаты отображаются не как , устанавливая как те из автоматизированного подхода (независимо от значения «x», которое я выбираю).
Спасибо!

Edit:
Мой вопрос направлен на подстилающей алгоритма, реализованного в функции контура(), когда количество уровней установлено равным 1. Это дает очень хорошие результаты для моих данных, то есть функция рисует одну линию (или больше, если высоты одинаковы), которые как-то улавливают распределение по моим данным (Image). Если я попытаюсь установить высоту вручную contour(myData,[X X]), это работает, но не для всех моих матриц, в отличие от автоматизированного режима, когда я укажу только количество уровней contour(myData,1). Поэтому я очень доволен этими результатами, но если кто-нибудь спросил меня, как я проанализировал свои данные, я хочу дать им более математически правильный ответ, чем просто: «Я выбрал эту функцию в этой программе».

В общем:
Я хочу знать, как выбираются эта высота для автоматического режима и если может быть частью в коде, который делает его нежелательным для сравнения контурных линий для различных матриц. В documentation указано только, что высоты установлены автоматически, но не совсем точно.

ответ

1

Вы можете использовать вектор, чтобы указать, на какой высоте, чтобы нарисовать контуры

% Draws contours at height = 1 and 2 
contour(data, [1 2]) 

Если вы хотите только одну высоту, просто обеспечить, что значение дважды

% Contour at height 1 
contour(data, [1 1]) 

Если вы хотите просто указать количество уровней для рисования (а не высоты), вы можете использовать LevelList property графического объекта, чтобы определить, на какой высоте были сделаны линии.

[c, h] = contour(data, 1); 
levels = get(h, 'LevelList') 

Вы также можете использовать LevelList свойство изменять высоту уровней после создания.

[c, h] = contour(data, 1); 

% A level at 2 
set(h, 'LevelList', 2); 

% Or two levels 
set(h, 'LevelList', [1 2]) 

Update

Насколько как MATLAB выбирает уровни, когда вы указываете количество уровней, он создает равноотстоящих уровней между минимальным и максимальным значениями входных данных, используя следующую формулу :

minimum = min(real(double(data(:))); 
maximum = max(real(double(data(:))); 

tmp = linspace(minimum, maximum, nLevels + 2); 
levels = tmp(2:end-1); 
+0

Благодарим за быстрый ответ. Я уже пытался установить высоты вручную (см. Вторую часть моего вопроса), но мой вопрос скорее нацелился на основной алгоритм функции контура(), чем на реализацию (извините, если мой первоначальный вопрос был недостаточно ясным). Я отредактирую свое оригинальное сообщение, чтобы было ясно, что моя проблема. –

+0

@ C.B. Добавлен обновленный раздел, показывающий, как уровни автоматически выбираются MATLAB. – Suever

Смежные вопросы