首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何最好地逼近局部阈值opengl函数

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

Stack Overflow用户
提问于 2011-12-29 01:03:41
回答 2查看 666关注 0票数 4

我想拍一些文字的照片,使文本更容易阅读。棘手的部分是,最初的照片可能有黑暗区域和光区域,我想要opengl的功能,以增强所有这些区域的文本。

下面是一个例子。最上面的是原始图像。底部是处理过的图像。

编辑后,我添加了一个更好的例子图片正在发生什么。我能够增强文本,但在我没有文本的领域,这种简单的阈值处理会产生斑点噪声(图像左下角)。如果回退阈值,则会在较暗的区域(右下角)丢失文本。

目前,处理后的图像只接收一些文本,而不是所有文本。我使用的最初算法非常简单:-在当前像素周围采样8个像素(距离约4-5的像素似乎工作得最好)--从该示例中找出最轻和最暗的像素--如果当前像素更接近最暗的阈值,则将其变为黑色,反之亦然。

这似乎对周围的文本非常有效,但当涉及到非文本时,它提供了一个非常嘈杂的图像(即使我提供了一个初始的拒绝阈值)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-31 21:04:03

谢谢你的帮助。

最后,我选择了一种相当基本的方法。

采集附近8个像素的样本,确定最大值和最小值。测定局部阈值(max - min)。然后

代码语言:javascript
运行
复制
smooth = dot(vec3(1.0/3.0), smoothstep(currentMin, currentMax, p11).rgb);
smooth = (localthreshold < threshold) ? 1.0 : smooth;
return vec4(smooth, smooth, smooth, 1);

这并不能很好地显示文本在黑暗和光线区域,这是理想的,但它很好地清洁了文本在较轻的区域。

麦克

票数 1
EN

Stack Overflow用户

发布于 2011-12-30 05:51:03

在将其作为程序实现之前,您可能需要在GIMP或其他编辑器中拍摄源照片并播放它,看看您能做些什么。

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

这是如何在图像编辑器(手动,没有“高通”过滤器插件):

"Layer_B"

  • Invert

  • 将图像转换为灰度,并将其保存到"layer_A“

  • 中,将”layer_A“复制为"Layer_B"

  • Gaussian中模糊的"Layer_B”颜色,其半径大于您希望保留的最大功能。(模糊半径大于字母)

  • 将"Layer_A“与"Layer_B”合并,在结果图像中Layer_A与Layer_B形成对比。

  • 运行阈值。

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

它不会很好地工作在强大/清晰的阴影(显然),但它将消灭巨大的平滑阴影,因为页面弯曲,等等。

该技术(高通过滤器)经常用于制作无缝纹理,您应该能够找到几个这样的教程和谷歌(GIMP无缝纹理高通或GIMP高通)的附加信息。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8663004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档