영상처리 Chap02_샘플링/푸리에변환
업샘플링
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from PIL import Image import matplotlib.pyplot as plt im = Image.open("./images/clock.jpg") im2 = im.resize((im.width*5, im.height*5), Image.BICUBIC) plt.figure(figsize=(20, 10)) plt.subplot(1,2,1) plt.imshow(im) plt.subplot(1,2,2) plt.imshow(im2, cmap='gray') |
다운샘플링
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from PIL import Image import matplotlib.pyplot as plt im = Image.open("./images/clock.jpg") im2 = im.resize((im.width//5, im.height//5), Image.BICUBIC) plt.figure(figsize=(10, 5)) plt.subplot(1,2,1) plt.imshow(im) plt.subplot(1,2,2) plt.imshow(im2, cmap='gray') |
고속 푸리에 변환(FFT; Fast Fourier Transform)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import numpy as np import matplotlib.pyplot as plt from PIL import Image from scipy import fftpack as fp im = np.array(Image.open('./images/rhino.jpg').convert('L')) plt.figure(figsize=(10,5)) plt.subplot(121) plt.imshow(im, cmap='gray') plt.subplot(122) freq = fp.fft2(im) # FFT 수행 freq = fp.fftshift(freq) # shift 수행 plt.imshow((20*np.log10( 0.1 + freq)).real.astype(int), cmap='gray') plt.show() |
FFT 변환(1) -> 주파수(2) -> 저주파 제거(3) -> IFFT 변환(4)
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 |
import numpy as np import matplotlib.pyplot as plt from PIL import Image from scipy import fftpack as fp im = np.array(Image.open('./images/rhino.jpg').convert('L')) plt.figure(figsize=(15,12)) plt.subplot(221) plt.imshow(im, cmap='gray') # (1) 원본 plt.subplot(222) freq = fp.fft2(im) # FFT 수행 freq1 = np.copy(freq) freq2 = fp.fftshift(freq1) # shift 수행 plt.imshow((20*np.log10( 0.1 + freq2)).real.astype(int), cmap='gray') # (2) FFT변화후 주파수 plt.subplot(223) (w, h) = freq.shape half_w, half_h = w//2, h//2 # 중심 좌표 # 20 × 20 크기 저주파 영역 계수값 제거 freq2[half_w-10:half_w+11, half_h-10:half_h+11] = 0 plt.imshow( (20 * np.log10( 0.1 + freq2)).real.astype(int), cmap='gray') # (3) 저주파 제거후 주파수 plt.subplot(224) im1 = fp.ifft2(fp.ifftshift(freq2)) im2 = np.clip(im1.real,0,255) # IFFT후 화소 값 클램핑 수행 plt.imshow(im2, cmap='gray') # (4) IFFT 후 영상 |
FFT 변환(1) -> 주파수(2) -> 주파 제거(3) -> IFFT 변환(4)
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 |
import numpy as np import matplotlib.pyplot as plt from PIL import Image from scipy import fftpack as fp im = np.array(Image.open('./images/rhino.jpg').convert('L')) plt.figure(figsize=(15,12)) plt.subplot(221) plt.imshow(im, cmap='gray') # (1) 원본 plt.subplot(222) freq = fp.fft2(im) # FFT 수행 freq1 = np.copy(freq) freq2 = fp.fftshift(freq1) # shift 수행 plt.imshow((20*np.log10( 0.1 + freq2)).real.astype(int), cmap='gray') # (2) FFT변화후 주파수 plt.subplot(223) (w, h) = freq.shape half_w, half_h = w//2, h//2 # 중심 좌표 # 20 × 20 크기 저주파 영역 계수값 제거 freq2_low = np.copy(freq2) freq2_low[half_w-10:half_w+11, half_h-10:half_h+11] = 0 freq2 -= freq2_low plt.imshow( (20 * np.log10( 0.1 + freq2)).real.astype(int), cmap='gray') # (3) 고주파 제거후 주파수 plt.subplot(224) im1 = fp.ifft2(fp.ifftshift(freq2)) im2 = np.clip(im1.real,0,255) # IFFT후 화소 값 클램핑 수행 plt.imshow(im2, cmap='gray') # (4) IFFT 후 영상 |