Spaces:
Runtime error
Runtime error
File size: 2,134 Bytes
f60665f e2b973a f60665f fee4bd9 f60665f eb59450 e2b973a f60665f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
import random
import matplotlib.pyplot as plt
import numpy as np
import streamlit as st
def bul_image_maker(height: int, width: int, times: int, status_area) -> None:
"""
ランダム + 累積和で画像を作って表示する
args:
height (int): 画像の縦サイズ
width (int): 画像の横サイズ
times (int): 累積和の計算を行う回数。数を増やすほどランダム性の高い画像となる
return: None
"""
H, W, N = (height, width, 256 // times)
coef_list = [random.choice([-1, 1]) for i in range(times)]
im = np.zeros((height, width))
for time in range(times):
status_area.write(f"{time+1}/{times}")
H_start = random.randint((random.randint(1, H - 3)), H - 2)
H_end = H_start
W_start = random.randint(random.randint(1, W - 3), W - 2)
W_end = W_start
ABCD = []
for i in range(N):
ABCD.append(
[
random.randint(1, H_start),
random.randint(1, W_start),
random.randint(H_end, H),
random.randint(W_end, W),
]
)
Z = [[0] * (W + 2) for i in range(H + 2)] # Z = [[0] * (W+1)] * H だとダメっぽい
answer = [[0] * (W + 2) for i in range(H + 2)]
for i in range(N):
A, B, C, D = ABCD[i][0], ABCD[i][1], ABCD[i][2], ABCD[i][3]
Z[A][B] += 1 * coef_list[time]
Z[C + 1][D + 1] += 1 * coef_list[time]
Z[A][D + 1] -= 1 * coef_list[time]
Z[C + 1][B] -= 1 * coef_list[time]
# 横
for i in range(1, H + 1):
for j in range(1, W + 1):
answer[i][j] = answer[i][j - 1] + Z[i][j]
# 横
for i in range(1, W + 1):
for j in range(1, H + 1):
answer[j][i] = answer[j - 1][i] + answer[j][i]
im += np.array(answer)[1:-1, 1:-1]
im = im + (np.max(im) - np.min(im))
im = im * (255 / np.max(im))
im = im / np.max(im)
plt.axis("off")
plt.imshow(im)
return im
|