Matplotlib 이미지 안티앨리어싱

Beginner

This tutorial is from open-source community. Access the source code

소개

이 튜토리얼에서는 Python 의 Matplotlib 을 사용하여 이미지의 안티앨리어싱 (antialiasing) 과정을 안내합니다. 안티앨리어싱은 이미지의 들쭉날쭉한 가장자리를 부드럽게 하고 왜곡을 줄이는 데 사용되는 기술입니다. 이 튜토리얼에서는 Matplotlib 을 사용하여 다양한 주파수 콘텐츠를 가진 450x450 픽셀 이미지를 생성합니다. 그런 다음, 고주파 데이터의 서브샘플링 (subsampling) 으로 인해 발생하는 모아레 패턴 (Moiré patterns) 을 안티앨리어싱을 사용하여 줄이는 방법을 보여주기 위해 이미지를 450 데이터 픽셀에서 125 픽셀 또는 250 픽셀로 서브샘플링합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 액세스하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화할 수 없습니다.

학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.

이미지 생성

먼저, NumPy 를 사용하여 다양한 주파수 콘텐츠를 가진 450x450 픽셀 이미지를 생성해야 합니다.

import matplotlib.pyplot as plt
import numpy as np

N = 450
x = np.arange(N) / N - 0.5
y = np.arange(N) / N - 0.5
aa = np.ones((N, N))
aa[::2, :] = -1

X, Y = np.meshgrid(x, y)
R = np.sqrt(X**2 + Y**2)
f0 = 5
k = 100
a = np.sin(np.pi * 2 * (f0 * R + k * R**2 / 2))
a[:int(N / 2), :][R[:int(N / 2), :] < 0.4] = -1
a[:int(N / 2), :][R[:int(N / 2), :] < 0.3] = 1
aa[:, int(N / 3):] = a[:, int(N / 3):]
a = aa

'nearest' 보간법 (Interpolation) 으로 이미지 서브샘플링

이제 'nearest' 보간법을 사용하여 이미지를 450 데이터 픽셀에서 125 픽셀 또는 250 픽셀로 서브샘플링합니다. 이는 서브샘플링되는 고주파 데이터가 어떻게 모아레 패턴을 유발할 수 있는지 보여줍니다.

fig, axs = plt.subplots(2, 2, figsize=(5, 6), layout='constrained')
axs[0, 0].imshow(a, interpolation='nearest', cmap='RdBu_r')
axs[0, 0].set_xlim(100, 200)
axs[0, 0].set_ylim(275, 175)
axs[0, 0].set_title('Zoom')

for ax, interp, space in zip(axs.flat[1:],
                             ['nearest', 'antialiased', 'antialiased'],
                             ['data', 'data', 'rgba']):
    ax.imshow(a, interpolation=interp, interpolation_stage=space,
              cmap='RdBu_r')
    ax.set_title(f"interpolation='{interp}'\nspace='{space}'")
plt.show()

'antialiased' 보간법 (Interpolation) 으로 이미지 서브샘플링

다음으로, 'antialiased' 보간법을 사용하여 이미지를 450 데이터 픽셀에서 125 픽셀 또는 250 픽셀로 서브샘플링합니다. 이는 안티앨리어싱 (antialiasing) 이 서브샘플링되는 고주파 데이터로 인해 발생하는 모아레 패턴을 줄이는 데 어떻게 사용될 수 있는지 보여줍니다.

fig, axs = plt.subplots(2, 2, figsize=(5, 6), layout='constrained')
axs[0, 0].imshow(a, interpolation='nearest', cmap='RdBu_r')
axs[0, 0].set_xlim(100, 200)
axs[0, 0].set_ylim(275, 175)
axs[0, 0].set_title('Zoom')

for ax, interp, space in zip(axs.flat[1:],
                             ['nearest', 'antialiased', 'antialiased'],
                             ['data', 'data', 'rgba']):
    ax.imshow(a, interpolation=interp, interpolation_stage=space,
              cmap='RdBu_r')
    ax.set_title(f"interpolation='{interp}'\nspace='{space}'")
plt.show()

'nearest' 보간법 (Interpolation) 으로 이미지 업샘플링

이제 'nearest' 보간법을 사용하여 이미지를 500 데이터 픽셀에서 530 렌더링된 픽셀로 업샘플링합니다. 이는 업샘플링 비율이 정수가 아닌 경우 이미지가 업샘플링될 때에도 모아레 패턴이 어떻게 발생할 수 있는지 보여줍니다.

fig, ax = plt.subplots(figsize=(6.8, 6.8))
ax.imshow(a, interpolation='nearest', cmap='gray')
ax.set_title("upsampled by factor a 1.048, interpolation='nearest'")
plt.show()

'antialiased' 보간법 (Interpolation) 으로 이미지 업샘플링

마지막으로, 'antialiased' 보간법을 사용하여 이미지를 500 데이터 픽셀에서 530 렌더링된 픽셀로 업샘플링합니다. 이는 더 나은 안티앨리어싱 (antialiasing) 알고리즘을 사용하면 모아레 패턴을 어떻게 줄일 수 있는지 보여줍니다.

fig, ax = plt.subplots(figsize=(6.8, 6.8))
ax.imshow(a, interpolation='antialiased', cmap='gray')
ax.set_title("upsampled by factor a 1.048, interpolation='antialiased'")
plt.show()

요약

이 튜토리얼에서는 Matplotlib 을 사용하여 이미지를 안티앨리어싱 (antialiasing) 하여 고주파 데이터의 서브샘플링 (subsampling) 으로 인한 모아레 패턴을 줄이는 방법을 배웠습니다. 우리는 다양한 주파수 콘텐츠를 가진 450x450 픽셀 이미지를 생성하고, 'nearest' 및 'antialiased' 보간법을 사용하여 이미지를 450 데이터 픽셀에서 125 픽셀 또는 250 픽셀로 서브샘플링했습니다. 또한 'nearest' 보간법을 사용하여 이미지를 업샘플링하는 경우에도 모아레 패턴이 발생할 수 있지만, 더 나은 안티앨리어싱 알고리즘을 사용하면 이러한 영향을 줄일 수 있음을 보여주었습니다.