По сути, триплет битов abc
может быть уменьшен до пары бит de
с использованием набора конкретных вычислений, которые
d = a XOR b
e = a XOR c
Для каждой пары de
, которую вы хотите получить триплет abc
, ближайший к любому триплету пикселей, ijk
.
подход
Это таблица операций XOR
result from
0 00, 11
1 01, 10
Важной частью здесь является то, что вы можете получить тот же результат от двух возможных комбинаций, которые дополняют друг друга .
В вашем случае у вас есть независимое условие a XOR b
и зависимое a XOR c
, потому что a
используется в них обоих. a
(и b
) может быть любым из двух значений, но c
имеет только одну опцию, основанную на значении a
.
Количество триплетов abc
, которые уменьшаются до определенной комбинации de
, можно рассчитать, используя 2 для каждого независимого ограничения и 1 для каждого зависимого ограничения и умножая их вместе. Следовательно, 2 x 1 = 2. И половина из них дополняют другие.
Более сложный пример был бы abcde -> fgh
, с
f = a XOR b
g = a XOR c
h = d XOR e
Поскольку ограничения независимы, зависимы, независимы, вы получаете 2 x 1 x 2 = 4 комбинации abcde
, которые уменьшаются до одинаковых fgh
. Опять же, половина является дополнением к другой половине.
В любом случае для каждой пары de
вычислите два триплета abc
, которые уменьшаются до него, а затем вычислите расстояние Хемминга (HD) между каждым из этих триплетов и вашим триплетом пикселей ijk
. Результат с более низким значением - это триплет, к которому вы хотите изменить пиксели, чтобы они сократились до этой конкретной пары de
.
Например, тройки 000
и 111
сводятся к паре 00
. Если младшие биты ваших пикселей равны 000
, 001
, 010
или 100
, вы хотите изменить их на 000
. И если они 110
, 101
, 011
или 111
, измените их на 111
.
Очевидно, что HD может быть значением от 0 до 3. Поскольку триплеты дополняют друг друга, если HD между триплетом и вашими фактическими пикселями равен, например, 1, HD с другим триплетом будет 2 , так что оба складывают до 3. В том же духе таблица, которую вы строите для пикселей 000
, будет дополнять таблицу для 111
.
| 000 | 111
---+-----+----
00 | 000 | 111
01 | 001 | 110
10 | 010 | 101
11 | 100 | 011