Przeszukałem wszystkich, aby znaleźć jądro, które wykonuje progowanie adaptacyjne w systemie iOS. Niestety nie rozumiem języka jądra ani logiki, która za nim stoi. Poniżej znalazłem procedurę, która wykonuje progowanie (https://gist.github.com/xhruso00/a3f8a9c8ae7e33b8b23d)Próg adaptacyjny 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"
"}";
Czy można przepisać to do adaptacyjnego jądra progowania? Obraz, który mu dostarczam, został zamieniony na B & W i został już zamazany. Czy są jakieś zasoby, na które mógłbyś wskazać? Chciałbym pozostać przy CoreImage, ponieważ mój cały stos jest zbudowany wokół niego.
Edit: Najlepszym przykładem/referencje od co próbuję osiągnąć został wdrożony w GPUImageAdaptiveThresholdFilter GPUImage za - https://github.com/BradLarson/GPUImage/blob/c5f0914152419437869c35e29858773b1a06083c/framework/Source/GPUImageAdaptiveThresholdFilter.m
Pascal, dziękuję za odpowiedź. Każdy pomysł, jak to wdrożyć w CoreImage? https://github.com/ctodobom/OpenNoteScanner/blob/master/app/src/main/java/com/todobom/opennotescanner/ImageProcessor.java#L409 – mmackh
Wspomniałeś stałą 0.01, ale masz 0.001, czy to jest błąd? Czy stosujesz tę stałą do imageLuma lub progowej lumy (zakładając, że chciałem białe litery z czarnym tłem – Pochi
0.01 i 0.001 nie wydaje się robić zbyt dużej różnicy.Możesz wypróbować różne wartości, aby dopasować się do twoich potrzeb . – triiiiista