Я ищу алгоритм аналогичного адаптивного порога, но он сохраняет цвет. Я пытаюсь сделать снимок, как это:Как достичь адаптивного порогового фильтра с цветом
И сделать его выглядеть следующим образом:
Если это имеет значение, я работаю в ИОС.
Я ищу алгоритм аналогичного адаптивного порога, но он сохраняет цвет. Я пытаюсь сделать снимок, как это:Как достичь адаптивного порогового фильтра с цветом
И сделать его выглядеть следующим образом:
Если это имеет значение, я работаю в ИОС.
Вот CIKernel, который хорошо работает на вашем образце изображения
kernel vec4 coreImageKernel (sampler i)
{
vec2 dc = destCoord();
// center pixel color
vec4 c = unpremultiply(sample(i, samplerTransform(i,dc+vec2(0.0,0.0))));
// for a whiteboard, the max of a neighborhood is likely to be the color
// of the whiteboard
vec4 cmax = c;
cmax = max(unpremultiply(sample(i, samplerTransform(i,dc+vec2(10.0,0.0)))), cmax);
cmax = max(unpremultiply(sample(i, samplerTransform(i,dc+vec2(-10.0,0.0)))), cmax);
cmax = max(unpremultiply(sample(i, samplerTransform(i,dc+vec2(0.0,10.0)))), cmax);
cmax = max(unpremultiply(sample(i, samplerTransform(i,dc+vec2(0.0,-10.0)))), cmax);
// normalize the center color according to the whiteboard color
vec4 r = c/cmax;
return premultiply(r);
}
Так как же это работает? Ну, первая часть ядра, часть, которая вычисляет cmax, вычисляет локальный цвет доски. Это сложная часть. В основном он определяет (приблизительно) цвет, который будет иметь доски, если там нет меток. Для этого ядро делает три допущения:
Вот что выход Cmax выглядит следующим образом:
Once местного цвета доски приближается, это просто вопрос разделения текущего пикселя на локальный фон. Это похоже на то, как цветовой оттенок удаляется из изображения.
Этот алгоритм похож на пример удаления Haze из презентации основного изображения WWDC13. В этом примере локальный min вычитается, чтобы сделать черные черные. В этом случае локальный макс делится на белые.
:
Порог всегда выводит двоичную маску, то есть пиксели, которые ниже порога (локального адаптивного) и пикселей выше. Если у вас есть эта маска, вы можете, конечно, сохранить информацию о цвете исходного изображения.
Поэтому простой подход может привести к следующему рабочему процессу:
В качестве альтернативы может быть:
Эти два способа не может быть идеальным, но, вероятно, работать уже в большом количестве случаев в том числе и пример в вопросе.
Ответ уже довольно хорошо, но я думаю, что это было бы еще более полезным и для других, если бы более expalantion данного фрагмента кода. В основном, как он достигает, чего он добивается? – Trilarion
Я согласен с @Trilarion. Я заинтригован тем, как вы получили это, чтобы работать. Я не разработчик iOS, и поэтому то, что вы написали выше, не имеет для меня никакого смысла. Я хотел бы знать, каковы основные шаги к вашему алгоритму. – rayryeng