소스 뷰어
import cv2, numpy as np, matplotlib.pyplot as plt

# 이미지 불러오기 (Grayscale로)
image = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE)

# 다양한 커널 사이즈 설정
kernel_sizes = [7, 21, 41]

# 서브플롯 크기 설정
cols = len(kernel_sizes) + 1  # 원본 이미지 포함
rows = 2  

# 서브플롯의 전체 크기 설정
plt.figure(figsize=(cols * 4, rows * 3))

# 원본 이미지 출력 (첫 번째 줄)
plt.subplot(rows, cols, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')

max_threshold = 30_000  # 최대 빈도수 설정 (클리핑)

# 블러링된 이미지와 히스토그램 출력
blurred_images = []
blurred_hists = []

for i, ks in enumerate(kernel_sizes):
    # 가우시언 블러 적용
    sigma = ks/3
    blurred_image = cv2.GaussianBlur(image, (ks, ks), sigma)
    blurred_images.append(blurred_image)

    # 블러링된 이미지 출력 (첫 번째 줄)
    plt.subplot(rows, cols, i + 2)
    plt.imshow(blurred_image, cmap='gray')
    plt.title(f'Gaussian Blurred Image ({ks}x{ks})')
    plt.axis('off')

    # 블러링된 이미지의 히스토그램 계산 및 클리핑
    blurred_hist = cv2.calcHist([blurred_image], [0], None, [256], [0, 256])
    blurred_hist[blurred_hist > max_threshold] = max_threshold
    blurred_hists.append(blurred_hist)

    # 블러링된 이미지의 히스토그램 출력 (두 번째 줄)
    plt.subplot(rows, cols, cols + i + 2)
    plt.plot(blurred_hist)
    plt.title(f'Histogram of Gaussian blurred image ({ks}x{ks})')
    plt.xlim([0, 256])
    plt.xlabel('Pixel Intensity')

# 원본 및 모든 블러링된 이미지의 히스토그램 비교

plt.subplot(rows, cols, cols + 1)
plt.title('Histogram Comparison')
plt.xlabel('Pixel Intensity')
plt.ylabel('Frequency')

for i, ks in enumerate(kernel_sizes):
    plt.plot(blurred_hists[i], label=f'{ks}x{ks} kernel')

plt.xlim([0, 256])
plt.legend()
plt.grid(True)

# 히스토그램 그래프 설정
# 레이아웃 조정 및 출력
plt.tight_layout()
plt.show()
No description has been provided for this image