Что представляют собой уровни контура, производимые функцией Matlab Contourc - PullRequest
0 голосов
/ 22 октября 2018

Я пытался понять, что такое уровни контуров.

Насколько я понимаю, контур функции 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]);

Я был бы очень признателен, если бы кто-то мог подсказать мне.

1 Ответ

0 голосов
/ 22 октября 2018

Контурные графики MATLAB представляют данные Z в виде непрерывной функции X и Y путем линейной интерполяции между Z значениями, поставляемыми в сетке X и Y.

Созданная вами сетка имеет значение 0 по всему фону и значения 0.1 и выше в различных прямоугольных участках сетки.Вокруг каждого прямоугольного сечения предполагается линейный градиент значений между соседними значениями фоновой сетки и назначенными вами значениями, и в некоторый момент линейный градиент всегда пересекает 0.1 ив этой точке рисуется контур.

Мы можем увидеть, как это работает более четко, добавив еще несколько уровней контура:

contour(pic, 0:0.02:0.1)

Если мы приблизим левый край нижней частимы получаем три поля:

Zoomed-in contours

Для всех трех полей pic равно 0 при X=49 и X=51 вдоль стороныкоробки.Нижний прямоугольник имеет значение 0.1 при X=50, и поэтому 0.1 -контур рисуется именно в этой позиции.

Средний прямоугольник достигает 0.2 при X=50 и, следовательно, прогрессия от *От 1041 * до 0.2 и обратно к 0 приводит к 0.1 -контурам, происходящим в X=49.5 и снова в X=50.5.

Верхняя коробка достигает 0.3 в X=50 и т. Д.градиенты круче, а 0.1 -контуры ближе к 0 -значениям в X=49 и X=51 по сравнению со средним квадратом.

TL; DR: если ваши данные имеют значения, которыес любой стороны вашего уровня контура, контур всегда существует где-то между этими значениями .

...