Думайте о (x1, y1, z1) и (x2, y2, z2) как о двух точках, охватывающих куб, который окружает точку (x, y, z), для которой вы хотите интерполировать значение h.
Набор из восьми точек (x1, y1, z1), (x2, y1, z1), (x1, y2, z1), (x1, y1, z2), (x2, y2, z1), (x2, y1, z2), (x1, y2, z2), (x2, y2, z2) образуют полный куб. Таким образом, трилинейная интерполяция между (x1, y1, z1) и (x2, y2, z2) фактически означает интерполяцию между 8 точками в пространстве трехмерной гистограммы, окружающим интересующую вас точку! Теперь на ваши вопросы:
(x1, y1), (x2, y2) (и (x1, y2) и (x2, y1) представляют центры бинов в плоскости (x, y). В вашем случае это были бы векторы ориентации .
z1 и z2 представляют два уровня бина в направлении ориентации, как вы говорите. В сочетании с четырьмя точками на плоскости изображения это дает в общей сложности 8 ячеек.
Ширина полосы b = [bx, by, bz] - это, в основном, расстояние между центрами соседних элементов разрешения в направлении x, y и z. В вашем случае с 8 ячейками в направлении x и 64 пикселями в этом направлении, 16 ячейками в направлении y и 128 пикселями в направлении y:
bx = 8 pixels
by = 8 pixels
Это оставляет bz, для которого мне действительно нужно больше данных, потому что я не знаю полного диапазона вашего градиента (то есть от минимального до максимального возможного значения), но если этот диапазон равен rg
, то:
bz = rg/9
Как правило, ширина полосы в любом направлении равна полному доступному диапазону в этом направлении, деленному на количество элементов разрешения в этом направлении.
Для хорошего объяснения трилинейной интерполяции с изображениями посмотрите ссылку в ответ whoplisp .