from PIL import Image import matplotlib.pyplot as plt import numpy as np from scipy import ndimage # Đọc ảnh img = Image.open("test.jpg") # ========================= # 1. Vẽ Histogram # ========================= gray = img.convert("L") gray_array = np.array(gray) plt.figure("Histogram") plt.hist(gray_array.ravel(), bins=256, range=[0,256]) plt.title("Histogram") plt.xlabel("Muc xam") plt.ylabel("So pixel") plt.show() # ========================= # 2. Giảm độ sáng # MSSV: 2023603389 # 7 số cuối: 3603389 # Tổng = 32 # ========================= img_array = np.array(img) dark = img_array - 32 dark = np.clip(dark, 0, 255) dark_img = Image.fromarray(dark.astype(np.uint8)) plt.figure("Giam do sang") plt.imshow(dark_img) plt.axis("off") plt.show() # ========================= # 3. Phép mở ảnh (OPEN) # erosion -> dilation # ========================= binary = gray_array > 128 erosion = ndimage.binary_erosion(binary) opening = ndimage.binary_dilation(erosion) plt.figure("OPEN") plt.imshow(opening, cmap="gray") plt.axis("off") plt.show() # ========================= # 4. Phát hiện biên Canny # ========================= from skimage import feature edges = feature.canny(gray_array, sigma=1) plt.figure("Canny") plt.imshow(edges, cmap="gray") plt.axis("off") plt.show()