앨리어싱이 발생한 이미지를 생성해 봅니다.
서론
아날로그 신호를 디지털 신호로 변환할 때 샘플링 주파수 $f_s$의 1/2 크기의 주파수까지만 관측할 수 있습니다.
이 주파수를 나이퀴스트 주파수라고 하지만 이 나이퀴스트 주파수를 초과하는 진동은 저주파수로 처리됩니다.
나이퀴스트 주파수를 넘은 고주파의 진동을 저주파수로서 처리해 버리는 것을 앨리어싱(폴딩 노이즈)이라고 부릅니다.
$x_0$에서 $x_{N-1}$까지의 숫자가 $N$인 데이터의 이산 푸리에 변환을 고려하면,
C_k = \frac{1}{N}\sum_{m=0}^{N-1} x_me^{-i\frac{2\pi km}{N}}
k = 0, 1, 2, …, N-1
k에 해당하는 주파수는
f_k = \frac{kf_s}{N}
됩니다.
$k$는 $(N-1)$까지 존재하기 때문에, $f_{N-1}=\frac{(N-1)f_s}{N}$가 되어, $f_s/2$의 나이퀴스트 주파수를 넘는 진동까지 표현할 수 있을 것 같습니다만…,$C_k$와 $C_{N-k}$는 서로 공역인 복소수인 것이 알려져 있습니다.
C_k = C_{N-k}^*
그 때문에, $f_s/2$를 중앙으로서, 폴드가 발생합니다. 오해를 두려워하지 말고, $C_{N-k}$의 주파수에 해당하는 파는 $C_k$의 주파수의 파로서 처리되어 버립니다.
이미지 생성
numpy를 사용하여 고해상도 이미지(5000×5000)를 생성합니다. 이것을 의사적으로 아날로그 신호로 간주합니다.
import numpy as np
import matplotlib.pyplot as plt
#画像のサイズを指定
img_size_origin = 5000
#画像として零行列
img = np.zeros([img_size_origin, img_size_origin])
#画像の画素の値はy座標に依存
y = np.arange(img_size_origin)
#周期100画素
amp = np.sin(2*np.pi*0.01*y)
for i in range(img_size_origin):
img[:, i] = amp
plt.imshow(img, cmap="gray")
plt.show()
이렇게 하면 50개의 줄무늬가 있는 이미지가 생성됩니다.
50개의 줄무늬가 있으므로 전체 이미지를 1주기로 간주하면 50Hz의 파도가 존재하게 됩니다.
이 이미지에서 [comp×comp]당 1픽셀만 추출하여 새로운 이미지를 생성합니다.
comp = 5인 경우, 추출하는 픽셀은 [3 + 5n, 3 + 5m]의 좌표가 됩니다. (n>=0, m>=0)
comp = 99
#出力の画像サイズを計算
img_size = img.shape[0]//comp
#出力の画像
img_comp = np.zeros([img_size, img_size])
#[comp×comp]の画素のうち、中央の画素のみを抜き出し
for i in range(img_size):
for j in range(img_size):
img_comp[i, j] = img[(i*comp) + (comp//2), (j*comp) + (comp//2)]
plt.imshow(img_comp, cmap="gray")
plt.show()
plt.plot(img_comp[:, 0])
plt.show()
comp가 99이면
50Hz의 파도를 잘 관측할 수 없어 0.5Hz의 파도가 되어 버렸습니다.
comp가 98이면
50Hz의 파도를 잘 관측할 수 없고, 1Hz의 파도가 되어 버렸습니다.
comp가 96이면
50Hz의 파도를 잘 관측할 수 없어, 2Hz의 파도가 되어 버렸습니다.
끝에
이상한 이미지를 많이 할 수 있을 것 같다 (작은 느낌)
Reference
이 문제에 관하여(앨리어싱이 발생한 이미지를 생성해 봅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shushin/items/e4a1845a2917ee23bcc9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)