在图像文本文档中随机生成合成噪声

Posted

技术标签:

【中文标题】在图像文本文档中随机生成合成噪声【英文标题】:Randomly Generate Synthetic Noise in an Image Text Document 【发布时间】:2020-03-15 16:15:31 【问题描述】:

我正在对脏图像文档进行去噪处理。我想创建一个数据集,其中将添加合成噪声来模拟真实世界的杂乱伪影。模拟污垢可能包括咖啡渍、褪色的太阳斑、折角的书页、大量的皱纹等等。我该怎么做?

样本清洁图像:

添加合成噪声后:

如何随机实现上图?

【问题讨论】:

你的原图是哪张?并且文字似乎不会随着纸张变形而变形,这不太可能对吗? @venkatakrishnan -> 请查看我的更新帖子 :) 也许您正在寻找this? 与@nathancy 回答一起,您可以使用opencv 创建一个简单的过滤器,以屏蔽黑色像素(文本),添加一些nathan 提到的增强并将文本放回原处。您可以将其编写为 keras 中的自定义增强功能,以随机自动生成图像。或者您可以自己随机生成并使用整个集合。 【参考方案1】:

建议将干净的图像与噪声背景合并。虽然这种方法不支持纸张变形。

以下代码可能会有所帮助:

import numpy as np
import cv2

# Load both clean and noisey background images in grayscale
img_clean = cv2.imread('img_clean1.jpg',0)
img_bg = cv2.imread('img_noisy_bg1.jpg',0)

# Make clean image binary
img_clean , thr = cv.threshold(img_clean , 10, 255, cv.THRESH_BINARY)

# Blend clean with the noisy BG
res = cv2.bitwise_and(img_bg, img_bg, mask=img_clean)

# Make it more natural!
res = cv.blur(res, (3,3))

cv2.imshow('image', res)
cv2.waitKey(0)

【讨论】:

您知道如何根据纸张变形(例如波浪形)使文本变形吗?【参考方案2】:

S C R A P E - B A C K G R O U N D - I M A G E S

在我看来,引入真实世界噪音的明显方法是引入真实世界噪音。因此,您可以在网上搜索纸张背景 (exemplary link): 正在搜索:

    纸张背景 脏纸背景 彩色纸背景

应该做的伎俩。

根据您需要多少不同的模式,您可能希望自动抓取网络(selenium python 包支持您)。

O V E R L A Y - B A C K G R O U N D - W I T H - Y O U R - T E X T

接下来,根据您选择的编程语言,您应该能够将背景图像与您想要为 python 和 opencv 增强的文本图像覆盖在一起,这在 SO 上的 here 进行了深入介绍。

最后,您还可以使用Augmentor 包来进一步增强和扩充您的数据。

【讨论】:

【参考方案3】:

您可以使用Augraphy library 完成此操作。披露:我是该项目的维护者。

干净的图像可以叠加到不同的纸张纹理、染色、用铅笔或荧光笔标记、折叠等等。我们支持大量不同的增强,每种增强都提供了对效果程度的大量控制。我最近写了a brief intro 到有几个示例图像的库中,还有a post here 关于如何设置Augraphy 管道以生成各种这些效果。

这是一个示例管道,使用来自NoisyOffice 数据集的干净图像的高质量版本。此管道将生成以下图像:

    已用印刷机印刷到不同类型的纸张上, 在一些单词上画几条铅笔线,然后 打孔。
from augraphy import *
import cv2


img = cv2.imread("Fontfre_Clean_TR.png")

ink = [Letterpress(layer="ink", p=1),
       Strikethrough(layer="ink",
                     num_lines_range=(2, 7),
                 strikethrough_length_range=(0.2, 0.4),
                 strikethrough_thickness_range=(1, 2),
                     p=1)]

paper = [PaperFactory(p=1)]

post = [BindingsAndFasteners(layer="post",
                             ntimes=5,
                             effect_type="punch_holes",
                             edge="left",
                             p=1)]

pipeline = AugraphyPipeline(ink,paper,post)

complete = pipeline.augment(img)

cv2.imshow("augmented", complete['output'])
cv2.waitKey(1000)

还有here's the result。

如果您需要任何帮助或想提出建议,请随时发布GitHub Issue。

【讨论】:

以上是关于在图像文本文档中随机生成合成噪声的主要内容,如果未能解决你的问题,请参考以下文章

如何从文本文档中预测连续值(时间)? [关闭]

通过添加跨度突出显示文本文档中的字符串

查找哈希集中每个单词在文本文档中出现的次数

使用 Java + 正则表达式从文本文档中提取 URL

我如何编写一种方法来“退格”文本文档中的一行

python 读取文本文档中的数据