Я пишу алгоритм бинаризации изображения, который просто преобразует значение яркости каждого пикселя (изображение в градациях серого) в черный или белый. В настоящее время алгоритм бинаризации каждого пикселя примерно такой:
if( grayscale[x] < thresholdValue)
{
bitonal[x] = 1;
}
(на самом деле это упрощение АКТУАЛЬНОГО алгоритма, потому что битональное изображение на самом деле является битовым изображением (каждый индекс массива содержит 8 пикселей), поэтому я фактически упаковываю 1 в текущем индексе массива ... но я не думаю это меняет мой вопрос.
То, что я пытаюсь сделать, это устранить необходимость в операторе if.
Я думал о том, чтобы сделать что-то подобное. Вычтите значениеvalValue по шкале серого, а затем выполните некоторую хитрость манипулирования битами, чтобы очистить или сдвинуть биты так, чтобы в случае результата (grayscale[x]-threshold) is less than 0, I get a 0. otherwise I would get a 1
. Если проще сделать это наоборот (if grayscale[x]-threshold < 0 + bitwise trickery get a 1, else get a 0)
, это также сработало бы ... пока я могу избавиться от операторов ветвления ... любая помощь приветствуется ..