web-dev-qa-db-ja.com

PILでピクセルノイズを作成するPython

以下の画像のように、ノイズとテキストが含まれる画像のトレーニングデータを生成しようとしています: Example Image 適切なサイズのテキストで画像を生成する方法を理解しましたが、ノイズを生成する方法を理解できません。最初はガウシアンノイズが正しいアプローチだと思いましたが、それは正しい種類のノイズではないように見えました。

from PIL import Image, ImageDraw, ImageFont
import numpy


img = Image.new('RGB', (250, 50), color = 'white')
fnt = ImageFont.truetype('/Library/Fonts/Arial.ttf', 36)
d = ImageDraw.Draw(img)
d.text((62,5), "3H1339", font=fnt, fill=(0,0,0))
img.save('imagetext.png')
4
Pablo Escobar

これがPython PIL/PillowバージョンのImageMagickの答えで私がやっていたことの一種です)。白色のキャンバスを使用して、描画するすべての円のベースとなるランダムなRGBカラーを生成しますが、ちょっとしたバリエーションを使用して、さらに面白くしています。次に、ランダムな場所にランダムなサイズのランダムな数の円を描画し、それらをぼかして、テキストを追加します。

#!/usr/bin/env python3

from PIL import Image, ImageDraw, ImageFont, ImageFilter
import numpy
from random import randint, seed

# Create white canvas and get drawing context
w, h = 250, 50
img  = Image.new('RGB', (w, h), color = 'white')
draw = ImageDraw.Draw(img)

# Let's have repeatable, deterministic randomness
seed(37)

# Generate a basic random colour, random RGB values 10-245
R, G, B = randint(10,245), randint(10,245), randint(10,245),

# Draw a random number of circles between 40-120
cmin = randint(50, 70)
cmax = randint(90,120)
for _ in range(cmin,cmax):
   # Choose RGB values for this circle, somewhat close (+/-10) to basic RGB
   r = R + randint(-10,10)
   g = G + randint(-10,10)
   b = B + randint(-10,10)
   diam = randint(5,11)
   x, y = randint(0,w), randint(0,h)
   draw.ellipse([x,y,x+diam,y+diam], fill=(r,g,b))

# Blur the background a bit
res = img.filter(ImageFilter.BoxBlur(3))

# Load font and draw text
draw = ImageDraw.Draw(res)
fnt = ImageFont.truetype('/Library/Fonts/Arial.ttf', 36)
draw.text((62,5), "3H1339", font=fnt, fill=(0,0,0))

# Save result
res.save('result.png')

enter image description here

0
Mark Setchell