我已经进行了全面研究,以便找到在iOS上执行自适应阈值处理的内核.不幸的是,我不了解内核语言或其背后的逻辑.下面,我找到了一个执行阈值处理的例程(https://gist.github.com/xhruso00/a3f8a9c8ae7e33b8b23d)
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"
"}";
Run Code Online (Sandbox Code Playgroud)
是否有可能将其重写为自适应阈值内核?我提供给它的图像已经变成B&W并且已经模糊了.你能指点我的资源吗?我想坚持使用CoreImage,因为我的整个堆栈是围绕它构建的.
编辑:我想要实现的最佳示例/参考已在GPUImage的GPUImageAdaptiveThresholdFilter中实现 - https://github.com/BradLarson/GPUImage/blob/c5f0914152419437869c35e29858773b1a06083c/framework/Source/GPUImageAdaptiveThresholdFilter.m
是否存在可用作平滑阈值的现有过滤器?我的意思是像素值应该在两个值之间进行阈值处理,但中间值是内插的.
基本上,我正在尝试实现这个:
https://www.filterforge.com/wiki/index.php/Thresholds#Interpolation_.28.22Blending.22.29
我正在学习如何编写自定义Core Image滤镜,但是有一个问题,即当颜色值介于0-1之间时,呈现的颜色与内核代码中指定的颜色不同。(当颜色等于0或1时,颜色是正确的。)
这是我的过滤器代码:
import UIKit
class testFilter: CIFilter
{
// simply return half red color (0.5)
var colorKernel = CIColorKernel(string:
"kernel vec4 theFilter()" +
"{ return vec4(0.5, 0.0, 0.0, 1.0); }"
)
override var outputImage: CIImage!
{
let rect = CGRect(x: 0, y: 0, width: 200, height: 100)
return colorKernel.applyWithExtent(rect,arguments: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// generate image
let filter = testFilter()
let ciImage = f.outputImage
let image = UIImage(CIImage: ciImage)
// …Run Code Online (Sandbox Code Playgroud) 我正在使用Xcode 10.1.即使在我的目标的构建设置中使用搜索功能,我找不到"金属编译器"或任何相关的金属.
这里描述的金属设置可以在Build Settings中设置,但我找不到任何东西:https://developer.apple.com/documentation/coreimage/cikernel/2880194-init
它被切掉或更换了吗?