1

Это похоже на довольно элементарный математический/графический вопрос, но по какой-то причине я, похоже, не обворачиваю вокруг себя.Вычисление внутренних значений цвета между известными точками цвета (билинейная интерполяция?)

У меня есть четыре линейных сегмента, обозначающих квад. Каждая вершина на каждом сегменте линии имеет известное значение цвета. Для простоты предположим, что каждый отрезок линии имеет 100 вершин (ака 100 известных цветовых точек). Пример может выглядеть следующим образом:

Что мне нужно сделать, это, делает твердый четырехугольник с каждым внутренним пикселем цветным, на основе цвета точек на схеме. Самый очевидный способ сделать это (без указания вершины для каждой 100 * 100 точек цвета) состоял в том, чтобы сначала создать растровое изображение 100x100 с каждым интерполированным значением цвета, а затем применить это как текстуру к кваду. Мне просто сложно понять, как рассчитать эти внутренние цветовые значения.

Похоже, что это будет вопрос билинейной интерполяции, но поскольку я не пытаюсь найти значения в четырех известных угловых точках, но на пересечении «+» известных цветовых точек, я продолжаю запутываться. Моя математика немного ржавая: P

В качестве примера, как я могу приблизиться к вычислению значения цвета точки в точке (50,50) - в середине квадрата с известными точками цвета (0,50), (50,0), (50 100) и (100,50) & le; Это даже билинейная интерполяция, или это что-то еще?

Заранее благодарен!

ответ

1

Это выглядит как boundary value problem с Dirichet conditions (то есть значения указаны на границе). Вы не можете решить эту проблему, используя билинейную интерполяцию, потому что обычно будет (если у вас больше четырех входных точек), что пиксели, смежные с вашими пикселями, не будут иметь непрерывный цвет со своим ближайшим соседом.

Главное, что вам нужно решить, это уравнение, которое является достаточно гладким и всегда дает значение цвета, близкое к его соседству на границе, и существует несколько вариантов. Очевидная вещь для использования - Laplace's equation, которая в основном похожа на закрепление резинового листа до значения каждого цветового канала на границе, а затем позволяет ему расслабиться. Решение Лапласа не является тривиальным, потому что вам нужно смоделировать резиновую ленту для каждого нового набора граничных условий, но это очень распространено, поэтому вы можете искать решатели или примеры практически на любом языке.

+0

Ну, цвета вдоль краев * являются более или менее непрерывными, то есть особых изменений не будет. Точками данных являются фактически измерения плотности почвы, полученные путем нажатия радара в линиях над землей; мы хотим «заполнить» изображение интерполяцией между значениями, явно собранными (строки цветов). Раньше у нас только что проходили по одной оси, поэтому ЛЕРИНГ между параллельными линиями был легким. Теперь мы переходим через другую ось, чтобы добавить немного более подробную информацию. Билинейная интерполяция не была бы приемлемым приближением в этом случае? – Metal450

+0

Я рассматривал такую ​​ситуацию, когда писал свой ответ. В общем, ответ - нет. В частности, если вы lertp между двумя параллельными краями и получить перпендикулярные назад, то да, я думаю, вы можете lerp, но это, как правило, не будет так. В общем случае, если вам нужно, чтобы заливка была непрерывной со всеми четырьмя краями, вам нужно учитывать все четыре ребра одинаково, и решение Лапласа (или другое граничное значение soln) делает это. Кроме того, поскольку это физическая система, Лаплас легко обосновать и объяснить ... это просто простейшая система граничных значений. – tom10

+0

Кроме того, «цвета по краям более или менее непрерывны» не является проблемой, о которой я говорю. Вместо этого я имею в виду, рассмотрим верхний ряд значений, которые вы измерили.Теперь, как вам заполнить строку прямо под этим? Эта строка должна быть гладкой с верхней строкой, но также гладкой на конечных точках, которые являются вершинами вертикальных точек данных. Я не вижу способа гарантировать, что все эти условия будут выполнены (как и все другие стороны), если вы специально не встраиваете его в решение, а билинейная интерполяция не делает этого. – tom10

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