Как интерполировать значение точки в пикселях, используя сплайн-интерполяцию? - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь реализовать функцию кривых в Photoshop, чтобы настроить изображение на моей веб-странице. Я ищу сплайн-интерполяцию в Википедии (https://en.wikipedia.org/wiki/Spline_interpolation), но мне не совсем понятен алгоритм.

Теперь я использую CanvasSpliner (https://github.com/jonathanlurie/canvasSpliner), чтобы создать интерфейс для функции кривых (пример здесь http://me.jonathanlurie.fr/canvasSpliner/)), и у меня есть координаты всех точек в интерфейсе (диапазон значений 0-255 Я использую объект Map для хранения всех этих точек, как показано ниже:

var pixel_map = new Map();

//cs is the CanvasSpliner object, I just demo with releasePoint event
cs.on("releasePoint", function(csObj){
  //x_coor, y_coor is the coordinate get from mouseMove event
  pixel_map.set(x_coor.toString(), y_coor);
}

Так что, если я сопоставлю все соответствующие точки ввода на объекте Map со всеми пикселями изображения (диапазон значений 0-255) с выводом точек, как показано ниже:

//I match with 3 channels R, G, B
for (let [key, value] of pixel_map) {
  if (data[channels_at_xy.R] === key) {
    temp_image_data.data[channels_at_xy.R] = value;
  }
  else if (data[channels_at_xy.G] === key) {
    temp_image_data.data[channels_at_xy.G] = value;
  }
  else if (data[channels_at_xy.B] === key) {
    temp_image_data.data[channels_at_xy.B] = value;
  }
  else if (data[channels_at_xy.A] === key) {
    temp_image_data.data[channels_at_xy.A] = data[channels_at_xy.A];
  }
  else{
    temp_image_data.data[channels_at_xy.R] = data[channels_at_xy.R];
    temp_image_data.data[channels_at_xy.G] = data[channels_at_xy.G];
    temp_image_data.data[channels_at_xy.B] = data[channels_at_xy.B];
    temp_image_data.data[channels_at_xy.A] = data[channels_at_xy.A];
   }
}

Как другие пиксели, которые не принадлежат объекту карты, будут интерполированы сплайном, я просто оставляю им значение по умолчанию в коде выше? (Например, если у моего объекта Map есть 3 элемента, я могу просто отобразить 3 элемента на 3 соответствующих пикселя, оставив 253 пикселя со значением по умолчанию.). Как я заметил в Photoshop, при использовании кривых будут изменены все пиксели, а не только тот, который соответствует входному значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...