Как ограничить вороной вычисления в Matlab?
У меня есть стопка изображений эллиптического цилиндра. Внутри цилиндра есть несколько "точек"/ важных семян. Я рассчитал евклидово расстояние между ними и ближайшим соседом. Мой следующий шаг - сделать диаграмму вороного и рассчитать объем каждой ячейки вороного.
Мне нужно определить пространство / пределы этого эллиптического цилиндра, чтобы учесть при расчете диаграммы Вороного.
Есть идеи?
Заранее спасибо,
Yotam
2 ответа
Насколько это будет сложно, зависит от того, сможете ли вы работать с срезами по отдельности или вам нужно воздействовать на объем в целом.
В первом случае будет намного проще, если ваш цилиндр будет выровнен по любой из осей. Затем вы можете использовать уравнение эллипса поперечного сечения, чтобы определить границу в поперечной плоскости, которую вы можете применить ко всем срезам. Это позволит вам делать вещи в плоскости, такие как проверка точек на внутреннюю / внешнюю поверхность, маскирование изображения. Я не могу догадаться, как это может взаимодействовать с диаграммой Вороного, кроме как путем исключения внешних точек, но похоже, что это представляет эллипс / цилиндр, который является главной проблемой.
Если ваш цилиндр не выровнен по оси, то это сложнее, но в принципе та же процедура: спроецируйте эллипс на плоскость изображения и сместите его в каждом срезе в соответствии с углом между продольным вектором цилиндра и осью, перпендикулярной изображениям.
Если вы намереваетесь воздействовать на объем, то вы будете делать то же самое, но в другом порядке (это зависит от того, для чего вы его используете): как только вы вычислили пересечение между данным изображением и цилиндром, тогда вы Можно сначала применить маску или границу к каждому срезу, а затем нарисовать диаграмму Вороного.
Главное - избегать представления цилиндра как трехмерного объекта: это возможно, даже без символьной математики, но это сложно, и поскольку ваш набор данных естественно упорядочен как срезы, было бы наиболее последовательным также разрезать ваш цилиндр, эллипсы гораздо более компактно, чем цилиндр.
И для всех этих вариантов первый шаг - определить проблему математически. В зависимости от того, насколько вы удобны с Matlab, вы можете затем преобразовать его в псевдокод, а затем, наконец, Matlab, или пропустить псевдокод.
Сначала давайте начнем с догадки контекста:
Matlab Mupad для символических расчетов. Я не понимаю, почему вы думаете, что вам понадобится это, чтобы что-нибудь нарисовать?
Я понятия не имею, почему вам нужно что-то нарисовать, но я предполагаю, что это для визуализации выполненных вычислений. Например, площадь поперечного сечения, с использованием уравнения для конкретной плоскости или окружности поперечного сечения, для уравнения плоскости. Или, возможно, точки столкновения луча, или чтобы выделить поверхность, на которой вы рассчитываете?
В этих случаях числовой рендеринг адекватен, и вы можете просто использовать встроенные функции построения графиков...
Я рекомендую поверхность (строит сетку) http://nl.mathworks.com/help/matlab/ref/surface.html
но на самом деле предыдущий вопрос здесь показывает, как вручную построить трехмерный цилиндр: цилиндр с заполненным верхом и низом в matlab
Обратите внимание, что уравнения для цилиндра выражаются непосредственно в функции, что позволяет вам изменять его!
Прочитав ваш комментарий, вопрос, который вы задали, не имел ничего общего с тем, что вы хотите сделать. Не обращайте внимания на этот ответ, если вы обновите вопрос чем-то, касающимся ограничения вычислений вороной на изображениях.