sami1220
@sami1220

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

pythonで様々な様々な線を描画した画像を生成したい

解決したいこと

スクリーンショット 2023-03-01 23.19.28.png

参考画像のような画像を、pythonで生成したいのですが、ライブラリや使い方など、アドバイスいただけると幸いです。

ちなみに、以下のような条件で考えております。

  • 線の角度は0から180度まで任意の角度を指定したい
  • 同じ角度でも、ノイズのパターンを変更し、5枚程度生成したい。
  • shape:128, 128

パーリンノイズをベースにした方法などもありましたが、以下のようにパーリンノイズのベース画像生成まではできましたが、その先どのように加工すれば良いかわからず止まっております。。。。
全然別の手法で問題ないので、最初に貼っている画像のようなものを生成したいです。
どなたか、お力を貸していただけると幸いです。
よろしくお願いします。

import cv2
import numpy as np
from perlin_noise import PerlinNoise

# parameters
height, width = 128, 128
num_nodes = np.random.randint(2, 49)  #nodes
num_base_images = 30  # base_images_count
num_rotate_images = 10  # rotated images
sigma = 1.5  

# Perlin noise生成
noise = PerlinNoise(octaves=num_nodes, seed=1)

# Image generation of vertical patterns
stripe_images = []
for _ in range(np.random.randint(3, 6)):
    stripe = np.zeros((height, width), dtype=np.float32)
    for i in range(height):
        for j in range(width):
            i_hei = i / height
            j_wid = j / width
            stripe[i, j] = noise([i_hei, j_wid])###
    stripe = cv2.normalize(stripe, None, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX)
    stripe_images.append(stripe)
plt.imshow(stripe_images[0], cmap='gray')
plt.title('base_images')
plt.show()

5e506a5b-5e58-435a-affb-1d4459d5c964.png

0

2Answer

パーリンノイズの画像をアフィン変換(せん断)すればそれっぽくなりそうな気がします。

0Like

Gimpで確認した感じだと
・ずらしフィルタ適応
image.png
・ガウスフィルタ適応
image.png

で似た雰囲気が出来たかなと思われます。
image.png

回転は大きめに作っておいて画像を回転させた後、トリミングすれば実現できそう。
OpenCVでずらしフィルタのようなものが実現できれば後はOpenCV内の機能で実現できそう。
ずらしの理論的には以下のような話なんだと思うけれど・・・
https://lp-tech.net/articles/ENy3C

0Like

Comments

  1. @sami1220

    Questioner


    @Cartelet
    アフィン変換(せん断)で元のノイズと合成 → 繰り返す。
    これでそれっぽい加工はできそうです。ありがとうございます。参考にします。

    @bunaImageさん
    opencvで色々加工してましたが、この方法は知りませんでした。。
    ありがとうございます。ざっと触ってみた感じ、近い加工はできそうなので試してみたいと思います。

Your answer might help someone💌