Lab Introduction
- AWS experience: Beginner
- Time to complete: 20 minutes
- Cost to complete: Free Tier
- Services used: Google Colab
Giới thiệu về Lab
Bài thực hành này sẽ hướng dẫn mọi người cách tạo dữ liệu hình ảnh bị nhiễu để huấn luyện mô hình xử lý ảnh (ví dụ như autoencoder, denoising models).
🎯 Ứng dụng thực tế:
- Dùng để huấn luyện mô hình khử nhiễu ảnh (denoising autoencoder).
- Tạo thêm tập dữ liệu mở rộng khi gặp trường hợp tập dữ liệu bị mất cân bằng (Imbalanced Dataset) phục vụ học sâu.
1. Làm quen với Google Colab
Google Colab là dịch vụ đám mây miễn phí độc đáo được cung cấp bởi Google, phát triển từ Dự án Jupyter. Google Colab mang đến môi trường lập trình Python linh hoạt và dễ sử dụng cho cộng đồng AI. Ưu điểm của Google Colab bao gồm truy cập miễn phí, sử dụng GPU và TPU, tích hợp mượt mà với Google Drive.
Để sử dụng Colaboratory, bạn phải có tài khoản Google, sau đó truy cập Colaboratory bằng tài khoản của bạn vào được link: https://colab.research.google.com/
Dưới đây là các bước hướng dẫn bạn sử dụng Google Colab.
- Tạo thư mục trên Google Drive
Vì Colab được lưu trữ trên Google Drive, vì thế bạn nên gom những file Colab này vào cùng một thư mục, để tránh sau này lưu trữ và chia sẽ nhầm file và folder. Trong giao diện Google Drive bạn nhấn New
để tạo ra một Folder mới và đặt tên cho nó.

- Tạo Colab Notebook mới và đặt tên
Để tạo một Colab Notebook mới, bạn nhấp chuột phải => More
=> Colaboratory

Để đổi tên Notebook, bạn hãy nhấp vào tên tệp.
Sau đó mở file vừa tạo lên, bạn sẽ thấy giao diện như sau:
- Bạn double click vào Title (mặc định là Untitiled) và tiến hành đổi tên file.
2. Viết code triển khai step-by-step
1. Tải ảnh từ máy người dùng lên Colab
from google.colab import files
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import os
📌 Giải thích:
google.colab.files
: Thư viện hỗ trợ upload/download file giữa máy tính và Colab.PIL.Image
: Xử lý ảnh (mở, lưu, chuyển đổi định dạng).numpy
: Thư viện toán học xử lý dữ liệu mảng (như ảnh số).matplotlib.pyplot
: Vẽ biểu đồ và hiển thị ảnh.
uploaded = files.upload()
➡️ Mở giao diện để người dùng chọn và upload ảnh từ máy tính lên Colab.
filename = next(iter(uploaded))
➡️ Lấy tên file đầu tiên mà người dùng vừa upload (vì uploaded
là dict).
image = Image.open(filename).convert("RGB")
image_np = np.array(image) / 255.0
➡️ Mở ảnh và chuyển sang định dạng RGB (đảm bảo không phải đen trắng hoặc RGBA). ➡️ Chuyển ảnh sang numpy array và chuẩn hóa pixel về khoảng [0, 1] (phổ biến trong xử lý ảnh cho AI).
2. Hàm thêm nhiễu Gaussian
def add_noise(image_np, noise_level):
noise = np.random.normal(loc=0, scale=noise_level, size=image_np.shape)
noisy_image = image_np + noise
noisy_image = np.clip(noisy_image, 0, 1)
return (noisy_image * 255).astype(np.uint8)
📌 Giải thích:
- Hàm này thêm nhiễu Gaussian (nhiễu trắng) vào ảnh.
np.random.normal(...)
: Tạo mảng nhiễu với phân phối chuẩn có trung bình 0
và độ lệch chuẩn là noise_level
.image_np + noise
: Cộng nhiễu vào ảnh gốc.np.clip(...)
: Đảm bảo giá trị pixel không vượt ngoài [0, 1].* 255
và .astype(np.uint8)
: Chuyển ảnh về lại định dạng gốc (0-255 và kiểu uint8
).
3. Tạo và lưu 10 ảnh nhiễu (có thể tạo nhiều hơn hoặc ít hơn)
os.makedirs("noisy_images", exist_ok=True)
num_images = 10
noise_levels = np.linspace(0.2, 0.6, num_images) # hoặc dùng np.random.uniform()
noisy_image_list = []
📌 Giải thích:
- Tạo thư mục
"noisy_images"
để lưu ảnh bị nhiễu. num_images
: Số lượng ảnh nhiễu sẽ tạo.np.linspace(...)
: Tạo 10 giá trị nhiễu đều từ 0.2 đến 0.6.- 📝 Lựa chọn hợp lý để có nhiều mức độ nhiễu.
noisy_image_list
: Danh sách chứa các ảnh nhiễu để hiển thị sau.
for i in range(num_images):
noisy_img = add_noise(image_np, noise_levels[i])
noisy_image_list.append(noisy_img)
Image.fromarray(noisy_img).save(f"noisy_images/noisy_image_{i+1}.png")
➡️ Duyệt qua từng mức nhiễu:
- Gọi hàm
add_noise
để tạo ảnh bị nhiễu. - Lưu ảnh vào danh sách để hiển thị.
- Ghi ảnh ra file với tên
noisy_image_1.png
, ..., noisy_image_10.png
.
4. Hiển thị toàn bộ ảnh nhiễu để review
plt.figure(figsize=(20, 5))
for i, img in enumerate(noisy_image_list):
plt.subplot(2, 5, i + 1)
plt.imshow(img)
plt.title(f"Noise level: {noise_levels[i]:.2f}")
plt.axis("off")
plt.tight_layout()
plt.show()
📌 Giải thích:
- Tạo khung ảnh có kích thước rộng (
20x5
inch). - Vẽ 10 ảnh bị nhiễu trong lưới 2 hàng x 5 cột.
plt.imshow(img)
: Hiển thị ảnh.plt.title(...)
: Ghi mức độ nhiễu phía trên ảnh.plt.axis("off")
: Ẩn trục tọa độ.plt.tight_layout()
: Tự động căn chỉnh bố cục không bị đè.plt.show()
: Hiển thị toàn bộ ảnh.
Full code:
# 1. Tải ảnh từ máy người dùng lên Colab
from google.colab import files
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import os
# Upload ảnh
uploaded = files.upload()
# Lấy tên file đầu tiên
filename = next(iter(uploaded))
# Đọc ảnh gốc
image = Image.open(filename).convert("RGB")
image_np = np.array(image) / 255.0
# 2. Hàm thêm nhiễu Gaussian
def add_noise(image_np, noise_level):
noise = np.random.normal(loc=0, scale=noise_level, size=image_np.shape)
noisy_image = image_np + noise
noisy_image = np.clip(noisy_image, 0, 1)
return (noisy_image * 255).astype(np.uint8)
# 3. Tạo và lưu 10 ảnh nhiễu
os.makedirs("noisy_images", exist_ok=True)
num_images = 10
noise_levels = np.linspace(0.2, 0.6, num_images) # hoặc dùng np.random.uniform()
noisy_image_list = []
for i in range(num_images):
noisy_img = add_noise(image_np, noise_levels[i])
noisy_image_list.append(noisy_img)
Image.fromarray(noisy_img).save(f"noisy_images/noisy_image_{i+1}.png")
# 4. Hiển thị toàn bộ ảnh nhiễu ra màn hình
plt.figure(figsize=(20, 5))
for i, img in enumerate(noisy_image_list):
plt.subplot(2, 5, i + 1)
plt.imshow(img)
plt.title(f"Noise level: {noise_levels[i]:.2f}")
plt.axis("off")
plt.tight_layout()
plt.show()
3. Test kết quả
Nhấn nút Run Cell (icon hình tam giác). Nhấn nút Choose Files -> chọn hình ảnh cần tạo nhiễu. Đợi vài phút hình ảnh sẽ được thêm nhiễu và hiển thị.

Tổng kết:
Trong bài thực hành này minh họa đơn giản:
- Cách lấy ảnh người dùng.
- Thêm nhiễu Gaussian để mô phỏng ảnh bị lỗi/hỏng.
- Lưu và hiển thị ảnh sau khi đã bị nhiễu.