Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何最好地接近局部阈值opengl函数_Opengl_Image Processing - Fatal编程技术网

如何最好地接近局部阈值opengl函数

如何最好地接近局部阈值opengl函数,opengl,image-processing,Opengl,Image Processing,我想拍一些文字的照片,使文字更容易阅读。棘手的是,最初的照片可能有暗区和亮区,我希望opengl函数能够增强所有这些区域的文本 这里有一个例子。顶部是原始图像。底部是经过处理的图像 [已编辑] 我添加了一个更好的例子来描述正在发生的事情。我可以增强文本,但在没有文本的区域,这种简单的阈值设置会产生斑点噪声(图像左下角)。 如果将阈值向后卷起,则会丢失较暗区域(右下角)中的文本 目前,经过处理的图像只拾取部分文本,而不是全部文本。我使用的原始算法非常简单: -在当前像素周围采样8个像素(距离4-

我想拍一些文字的照片,使文字更容易阅读。棘手的是,最初的照片可能有暗区和亮区,我希望opengl函数能够增强所有这些区域的文本

这里有一个例子。顶部是原始图像。底部是经过处理的图像

[已编辑]
我添加了一个更好的例子来描述正在发生的事情。我可以增强文本,但在没有文本的区域,这种简单的阈值设置会产生斑点噪声(图像左下角)。 如果将阈值向后卷起,则会丢失较暗区域(右下角)中的文本

目前,经过处理的图像只拾取部分文本,而不是全部文本。我使用的原始算法非常简单: -在当前像素周围采样8个像素(距离4-5远的像素似乎效果最好) -从这个示例中找出最亮和最暗的像素 -如果当前像素接近最暗的阈值,则将其设置为黑色,反之亦然

这似乎对文本非常有效,但对于非文本,则会产生非常嘈杂的图像(即使我提供了初始拒绝阈值)


我修改了这个算法,假设文本总是接近黑色。这提供了上面的底部图像,但我再次无法提取出我想要的所有文本功能。

在将其作为程序实现之前,您可能希望拍摄源照片并在GIMP或其他编辑器中使用它,以查看您可以做些什么

处理阴影的一种方法是在重分解之前运行高通滤波器

这是在图像编辑器中执行此操作的方式(手动,无需“高通”过滤器插件):
1.将图像转换为灰度并保存到“layer_A”
2.将“层a”复制到“层B”
3.反转“层_B”中的颜色
4.高斯模糊“Layer_B”,半径大于要保留的最大特征。(模糊半径大于字母)
5.将“Layer_A”与“Layer_B”合并,其中
result=“Layer_A”*0.5+“Layer_B”*0.5

6.增加结果图像的对比度。
7.转售


在opengl中,它将以相同的方式完成(并且没有多层)

它不能很好地处理强/清晰阴影(显然),但它将消除由于页面弯曲等原因而产生的巨大平滑阴影

该技术(高通滤波器)经常用于制作无缝纹理,您应该能够通过google(GIMP无缝纹理高通或GIMP高通)找到一些此类教程和其他信息

顺便说一句,如果你想提高“可读性”,那么你可能想保持它的灰度(同时提高对比度),而不是将它转换为“黑白”(1位颜色)。尖锐的字母边缘使文本更难阅读。

谢谢您的帮助

最后,我选择了一种基本的方法。
取附近8个像素的样本,确定最大值和最小值。确定局部阈值(最大-最小值)。然后

smooth=dot(vec3(1.0/3.0),smoothstep(currentMin,currentMax,p11).rgb);
平滑=(本地阈值<阈值)?1.0:平滑;
返回向量4(平滑,平滑,平滑,1);
这并不能很好地显示黑暗和光明区域中的文本,这是理想的,但它很好地清理了光明区域中的文本


Mike

您想使用OpenGL GLSL着色器执行该任务还是?当问题正文中从未提到OpenGL时,很难说仅凭OpenGL标签来判断。嗨,我在iOS和GLSL过滤器上使用OpenGL ES。我上面描述的算法是一个内核例程。很抱歉造成混淆。我已经添加了一个更好的例子来描述正在发生的事情。我可以增强文本,但在没有文本的区域,这种简单的阈值设置会产生斑点噪声(图像左下角)。如果将阈值向后卷起,则会丢失较暗区域(右下角)中的文本。
smooth = dot(vec3(1.0/3.0), smoothstep(currentMin, currentMax, p11).rgb);
smooth = (localthreshold < threshold) ? 1.0 : smooth;
return vec4(smooth, smooth, smooth, 1);