pip install pillow matplotlib numpy scipy from PIL import Image import matplotlib.pyplot as plt import numpy as np from scipy import ndimage # ===================================== # Đọc ảnh # ===================================== img = Image.open("test.jpg") # Chuyển sang ảnh xám gray = img.convert("L") gray_array = np.array(gray) gray_float = gray_array.astype(np.float32) # ===================================== # 1. Histogram # ===================================== plt.figure(figsize=(6,4)) plt.hist(gray_array.ravel(), bins=256, range=(0,256)) plt.title("Histogram") plt.xlabel("Muc xam") plt.ylabel("So pixel") plt.show() # ===================================== # 2.1. Tăng độ tương phản # ===================================== contrast = np.clip( 1.5 * (gray_float - 128) + 128, 0, 255 ).astype(np.uint8) # ===================================== # 2.2. Giảm độ tương phản # ===================================== low_contrast = np.clip( 0.5 * (gray_float - 128) + 128, 0, 255 ).astype(np.uint8) # ===================================== # 3.1. Mean Filter # ===================================== mean_filter = ndimage.uniform_filter( gray_array, size=3 ) # ===================================== # 3.2. Median Filter # ===================================== median_filter = ndimage.median_filter( gray_array, size=3 ) # ===================================== # 4.1. Prewitt # ===================================== prewitt_x = ndimage.prewitt( gray_float, axis=1 ) prewitt_y = ndimage.prewitt( gray_float, axis=0 ) prewitt = np.hypot( prewitt_x, prewitt_y ) if prewitt.max() > 0: prewitt = ( prewitt / prewitt.max() ) * 255 prewitt = prewitt.astype(np.uint8) # ===================================== # 4.2. Laplacian # ===================================== laplace = ndimage.laplace( gray_float ) laplace = np.abs(laplace) if laplace.max() > 0: laplace = ( laplace / laplace.max() ) * 255 laplace = laplace.astype(np.uint8) # ===================================== # Hiển thị kết quả # ===================================== plt.figure(figsize=(15,10)) plt.subplot(2,3,1) plt.imshow(contrast, cmap="gray") plt.title("Tang tuong phan") plt.axis("off") plt.subplot(2,3,2) plt.imshow(low_contrast, cmap="gray") plt.title("Giam tuong phan") plt.axis("off") plt.subplot(2,3,3) plt.imshow(mean_filter, cmap="gray") plt.title("Mean Filter") plt.axis("off") plt.subplot(2,3,4) plt.imshow(median_filter, cmap="gray") plt.title("Median Filter") plt.axis("off") plt.subplot(2,3,5) plt.imshow(prewitt, cmap="gray") plt.title("Prewitt") plt.axis("off") plt.subplot(2,3,6) plt.imshow(laplace, cmap="gray") plt.title("Laplacian") plt.axis("off") plt.tight_layout() plt.show()