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

Randomly Generate Synthetic Noise in an Image Text Document

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

清洁图片示例:

添加合成噪声后:

如何随机得到如上所示的图片?

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

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

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)

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

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

  1. 论文背景
  2. 脏纸背景
  3. 染色纸背景

应该可以解决问题。

根据您需要多少种不同的模式,您可能希望自动抓取网络(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 扩充的文本图像叠加,这已深入介绍 here 在 SO.

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

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

干净的图像可以覆盖在不同的纸张纹理上、染色、用铅笔或荧光笔标记、折叠等。我们支持大量不同的增强,每一种都提供了对效果程度的大量控制。我最近写了 a brief intro to the library that has a couple of sample images, and there's a post here 关于如何设置 Augraphy 管道以生成范围广泛的这些效果。

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

  1. 已经用印刷机印刷到不同种类的纸上,
  2. 用铅笔画一些字,
  3. 有穿孔。
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.

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