我想拍一些文字的照片,使文本更容易阅读。棘手的部分是,最初的照片可能有黑暗区域和光区域,我想要opengl的功能,以增强所有这些区域的文本。
下面是一个例子。最上面的是原始图像。底部是处理过的图像。
编辑后,我添加了一个更好的例子图片正在发生什么。我能够增强文本,但在我没有文本的领域,这种简单的阈值处理会产生斑点噪声(图像左下角)。如果回退阈值,则会在较暗的区域(右下角)丢失文本。
目前,处理后的图像只接收一些文本,而不是所有文本。我使用的最初算法非常简单:-在当前像素周围采样8个像素(距离约4-5的像素似乎工作得最好)--从该示例中找出最轻和最暗的像素--如果当前像素更接近最暗的阈值,则将其变为黑色,反之亦然。
这似乎对周围的文本非常有效,但当涉及到非文本时,它提供了一个非常嘈杂的图像(即使我提供了一个初始的拒绝阈值)。
我修改了这个算法,假设文本总是接近黑色。这提供了上面的底部图像,但再次我无法提取所有的文本功能,我想。
发布于 2011-12-31 21:04:03
谢谢你的帮助。
最后,我选择了一种相当基本的方法。
采集附近8个像素的样本,确定最大值和最小值。测定局部阈值(max - min)。然后
smooth = dot(vec3(1.0/3.0), smoothstep(currentMin, currentMax, p11).rgb);
smooth = (localthreshold < threshold) ? 1.0 : smooth;
return vec4(smooth, smooth, smooth, 1);
这并不能很好地显示文本在黑暗和光线区域,这是理想的,但它很好地清洁了文本在较轻的区域。
麦克
发布于 2011-12-30 05:51:03
在将其作为程序实现之前,您可能需要在GIMP或其他编辑器中拍摄源照片并播放它,看看您能做些什么。
处理阴影的一种方法是在解析前运行高通滤波器。
这是如何在图像编辑器(手动,没有“高通”过滤器插件):
"Layer_B"
在opengl中,它将以相同的方式完成(并且没有多个层)。
它不会很好地工作在强大/清晰的阴影(显然),但它将消灭巨大的平滑阴影,因为页面弯曲,等等。
该技术(高通过滤器)经常用于制作无缝纹理,您应该能够找到几个这样的教程和谷歌(GIMP无缝纹理高通或GIMP高通)的附加信息。
顺便说一句,如果你想提高“可读性”,那么你可能想保持灰度(同时改善对比度),而不是把它转换成“黑白”(1位颜色)。锋利的字母边缘使文本更难阅读。
https://stackoverflow.com/questions/8663004
复制相似问题