Вычисление одного репрезентативного «значения пикселя» из значения RGB - PullRequest
0 голосов
/ 03 октября 2018

Мой вопрос связан с обсуждением переполнения стека здесь.

https://math.stackexchange.com/questions/161780/about-sum-of-squared-differences

Обсуждение дает нам формулу для суммы квадратов разностей, а ответ дает следующий пример.


Например, если вы сравниваете два пикселя (т.е. один пиксель в каждом изображении), у вас есть область в 1 пиксель.Допустим, это пятый пиксель в первой строке: x = 0, y = 4. Значения пикселей равны 10,3 для f, g соответственно.Для области одного 2n1 = 1 => n1 = 0, то же самое относится и к n2.

SSD = (f (x + i, y + j) −g (x + i, y + j)) 2
SSD = (f (0 + 0,4 + 0) −g (0 + 0,4 + 0)) 2
SSD = (f (0,4) −g (0,4)) 2
SSD = (10−3) 2 = 49


У меня вопрос, как он получает значения пикселей10 для f (x, y) и 3 для g (x, y) из значений RGB для каждого пикселя?RGB не единственное значение.То есть, когда у меня есть один пиксель изображения, у меня есть триплет информации: у меня есть значения красного, зеленого и синего цветов.Как перейти от этого значения RGB к одному значению, как показано в примере?

Ответы [ 2 ]

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

(1)

"... Как он получает значения пикселей 10 для f (x, y) и 3 дляg (x, y) из значений RGB для каждого пикселя? "

Они кажутся просто базовыми примерами значений, чтобы было легче проиллюстрировать его точку зрения.Вы все еще можете использовать полное значение RGB в вычислениях ( например: 16777215 для полностью белого пикселя).

См. Также этот ответ: Как работает алгоритм суммирования квадратов разностей?

(2)
Если вместо этого вы предпочитаете 255 как плоское значение для белого пикселя, см. ниже:

"RGB не одно значение ... У меня есть триплет информации: у меня есть красный, зеленый и синий цветазначения. Как перейти от этого значения RGB к одному значению, как показано в примере? "

Возьмите значение input_rgb и разбейте его на компоненты RGB.

temp_R = input_rgb >> 16 & 0x0ff; in
temp_G = input_rgb >> 8 & 0x0ff;
temp_B = input_rgb >> 0 & 0x0ff;

Затем, чтобы получить одно репрезентативное значение (яркость пикселя)

value = (temp_R + temp_G + temp_B) / 3 ); //# averaged, gives range between 0 and 255

Вы можете еще больше уменьшить результат value в диапазоне от 0 до 1, выполнив (value / 255)

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

Я предполагаю, что он использует цветовое представление в градациях серого, где значения 10 и 3 соответствуют яркости или яркости двух пикселей.

Там - это метод для преобразования RGBв целочисленное представление:

RGB (int) = 

R * (256^2) + 

G * (256) + 

B

... Однако , вычисление SSD между значениями в этом представлении будет бессмысленным, что приводит нас к вопросу вычисления цветового расстояния в целом: любойпопытка сгладить RGB в одном измерении неизбежно приведет к коллапсу некоторой информации.

Представление значений RGB в виде HSL / HSB / HSV может позволить вам более осмысленно сравнивать оттенки, или насыщенность, или яркость (одно измерение ввремя), но трудно свернуть и сравнить все 3 измерения одновременно.

Вы можете найти эту статью использования.

...