Xét điều kiện cụ thể nhiều đối tượng cần các công cụ cơ bản để có thể điều chỉnh các hình ảnh của họ một cách nhanh chóng để cập nhật trên các nền tảng.. Lý do chọn đề tài Lý do chọn đề
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
- KHOA ĐA PHƯƠNG TIỆN -
BÁO CÁO BÀI TẬP LỚN
XỬ LÝ VÀ TRUYỀN THÔNG
ĐA PHƯƠNG TIỆN
Giảng viên hướng dẫn : Vũ Hữu Tiến Nhóm bài tập : 06
Thành viên nhóm bài tập :
1 Nguyễn Ái Thu - B22DCPT267
2 Lê Trang Anh - B22DCPT007
3 Đặng Thị Thu Nguyệt - B22DCPT196
HÀ NỘI, 04/2024
Trang 2MỤC LỤC
LỜI CẢM ƠN 2
I Giới thiệu chung 3
1 Đặt vấn đề 3
1.1 Lý do chọn đề tài 3
1.2 Những nghiên cứu trước đây 3
1.3 Mục đích chính của đề tài 4
2 Giới thiệu một số kiến thức liên quan 4
2.1 Giới thiệu về xử lý ảnh 4
2.2 Thư viện OpenCV 5
2.3 Thư viện PIL/Pillow 6
2.4 Thư viện Tkinter 7
3 Kết luận 8
II Mô tả sản phẩm 8
1 Giới thiệu 8
2 Trình tự xây dựng hệ thống app chỉnh ảnh 8
Bước 1: Thu nhập phân tích dữ liệu 8
Bước 2: Phân tích hệ thống 9
Bước 3: Thiết kế hệ thống 9
III Kết quả và đánh giá 14
1 Kết quả khảo sát người dùng 14
2 Một số nhận xét khác từ người dùng: 16
TÀI LIỆU THAM KHẢO 18
Trang 3LỜI CẢM ƠN
Đầu tiên, nhóm em xin gửi lời cảm ơn chân thành đến Trường Học viện Công nghệ Bưu chính Viễn Thông đã đưa môn học Xử lý và truyền thông đa phương tiện vào trương trình giảng dạy
Đặc biệt, em xin gửi lời cảm ơn sâu sắc đến giảng viên bộ môn - Thầy Vũ Hữu Tiến đã dạy dỗ, truyền đạt những kiến thức quý báu cho chúng em trong suốt thời gian học tập vừa qua Trong thời gian tham gia lớp học Xử lý và truyền thông đa phương tiện của thầy, chúng em đã có thêm cho mình nhiều kiến thức bổ ích, tinh thần học tập hiệu quả, nghiêm túc Đây chắc chắn sẽ là những kiến thức quý báu, là hành trang để chúng em
có thể vững bước sau này
Bộ môn Xử lý và truyền thông đa phương tiện là môn học tuy có hơi khó nhưng rất thú
vị, vô cùng bổ ích và có tính thực tế cao Đảm bảo cung cấp đủ kiến thức, gắn liền với nhu cầu thực tiễn của sinh viên
Tuy nhiên, do vốn kiến thức còn nhiều hạn chế và khả năng tiếp thu thực tế còn nhiều
bỡ ngỡ Mặc dù chúng em đã cố gắng hết sức nhưng chắc chắn bài báo cáo khó có thể tránh khỏi những thiếu sót và nhiều chỗ còn chưa chính xác, kính mong thầy xem xét và góp ý để bài tiểu luận của nhóm 06 chúng em được hoàn thiện hơn
Lời cuối cùng, xin kính chúc thầy nhiều sức khỏe, thành công và hạnh phúc
Chúng em xin chân thành cảm ơn!
Trang 4I Giới thiệu chung
1 Đặt vấn đề
Ngày nay, xã hội ngày càng phát triển Các ngành công nghiệp, thương mại đang dịch chuyển sang các phương pháp kinh doanh trên nhiều nền tảng khác nhau gồm cả online lẫn offline Xét điều kiện cụ thể nhiều đối tượng cần các công cụ cơ bản để có thể điều chỉnh các hình ảnh của họ một cách nhanh chóng để cập nhật trên các nền tảng Do đó dựa trên các kiến thức, vốn hiểu biết sẵn có và sự hướng dẫn của giảng
viên Vũ Hữu Tiến , nhóm chúng em chọn đề tài: “Xây dựng ứng dụng xử lý ảnh
bằng Python”
1.1 Lý do chọn đề tài
Lý do chọn đề tài bắt nguồn từ yêu cầu trong thực tế là rất nhiều người cần những app chỉnh ảnh nhanh chóng, dung lượng ít, giao diện đơn giản, có thể sử dụng ngay trên điện thoại/máy tính Đồng thời, các ngành nghề liên quan đến vẽ/thiết kế/thiết kế kỹ thuật cũng cần 1 ứng dụng có thể chỉnh sửa được hình ảnh nhanh chóng, dễ dàng và tiện lợi
1.2 Những nghiên cứu trước đây
Đã từng có rất nhiều app chỉnh ảnh ra mắt trước đây cả trên điện thoại lẫn máy tính như: Adobe Photoshop, Adobe Lightroom, Picsart, Snapseed, VSCO,
− Ưu điểm:
+ Nổi tiếng, có thương hiệu xuất xứ lâu năm
+ Hỗ trợ chỉnh sửa nhiều định dạng file ảnh khác nhau (JPG, RAW, …) + Có nhiều chức năng với bộ lọc, hiệu ứng phong phú và thường xuyên được nâng cấp đáp ứng nhu cầu mạnh mẽ của thị trường
+ Cộng đồng người dùng lớn, dễ trao đổi và tìm kiếm tài liệu
+ Adobe Photoshop, Adobe Lightroom có một hệ sinh thái cho các ứng dụng nên có thể trao đổi file làm việc linh động cả hình ảnh lẫn video
− Nhược điểm:
+ Mất phí bản quyền
+ Giao diện phức tạp, nhiều chức năng cần thời gian để tìm hiểu
Trang 5+ Yêu cầu cấu hình máy cao
Hình 1.1 Ví dụ về giao diện phần mềm Photoshop
=> Để giải quyết những nhược điểm và nhu cầu người dùng, chúng em đã cùng nhau
nghiên cứu, thu thập dữ liệu từ người dân để tạo lên một nền tảng chỉnh ảnh cơ bản với
những nút chức năng cần thiết và giao diện phù hợp với thị hiếu công chúng
1.3 Mục đích chính của đề tài
Mục đích chính của đề tài là xây dựng phần mềm chỉnh ảnh đơn giản cho mọi đối
tượng, mọi lứa tuổi, công việc có thể dùng với giao diện đẹp mắt và dễ sử dụng nhất
2 Giới thiệu một số kiến thức liên quan
2.1 Giới thiệu về xử lý ảnh
Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ Là một ngành khoa học
mới nhưng tốc độ phát triển rất nhanh, sử dụng kỹ thuật áp dụng tăng cường và xử lý
các ảnh thu nhận từ các thiết bị camera, webcam, Do đó xử lý ảnh được ứng dụng,
phát triển trong rất nhiều lĩnh vực: an ninh bảo mật, quân sự, giải trí, y tế,
Trang 6Hình 1.2 Quá trình xử lý ảnh
Ảnh có thể xem là tập hợp các điểm ảnh, mỗi điểm ảnh được xem như là đặc trưng cường độ sáng hay một dấu hiệu nào đó tại một vị trí nào đó của đối tượng trong không gian và nó có thể xem như một hàm n biến P(c1,c2, cn) Do đó, ảnh trong xử
lý ảnh có thể xem như ảnh n chiều
Hình 1.3 Mô tả chi tiết quá trình xử lý ảnh
2.2 Thư viện OpenCV
OpenCV là mã nguồn mở của Intel, nó là một thư viện có khả năng nhúng vào các chương trình có khả năng nhận diện hình ảnh của máy tính Nó bao gồm các khả năng tiên tiến như phát hiện khuôn mặt, theo dõi, nhận diện khuôn mặt, Ngoài ra, nó cũng cấp rất nhiều các thuật toán xử lý ảnh thông qua các hàm API
Trang 7Hình 1.4 Các khả năng của OpenCV có thể là nhận diện khuôn mặt (trên cùng bên trái), phát hiện đường đồng mức (trên bên phải), và phát hiện cạnh (phía dưới)
OpenCV là thư viện được thiết kế để chạy trên đa nền tảng, nghĩa là nó có thể chạy trên hệ điều hành Window, Linux, Mac, iOS Với các tính năng đó thì OpenCV được ứng dụng trong nhiều lĩnh vực:
− Chụp ảnh: Cải thiện chất lượng ảnh, giảm nhiễu, điều chỉnh độ sáng, độ tương
phản, màu sắc, thêm hiệu ứng
− Y tế: Phân tích hình ảnh y tế như X-quang, MRI, CT scan để chẩn đoán bệnh
− An ninh: Nhận diện khuôn mặt, biển số xe, dấu vân tay
− Khoa học máy tính: Nhận dạng đối tượng, phân loại ảnh, theo dõi chuyển động
− Giải trí: Chỉnh sửa video, tạo hiệu ứng đặc biệt cho phim ảnh
− Robot: Giúp robot di chuyển và tương tác với môi trường xung quanh
− Xe tự lái: Nhận diện biển báo giao thông, vạch kẻ đường, người đi bộ, v.v
− Nông nghiệp: Phân tích hình ảnh cây trồng để phát hiện sâu bệnh, theo dõi quá
trình sinh trưởng
2.3 Thư viện PIL/Pillow
Pillow là một thư viện mã nguồn mở phổ biến cho xử lý ảnh cho ngôn ngữ Python Nó cung cấp nhiều chức năng mạnh mẽ để thao tác hình ảnh bao gồm:
− Đọc và ghi các định dạng ảnh phổ biến: JPEG, PNG, GIF, BMP, TIFF, v.v
− Chuyển đổi giữa các định dạng ảnh
Trang 8− Thay đổi kích thước ảnh: Thay đổi kích thước, cắt xén, xoay ảnh
− Chỉnh sửa ảnh: Điều chỉnh độ sáng, độ tương phản, màu sắc, thêm hiệu ứng
− Vẽ hình ảnh: Vẽ đường thẳng, hình dạng, văn bản lên ảnh
− Lọc ảnh: Áp dụng các bộ lọc để làm mờ, làm sắc nét, gán cạnh, v.v
− Hợp tác ảnh: Ghép ảnh, tạo ảnh ghép, thêm watermark
Bên cạnh đó vì nó là một thư viện mã nguồn mở (Open Source) nên có một cộng đồng lớn có rất nhiều tài liệu cũng như hướng dẫn sử dụng, các tính năng được cập nhật thường xuyên, cải tiến Hỗ trợ đa nền tảng trên nhiều hệ điều hành: Windows, macOS, Linux
2.4 Thư viện Tkinter
Tkinter là một thư viện trong ngôn ngữ lập trình Python được sử dụng để tạo giao diện
đồ họa người dùng (GUI) "Tkinter" là viết tắt của "Tk interface,", một toolkit đồ họa cung cấp các công cụ để phát triển giao diện người dùng
Hình 1.5 Logo của Tkinter
Trong Tkinter có nhiều Widget khác nhau người dùng có thể đưa vào để thiết kế giao diện:
− Label: Thông thường nhãn được hiển thị văn bản hoặc hình ảnh tĩnh
− Tkinter: Button để thêm nút có thể nhấn
− Entry (Ô nhập liệu): Nhập văn bản từ người dùng
− Scale: Cung cấp thanh trượt cho người dùng để chọn giá trị trong một dải
và rất nhiều Widget khác nữa như canvas, frame, menu, scrollbar, text,
Đồng thời Tkinter cung cấp một số phương pháp để sắp xếp các widget, trong đó có ba phương pháp chính:
Trang 9− Pack Layout
− Grid Layout
− Place Layout
Chính vì vậy, Tkinter có rất nhiều ưu điểm và phù hợp với những người cần phát triển các ứng dụng GUI đơn giản, nhẹ và hiệu quả
3 Kết luận
Từ những tìm hiểu trên, nhóm chúng em lựa chọn làm phần mềm chỉnh sửa ảnh trên máy tính ứng dụng các công nghệ cơ bản trong xử lý ảnh như xoay ma trận 2D, phép biến đổi affine, phép lấy mẫu, lọc convolution,
II Mô tả sản phẩm
1 Giới thiệu
Phần 1 đã trình bày khái quát về lý do chọn đề tài cũng như các phạm vi kiến thức liên quan Đồng thời cũng nhấn mạnh mục đích, vai trò của dự án lần này Để áp dụng các
lý thuyết đã trình bày ở phần 1, phần này sẽ giới thiệu chi tiết các thuật toán chúng em
đã sử dụng cũng như dàn trang sắp xếp layout dùng Tkinter
2 Trình tự xây dựng hệ thống app chỉnh ảnh
Bước 1: Thu nhập phân tích dữ liệu
Để hiểu rõ hơn về người dùng, nhóm chúng em đã tạo một cuộc khảo sát về trải
nghiệm sử dụng ứng dụng chỉnh ảnh trên điện thoại Kết quả thu được dựa trên 23 người dùng điền bảng khảo sát cho thấy:
− Phạm vi, đối tượng người dùng
+ Độ tuổi sử dụng app chỉnh ảnh phổ biến nhất là từ 18-26 (chiếm 72%) + Trình độ học vấn: tốt nghiệp trung học phổ thông trở lên
+ Mức độ thành tạo: từ thấp đến trung bình
− Các thói quen sử dụng
+ Tần suất sử dụng: hiếm khi (chiếm 72%)
+ Mục đích: sở thích cá nhân (64%), dành cho mạng xã hội (60%)
+ Các thao tác thường thực hiện: crop ảnh (66%), chỉnh sáng (47%), làm
mờ ảnh (40%), hiệu ứng đặc biệt (20%)…
Trang 10+ Mức quan trọng của giao diện dễ sử dụng đối với việc quyết định sử dụng ứng dụng: từ 3/5-4/5
− Các phần mềm của đối thủ
+ Mức độ hài lòng về một số phần mềm chỉnh sửa ảnh trên máy tính hiện
có trên thị trường: Adobe Photoshop(3/5), Adobe Lightroom(4/5), Photoscape(3/5), GIMP (3/5)
Bước 2: Phân tích hệ thống
Từ yêu cầu đề bài, khả năng của nhóm và nhu cầu thực tế của người dùng, chúng em quyết định làm một ứng dụng trên máy tính có những đặc điểm sau:
− Ứng dụng trên máy tính
− Ngôn ngữ lập trình: Python
− Các chức năng: Làm mờ ảnh (Blur), Xoay ảnh (Rotate), Xác định đường biên của ảnh (Detect Edges) và Làm lại từ đầu (Reset All) (trong trường hợp người dùng muốn thay đổi phần chỉnh sửa)
− Lượng thông tin vừa đủ, đơn giản, tiện lợi để tất cả mọi người ai cũng dùng được dễ dàng, không bị ngợp
Bước 3: Thiết kế hệ thống
a Ý tưởng
Nhóm chọn mô hình thiết kế giao diện đơn giản, dễ nhìn với các nút thiết kế theo hơi hướng truyền thống Các nút, vị trí được sắp xếp ngay trọng tâm để thu hút người dùng khi mới mở app mà không bị rối Về màu sắc, dùng 2 màu chính là màu đỏ (màu biểu tượng của Học viện Công nghệ Bưu chính Viễn thông) và màu trắng
b Thiết kế logic:
Phần mềm có 3 chức năng chính đó là Làm mở ảnh (Blur), Xoay ảnh (Rotate) và Xác định đường biên của ảnh (Detect Edges)
b.1 Chức năng làm mờ ảnh (Blur image)
Với đoạn mã Python dưới, chúng em sử dụng các hàm trong thư viện OpenCv để thực hiện làm mờ ảnh Độ mờ được tính theo tham số blur amount
Tổng quan thuật toán:
Trang 11**blur_image(image, blur_amount)**:
-Input: Ảnh gốc (image), độ mờ (blur_amount)
-Output: Ảnh đã được làm mờ
-Hoạt động: Hàm này áp dụng bộ lọc Gaussian Blur để làm mờ ảnh Độ mờ
được xác định bằng tham số “blur amount” Nếu “blur amount” bằng 0, hàm sẽ trả
về ảnh gốc
Chi tiết đoạn code
def blur_image(image, blur_amount):
if blur_amount == 0:
return image
blur_amount = max(1, blur_amount)
if blur_amount % 2 == 0:
blur_amount += 1
blurred = cv2.GaussianBlur(image, (blur_amount, blur_amount), 0)
return blurred
Giải thích:
− Hàm blur_image: Hàm này áp dụng bộ lọc Gaussian Blur để làm mờ ảnh
− cv2.GaussianBlur(image, (blur_amount, blur_amount), 0): Dòng này thực hiện
làm mờ bằng cách sử dụng hàm cv2.GaussianBlur từ OpenCV và hàm này nhận
ba đối số:
+ image: Hình ảnh bị mờ (được truyền từ các đối số của hàm)
+ (blur_amount, Blur_amount): Đây là kích thước hạt nhân cho bộ lọc làm
mờ Gaussian Nó được tạo dưới dạng một bộ dữ liệu bằng cách sử dụng giá trị Blur_amount lẻ được đảm bảo Kích thước hạt nhân lớn hơn dẫn đến hiệu ứng làm mờ đáng kể hơn
+ 0: Đây là giá trị sigma (độ lệch chuẩn) của phân bố Gaussian được sử
dụng để làm mờ Giá trị 0 cho phép OpenCV tính toán sigma tối ưu dựa trên kích thước hạt nhân
b.2 Chức năng xoay ảnh (Rotate image)
Trang 12Với đoạn mã Python dưới, chúng em sử dụng các hàm trong thư viện OpenCv để thực hiện xoay ảnh dựa trên ma trận xoay Góc quay được tính theo tham số angle
Tổng quan thuật toán:
**rotate_image(image, angle)**:
-Input: Ảnh gốc (image), góc quay (angle)
-Output: Ảnh đã được xoay
-Hoạt động: Hàm này thực hiện xoay ảnh một góc quay nhất định Góc quay được xác định bằng tham số “angle”
Chi tiết đoạn code
def rotate_image(image, angle):
center = (image.shape[1] // 2, image.shape[0] // 2)
rotation_matrix = cv2.getRotationMatrix2D(center, angle, 1)
rotated_image = cv2.warpAffine(image, rotation_matrix, (image.shape[1],
image.shape[0]))
return rotated_image
Giải thích:
− Hàm rotate_image: Hàm này thực hiện xoay ảnh dựa trên góc xoay được cung
cấp Nó sử dụng hai hàm của OpenCV:
− cv2.getRotationMatrix2D để tính toán ma trận xoay 2D Ma trận này được xác
định bởi ba tham số:
+ Center: Trung tâm của ảnh, nơi xoay sẽ xảy ra Code tính toán trung tâm
này bằng (image.shape[1] // 2, image.shape[0] // 2), lấy tọa độ trung tâm dựa trên chiều rộng và chiều cao của ảnh
+ Angle: Góc xoay theo độ Giá trị góc được lấy từ đầu vào người dùng
thông qua thanh trượt (rotate_scale)
+ Scale: Trong trường hợp này, scale được đặt thành 1, nghĩa là kích thước
ảnh không thay đổi trong khi xoay
− cv2.warpAffine để áp dụng phép biến đổi affine (bao gồm xoay) cho ảnh bằng
cách sử dụng ma trận xoay đã tính toán Hàm này nhận 3 đối số:
+ Input Image: Ảnh cần xoay (lấy từ image_cv)
Trang 13+ Rotation Matrix: Ma trận xoay 2D được tạo bởi
cv2.getRotationMatrix2D
+ dsize: Kích thước ảnh đầu ra Do scale được đặt thành 1 trong ma trận
xoay, kích thước ảnh đầu ra vẫn giữ nguyên kích thước ảnh đầu vào ((image.shape[1], image.shape[0]))
b.3 Chức năng Detect Edges:
Tổng quan thuật toán:
**edge_detection(image)**:
-Input: Ảnh gốc (`image`)
-Output: Ảnh đã được phát hiện cạnh
- Hoạt động: Hàm này thực hiện phát hiện cạnh trong ảnh sử dụng phương pháp Canny
Chi tiết đoạn code
def edge_detection(image):
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 200)
return edges
Giải thích:
− cv2.cvtColor(image, cv2.COLOR_BGR2GRAY): Dòng này chuyển đổi hình ảnh
đầu vào ở hệ màu BGR (Xanh lam, Xanh lục, Đỏ), thành hệ màu xám
(grayscale) Các thuật toán phát hiện cạnh thường hoạt động tốt hơn trên hệ màu grayscale vì chúng tập trung vào sự thay đổi sắc độ hơn là sự khác biệt về màu sắc Hàm cv2.cvtColor từ thư viện OpenCV được sử dụng cho chuyển đổi này
− cv2.Canny(gray, 100, 200): Dòng này là cốt lõi của quá trình phát hiện cạnh
Sử dụng thuật toán phát hiện cạnh Canny, một phương pháp phổ biến và hiệu
quả để tìm cạnh trong hình ảnh Hàm cv2.Canny nhận 3 đối số:
+ grey: Hình ảnh thang độ xám thu được ở bước trước