Я исследовал все, чтобы найти ядро, которое выполняет адаптивное пороговое значение для iOS. К сожалению, я не понимаю язык ядра или его логику. Ниже, я нашел программу, которая выполняет пороговую (https://gist.github.com/xhruso00/a3f8a9c8ae7e33b8b23d)Adaptive Threshold CIKernel/CIFilter iOS
static NSString * const kKernelSource = @"kernel vec4 thresholdKernel(sampler image)\n"
"{\n"
" float inputThreshold = 0.05;\n"
" float pass = 1.0;\n"
" float fail = 0.0;\n"
" const vec4 vec_Y = vec4(0.299, 0.587, 0.114, 0.0);\n"
" vec4 src = unpremultiply(sample(image, samplerCoord(image)));\n"
" float Y = dot(src, vec_Y);\n"
" src.rgb = vec3(compare(Y - inputThreshold, fail, pass));\n"
" return premultiply(src);\n"
"}";
Можно ли переписать в адаптивном ядро порогов? Изображение, которое я ему подаю, превратилось в B & W и уже размыто. Есть ли какие-то ресурсы, на которые вы могли бы обратить меня? Я хотел бы придерживаться CoreImage, поскольку вокруг него строится весь мой стек.
Edit: Лучший пример/ссылка от того, что я пытаюсь достичь был реализован в GPUImageAdaptiveThresholdFilter GPUImage в - https://github.com/BradLarson/GPUImage/blob/c5f0914152419437869c35e29858773b1a06083c/framework/Source/GPUImageAdaptiveThresholdFilter.m
Паскаль, спасибо за ваш ответ. Любая идея о том, как реализовать это в CoreImage? https://github.com/ctodobom/OpenNoteScanner/blob/master/app/src/main/java/com/todobom/opennotescanner/ImageProcessor.java#L409 – mmackh
Вы упомянули константу 0.01, но у вас есть 0.001, это ошибка? Кроме того, вы применяете эту константу к imageLuma или пороговой яркости (при условии, что мне нужны белые буквы с черным фоном. – Pochi
0.01 и 0.001, похоже, не слишком сильно отличаются друг от друга. Вы можете попробовать разные значения в соответствии с вашими потребностями , – triiiiista