nwa*_*les 3 image-processing core-image gpuimage imagefilter adaptive-threshold
我正在寻找一种类似自适应阈值的算法,但它保持颜色.我正在尝试拍这样的图像:

并使它看起来像这样:

如果重要的话,我在ios工作.
这是一个适用于您的样本图像的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);
}
Run Code Online (Sandbox Code Playgroud)
那么这是如何工作的呢?那么内核的第一部分,计算cmax的部分,就是计算白板的局部颜色.这是棘手的部分.基本上它确定(大约)白板在没有标记的情况下的颜色.为此,内核做出三个关键假设:
这是cmax的输出结果:

一旦局部白板颜色被近似,只需将当前像素除以局部背景即可.这类似于从图像中删除色偏的方式.
该算法类似于WWDC13核心图像演示中的Haze Removal示例.在该示例中,减去局部最小值以产生更黑的黑色.在这种情况下,局部最大值被分割以产生更白的白色.
: