You can accomplish this with the Augraphy library. Disclosure: I'm a maintainer on the project.
Clean images can be overlaid onto different paper textures, stained, marked with pencil or highlighter, folded, and so on. We support a ton of different augmentations, and each offers a lot of control over the degree of effect. I recently wrote a brief intro to the library that has a couple of sample images, and there's a post here about how to set up an Augraphy pipeline to generate a wide range of these effects.
Here's an example pipeline, using the high quality version of your clean image from the NoisyOffice dataset. This pipeline will produce images that:
- have been printed with a printing press onto a different kind of paper,
- have a few pencil lines drawn through some words, and
- have holes punched through.
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)
And here's the result.
Feel free to post a GitHub Issue if you need any help or would like to make a suggestion.