今天朋友给了一些拍照的文字图像,由于噪音以及JPG编码等因素的影响啊,在线条、文字等边缘的部位放大后查看可以看到有明显的彩色的斑点,这个对于后续的识别和处理都是不利的,因此,需要在进一步处理前把他们给去除掉,这里经过测试提出一个简单的算法,经过测试,还是有一定的效果的。
原图放大 Deinterlace处理后放大
如上图所示,可以看到,在黑色线条和文字周边存在彩色 的色斑,要想办法尽量把这些彩色色斑去除,并且不影响整体的视觉效果。
这个嘛,首先得看看我现有的算法是否有比较合适的结果的,找来找去,也就看到有个Deinterlace(去除交错)有点意思,但是观察呢发现,有几个问题,一个是整体变得模糊了一些,第二呢,就是一些不需要改变的区域也改变了。
这里提出一个改进的思路,就是我们观察,这类图像啊,周边的彩色噪点他的饱和度都比较高,而正常位置差异比较小,因此,可以通过饱和度的值来初步判断这个要处理的区域。
饱和度呢不要直接拿那个HSL模型里直接计算饱和度的公式去处理,而是只要计算RGB像素的最大值和最小值的差异,如果直接用差异大于某个阈值,判定那些区域需要处理的话,结果又会有很多过渡不自然的地方,因此,想到一种方法是用这个差异做权重,
并且为了可调节效果,还可以把这个差异按照参数在放大。
即类似于下面的结果:
Diff = max(b,g,r)-min(b,g,r);
W = 255 - Diff * cof;
if (W < 0) W = 0;
InvW = 255 - W;
Result = Src * W + Deinterlace * InvW;
Cof = 1 Cof = 2
这种方法对于倾斜的彩色斑点的效果就要稍微弱一些,但是依旧是个不错的解决方案,当然,如果彩色斑点的宽度超过3个像素,估计就要不好弄了。
本文Demo下载地址: https://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar,本算法位于Detection(检测相关)--》彩色斑点去除 菜单下,里面的所有算法都是基于SSE实现的。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |