Tải bản đầy đủ (.pdf) (229 trang)

thực tập xử lí anh tiếng việt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (8.86 MB, 229 trang )

MỤC LỤC
MỤC LỤC ................................................................................................ 1
DANH MỤC CÁC ẢNH ......................................................................... 4
CHƯƠNG 1. ............................................................................................. 8
XỬ LÝ ẢNH BẰNG PHÉP BIẾN ĐỔI ĐIỂM-ĐIỂM ......................... 8
1.1. Xử lý ảnh ............................................................................................ 8
1.1.1. Định nghĩa về Xử lý ảnh .................................................................. 8
1.1.2. Mục đích của việc xử lý ảnh ............................................................ 8
1.1.3. Giới thiệu về scikit-image................................................................ 9
1.1.4. Định nghĩa về ảnh số ..................................................................... 10
1.1.5. Xử lý ảnh bằng scikit – image ....................................................... 11
1.1.6. Định nghĩa ảnh RGB và ảnh xám .................................................. 11
1.1.7. Hiển thị ảnh.................................................................................... 13
1.1.8. Thư viện NumPy cho xử lý ảnh ..................................................... 14
1.1.9. Kích thước ảnh ............................................................................... 16
1.1.10. Ứng dụng Numpy để xử lý ảnh ................................................... 17
1.1.11. Lược đồ mức xám ........................................................................ 18
1.2. Phân ngưỡng ..................................................................................... 21
1.2.1. Phân loại các bài toán phân ngưỡng .............................................. 23
1.2.2. Phân ngưỡng Otsu ......................................................................... 25
CHƯƠNG 2. ........................................................................................... 39
XỬ LÝ ẢNH DỰA TRÊN NHỮNG ĐIỂM ẢNH LÂN CẬN VÀ
BIẾN ĐỔI TRONG KHÔNG GIAN.................................................... 39
2.1. Bộ lọc nhân chập .............................................................................. 39
2.1.1. Phát hiện cạnh ................................................................................ 40
2.1.2. Làm mịn bằng bộ lọc Gaussian ..................................................... 43
2.2. Tăng cường độ tương phản của ảnh.................................................. 45
2.2.1. Độ tương phản và sự tương quan với lược đồ mức xám ............... 46
2.2.2. Tăng cường độ tương phản ............................................................ 47
2.2.3. Cân bằng lược đồ mức xám toàn cục............................................. 48
2.2.4. Cân bằng lược đồ mức xám cục bộ ............................................... 49


2.3. Chỉnh kích thước và xoay ảnh .......................................................... 51
2.3.1. Xoay ảnh ........................................................................................ 52
2.3.2. Thay đổi theo tỷ lệ ảnh .................................................................. 54
2.3.3. Thay đổi kích thước ảnh ................................................................ 56
1


2.4. Phép biến đổi hình thái học: ............................................................. 58
2.4.1. Phép biến đổi giãn nở và xói mịn ................................................. 59
2.4.2. Ứng dụng thư viện scikit-image cho bài tốn hình thái học .......... 62
CHƯƠNG 3. ........................................................................................... 81
PHỤC HỒI VÀ RÚT TRÍCH THƠNG TIN TRONG ẢNH ............. 81
3.1. Phục hồi ảnh ..................................................................................... 81
3.1.1. Vai trị của tham số mask trong việc khơi phục ảnh ...................... 86
3.1.2. Nhiễu.............................................................................................. 88
3.1.3. Tạo nhiễu bằng thư viện scikit-image ........................................... 89
3.1.4. Khử nhiễu ...................................................................................... 90
3.2. Siêu điểm ảnh ................................................................................... 94
3.3. Tìm đường bao................................................................................ 102
3.3.1. Tìm đường bao............................................................................. 102
3.3.2. Kích thước của một đường bao.................................................... 105
CHƯƠNG 4. ......................................................................................... 120
ĐẶC TRƯNG CỦA ẢNH VÀ BÀI TOÁN NHẬN DIỆN ................ 120
4.1. Tìm cạnh với Canny ....................................................................... 120
4.1.1. Phát hiện cạnh .............................................................................. 120
4.2. Phát hiện góc................................................................................... 124
4.2.1. Phát hiện góc và ứng dụng........................................................... 124
4.2.2. Phát hiện góc bằng đặc trưng Harris ............................................ 129
4.3. Nhận dạng khuôn mặt ..................................................................... 132
4.3.1. Nhận diện khuôn mặt và ứng dụng .............................................. 132

4.3.2. Nhận dạng khuôn mặt với thư viện scikit-image ......................... 133
4.4. Bảo vệ quyền riêng tư cùng với ứng dụng phát hiện khuôn mặt. ... 138
CHƯƠNG 5. ......................................................................................... 156
HỌC TẬP CHUYỂN GIAO ............................................................... 156
5.1. Cơ sở lý thuyết ................................................................................ 156
5.2. Tinh chỉnh tồn bộ mơ hình: ........................................................... 160
5.2.1. Dataloader .................................................................................... 161
5.2.2. Huấn luyện mơ hình..................................................................... 166
5.2.3. Kiến trúc của một mạng CNN ..................................................... 170
5.2.4. Hiển thị kết quả ............................................................................ 175
5.3. Cố định một phần của mơ hình ban đầu trong suốt q trình tinh
chỉnh ...................................................................................................... 177
PHỤ LỤC 1: CÀI ĐẶT MÔI TRƯỜNG PYTHON ......................... 185
CÀI ĐẶT ANACONDA ...................................................................... 191
2


QUẢN LÝ MÔI TRƯỜNG ................................................................. 197
CÀI ĐẶT JUPYTER NOTEBOOK ................................................... 201
CÀI ĐẶT PYCHARM ......................................................................... 202
PHỤ LỤC 2: MÔ TẢ CÁC HÀM DÙNG TRONG CHƯƠNG 1 ... 207
PHỤ LỤC 3: MÔ TẢ CÁC HÀM DÙNG TRONG CHƯƠNG 2 ... 215
PHỤ LỤC 4: MÔ TẢ CÁC HÀM DÙNG TRONG CHƯƠNG 3 ... 221

3


DANH MỤC CÁC ẢNH
Hình 1.1. Ma trận ảnh 2D ........................................................................ 10
Hình 1.2. Ảnh gốc Rocket từ thư viện ..................................................... 11

Hình 1.3. Ảnh gốc và ảnh xám ................................................................ 12
Hình 1.4. Ảnh gốc và kết quả các kênh màu RGB .................................. 15
Hình 1.5. Ảnh gốc và ảnh kết quả các kênh màu RGB sau khi đổi ảnh
gốc thành ảnh xám ................................................................................... 16
Hình 1.6. Ảnh Marid từ tải từ thư viện skimage...................................... 16
Hình 1.7. Ảnh kết quả sau khi lật ảnh ngang và theo hướng bên trái ...... 18
Hình 1.8. Ảnh gốc và Histogram của ảnh ................................................ 19
Hình 1.9. Ảnh gốc và lược đồ mức giá trị theo kênh màu RGB ............. 19
Hình 1.10. Ảnh gốc và lược đồ mức xám của các kênh màu RGB ......... 21
Hình 1.11. Ảnh gốc và ảnh đã lấy ngưỡng .............................................. 23
Hình 1.12. Ảnh gốc và ảnh đã lấy ngưỡng bằng nhiều phương pháp khác
nhau.......................................................................................................... 25
Hình 1.13. Ảnh gốc và ảnh lấy ngưỡng tồn cục..................................... 26
Hình 1.14. Ảnh gốc và ảnh lấy ngưỡng cục bộ ....................................... 28
Hình 1.15. Các ảnh gốc cho bài tập 1.1 ................................................... 29
Hình 1.16. Ảnh gốc cho bài tập 1.2 ......................................................... 30
Hình 1.17. Ảnh gốc cho bài tập 1.3 ........................................................ 31
Hình 1.18. Ảnh gốc cho bài tập 1.4 ......................................................... 33
Hình 1.19. Ảnh gốc cho bài tập 1.5 ......................................................... 34
Hình 1.20. Ảnh gốc cho bài tập 1.6 ......................................................... 35
Hình 1.21. Ảnh gốc cho bài tập 1.7 ......................................................... 36
Hình 1.22. Ảnh gốc cho bài tập 1.8 ......................................................... 37
Hình 2.1. Phép lọc dựa trên các điểm ảnh lân cận ................................... 40
Hình 2.2. Ảnh gốc và các cạnh được phát hiện ....................................... 41
Hình 2.3. Kết quả phát hiện cạnh dùng bộ lọc Sobel .............................. 41
Hình 2.4. Ảnh gốc và ảnh kết quả làm mờ dùng bộ lọc Gaussian ........... 44
Hình 2.5. Tăng cường ảnh X-quang ........................................................ 45
Hình 2.6. Ảnh gốc và lược đồ mức xám của ảnh. Độ rộng của lược đồ
mức xám càng lớn thì ảnh sẽ có độ tương phản cao hơn ......................... 46
Hình 2.7. Ảnh gốc có độ tương phản thấp và Histogram của ảnh ........... 47

Hình 2.8. Ảnh gốc có độ tương phản thấp và các ảnh sau khi được tăng
cường theo ba phương pháp: kéo giãn độ tương phản, cân bằng lược đồ
mức xám, và cân bằng lược đồ cục bộ..................................................... 48
4


Hình 2.9. Ảnh gốc và ảnh sau khi được cân bằng Histogram ................. 48
Hình 2.10. Ảnh gốc và ảnh sau khi được cân bằng thích ứng ................. 50
Hình 2.11. Ứng dụng của việc thay đổi kích thước ảnh .......................... 52
Hình 2.12. Ảnh gốc và các ảnh sau khi được xoay.................................. 52
Hình 2.13. Ảnh gốc và ảnh sau khi được thay đổi kích thước................. 54
Hình 2.14. Ảnh kết quả sau khi thay đổi kích thước có và khơng có sử
dụng bộ khử răng cưa .............................................................................. 55
Hình 2.15. Ảnh gốc và ảnh sau khi thay đổi kích thước.......................... 56
Hình 2.16. Ảnh gốc và ảnh sau khi thay đổi kích thước.......................... 57
Hình 2.17. Ảnh gốc và ảnh sau khi thay đổi kích thước.......................... 58
Hình 2.18. Ảnh gốc và ảnh nhị phân được tạo bằng cách lấy ngưỡng .... 59
Hình 2.19. Ảnh nhị phân và ảnh xám ...................................................... 59
Hình 2.20. Ảnh gốc và các ảnh được giãn ra và bào mịn đi ................... 60
Hình 2.21. Đối tượng và phần tử cấu trúc tương ứng .............................. 61
Hình 2.22. Các dạng phần tử cấu trúc...................................................... 61
Hình 2.23. Ảnh gốc và ảnh kết quả sau khi xói mịn bằng cấu trúc hình
chữ nhật 12x6 .......................................................................................... 63
Hình 2.24. Ảnh gốc và ảnh sau khi bào mòn bằng cấu trúc mặc định .... 64
Hình 2.25. Ảnh gốc và ảnh kết quả sau khi mở rộng .............................. 65
Hình 2.26. Ảnh gốc của bài tập 2.1 ......................................................... 66
Hình 2.27. Ảnh gốc của bài tập 2.2 ......................................................... 67
Hình 2.28. Ảnh gốc của bài tập 2.3 ......................................................... 69
Hình 2.29. Ảnh gốc của bài tập 2.4 ......................................................... 70
Hình 2.30. Ảnh gốc của bài tập 2.5 ......................................................... 71

Hình 2.31. Ảnh gốc của bài tập 2.6 ......................................................... 72
Hình 2.32. Ảnh gốc của bài tập 2.7 ......................................................... 74
Hình 2.33. Ảnh gốc của bài tập 2.8 ......................................................... 76
Hình 2.34. Ảnh gốc bài tập 2.9 ................................................................ 77
Hình 2.35. Ảnh gốc cho bài tập 2.10 ....................................................... 79
Hình 2.36. Ảnh gốc cho bài tập 2.11 ....................................................... 80
Hình 3.1. Ảnh bị hỏng và kết quả ảnh sau khi phục hồi .......................... 82
Hình 3.2. Các trường hợp cần tái tạo ảnh ................................................ 83
Hình 3.3. Ảnh bị hỏng và các vị trí pixel lỗi ........................................... 84
Hình 3.4. Ảnh bị hỏng và kết quả ảnh sau khi phục hồi .......................... 86
Hình 3.5. Ảnh bị lỗi và ảnh mask hiển thị vùng bị lỗi ............................. 87
Hình 3.6. Ảnh gốc bị nhiễu và ảnh các hạt nhiễu màu khi phóng to ....... 88
Hình 3.7. Ảnh gốc bị nhiễu và ảnh các hạt nhiễu màu khi phóng to ....... 89
5


Hình 3.8. Ảnh gốc và ảnh sau khi được thêm nhiễu ................................ 90
Hình 3.9. Ảnh bị nhiễu và ảnh kết quả xử lý nhiễu ................................. 91
Hình 3.10. Ảnh nhiễu và ảnh xử lý nhiễu dùng bộ lọc tổng phương sai . 93
Hình 3.11. Ảnh gốc bị nhiễu và ảnh xử lý nhiễu dùng bộ lọc tổng phương
sai ............................................................................................................. 94
Hình 3.12. Ảnh gốc và ảnh được phân đoạn............................................ 95
Hình 3.13. Ảnh được phân đoạn để tách đối tượng khỏi nền .................. 96
Hình 3.14. Ảnh gốc bị nhiễu và ảnh 1 điểm ảnh đơn lẻ .......................... 97
Hình 3.15. Ảnh phân đoạn thành 100 nhóm điểm ảnh ............................ 97
Hình 3.16. Phân đoạn giám sát và phân đoạn khơng giám sát ................ 99
Hình 3.17. Ảnh gốc và ảnh sau khi được phân đoạn ............................. 100
Hình 3.18. Ảnh gốc và ảnh được phân đoạn với n_segments = 300 ..... 102
Hình 3.19. Ảnh gốc và ảnh kết quả tìm đường bao các domino............ 102
Hình 3.20. Ảnh được lấy ngưỡng và ảnh đường bao............................. 103

Hình 3.21. Kết quả các bước lấy đường bao của ảnh ............................ 104
Hình 3.22. Ảnh gốc và ảnh kết quả khi thay đổi tham số level ............. 105
Hình 3.23. Ảnh gốc của bài tập 3.1 ....................................................... 107
Hình 3.24. Ảnh gốc của bài tập 3.2 ....................................................... 108
Hình 3.25. Ảnh gốc của bài tập 3.3 ....................................................... 110
Hình 3.26. Ảnh gốc của bài tập 3.4 ....................................................... 111
Hình 3.27. Ảnh gốc của bài tập 3.5 ....................................................... 112
Hình 3.28. Ảnh gốc của bài tập ............................................................. 113
Hình 3.29. Ảnh nhị phân của bài tập 3.8 ............................................... 115
Hình 3.30. Ảnh gốc của bài tập 3.9 ....................................................... 116
Hình 3.31. Ảnh kết quả bài tập 3.9 ........................................................ 118
Hình 4.1. Ảnh gốc và ảnh kết quả phát hiện cạnh dùng bộ lọc Canny .. 121
Hình 4.2. Ảnh kết quả phát hiện cạnh cùng Sobel và Cany .................. 121
Hình 4.3. Ảnh gốc và ảnh kết quả phát hiện cạnh dùng Canny ............. 122
Hình 4.4. Kết quả cạnh khi sigma thay đổi............................................ 124
Hình 4.5. Ảnh gốc và ảnh kết quả phát hiện góc ................................... 125
Hình 4.6. Các điểm trọng tâm và kết quả phát hiện cạnh dùng Sobel ... 126
Hình 4.7. Ảnh góc .................................................................................. 127
Hình 4.8. Ảnh các góc phù hợp giữa ảnh gốc và ảnh đã giảm tỉ lệ ....... 128
Hình 4.9. Ảnh các góc phù hợp giữa ảnh góc và ảnh khi xoay ............. 129
Hình 4.10. Ảnh gốc được truy xuất xuất từ hàm angle_harris .............. 130
Hình 4.11. Ảnh gốc và đáp ứng của đặc trưng Harris ........................... 130
Hình 4.12. Ảnh các góc được phát hiện ................................................ 132
6


Hình 4.13. Ứng dụng nhận dạng khn mặt .......................................... 133
Hình 4.14. Ảnh nhận dạng khuôn mặt và ảnh tách khuôn mặt được nhận
dạng........................................................................................................ 134
Hình 4.15. Các cửa sổ sẽ trượt đi để tìm vị trí khn mặt ..................... 135

Hình 4.16. Nhiều kích thước cửa sổ sẽ được thử nghiệm để hiển thị kích
thước khn mặt .................................................................................... 136
Hình 4.17. Ảnh gốc và ảnh nhận dạng khn mặt................................. 137
Hình 4.18. Ứng dụng phát hiện cạnh, làm mờ khn mặt ..................... 139
Hình 4.19. Ảnh gốc và kết quả làm mờ khuôn mặt ............................... 142
Hình 4.20. Ảnh gốc của bài tập 4.1 ....................................................... 143
Hình 4.21. Ảnh gốc cho bài tập 4.2 ....................................................... 144
Hình 4.22. Ảnh gốc cho bài tập 4.3 ....................................................... 145
Hình 4.23. Ảnh gốc cho bài tập 4.4 ....................................................... 147
Hình 4.24. Ảnh gốc cho bài tập 4.5 ....................................................... 148
Hình 4.25. Ảnh gốc cho bài tập 4.6 ....................................................... 149
Hình 4.26. Ảnh gốc cho bài tập 4.7 ....................................................... 151
Hình 4.27. Ảnh gốc cho bài tập 4.8 ....................................................... 152
Hình 4.28. Ảnh gốc cho bài tập 4.9 ....................................................... 154
Hình 5.1. Một số ảnh trong tập huấn luyện ........................................... 165
Hình 5.2. Kết quả dự đốn khi tinh chỉnh tồn bộ mạng học sâu .......... 177
Hình 5.3. Kết quả dự đoán khi cố định một phần mạng học sâu ........... 184

7


CHƯƠNG 1.
XỬ LÝ ẢNH BẰNG PHÉP BIẾN ĐỔI ĐIỂM-ĐIỂM
Trong chương này, người học sẽ thảo luận về định nghĩa xử lý ảnh
cũng như tìm hiểu về các cơng cụ xử lý ảnh thường dùng trong ngơn ngữ
lập trình Python. Sự khác biệt giữa ảnh xám và ảnh màu sẽ được mơ tả cụ
thể. Bên cạnh đó, các kỹ thuật rút trích thơng tin từ ảnh dựa trên thống kê
lược đồ mức xám cũng sẽ được trình bày. Các thống kê này sẽ được sử
dụng trong ứng dụng chọn ngưỡng để phân tách đối tượng và khung nền
của ảnh. Kỹ thuật phân ngưỡng được mở rộng từ kỹ thuật phân ngưỡng

toàn cụ sang kỹ thuật phân ngưỡng cục bộ để có thể phân tách đối tượng
tốt hơn khi thông tin ánh sáng thay đổi. Cuối cùng, các bài tập và gợi ý
được cung cấp để giúp người học thực hành lập trình.
LÝ THUYẾT
1.1. Xử lý ảnh
1.1.1. Định nghĩa về Xử lý ảnh
Xử lý ảnh là phương pháp thực hiện thao tác trên ảnh, nhằm tăng
cường ảnh hoặc trích xuất thơng tin hữu ích, phân tích và đưa ra quyết
định. Ta có thể tính tốn, xử lý bằng cách định lượng thơng tin trong ảnh.
Xử lý ảnh là một lĩnh vực của thị giác máy tính.
Ngày nay, xử lý ảnh có nhiều ứng dụng rộng rãi như phân tích ảnh y
tế, trí tuệ nhân tạo, phục hồi ảnh, giám sát và nhiều lĩnh vực khác.
1.1.2. Mục đích của việc xử lý ảnh
Thơng thường, xử lý ảnh là một khâu của một ứng dụng cụ thể. Trong
mỗi ứng dụng, vai trò của khâu xử lý ảnh có thể khác nhau. Mặc dù vậy,
vai trị của xử lý ảnh có thể được chia thành năm nhóm chính:
8


● Trực quan hoá dữ liệu: quan sát các đối tượng mà mắt thường
khơng nhìn thấy được. Ví dụ, trong ảnh y tế, các tập tin y tế được
lưu dưới dạng đặc biệt có dải động cao. Trong khi các thiết bị
thơng thường chỉ có thể hiển thị thơng tin 8 bits. Chính vì vậy,
các ảnh y tế phải được xử lý trước khi có thể hiển thị trên màn
hình.
● Làm sắc nét và phục hồi ảnh: Các ảnh gốc có thể có chất lượng
khơng tốt, một số chi tiết bị mất đi. Việc tăng độ sắc nét và phục
hồi ảnh có thể làm cho ảnh trơng đẹp hơn dưới góc nhìn của con
người.
● Truy xuất ảnh: Đây là chức năng tìm ảnh giống với ảnh cho trước.

Chức năng này cho phép truy vấn nhanh những ảnh giống với ảnh
mẫu cho trước và giúp ích cho việc tìm kiếm thơng tin. Tính năng
này thường được dùng trong ứng dụng giám sát khi một đối tượng
cho trước cần được tìm trong kho dữ liệu lớn.
● Đo lường: Một số ảnh đặc biệt như ảnh y tế có thể giúp ta đo
lường thể tích được khối u dựa vào thơng tin của ảnh. Ngồi ra,
trong một số trường hợp đặc biệt thơng tin ảnh 2D có thể giúp
truy xuất được các thơng tin 3D như vị trí và khoảng cách.
● Nhận dạng ảnh: Chức năng này dùng để phân biệt các đối tượng
trong một ảnh và vị trí của chúng.
1.1.3. Giới thiệu về scikit-image
Có rất nhiều thư viện có thể được sử dụng để thực hiện việc xử lý
ảnh như OpenCV, OpenGL. Các thư viện này được viết dựa trên ngôn ngữ
C để tối ưu hố về mặt tốc độ. Ngồi ra, trong những ứng dụng khơng địi
hỏi tốc độ xử lý thời gian thực và cần tích hợp với mơi trường web, các
9


ngơn ngữ khác như Python có thể được sử dụng. Trong khn khổ giáo
trình này, gói thư viện Scikit-image được lựa chọn để giới thiệu vì nó là
một thư viện xử lý ảnh rất dễ sử dụng. Scikit-image được viết trên nền tảng
của OpenCV và ngôn ngữ Python dựa theo cấu trúc của một gói thư viện
nổi tiếng là Scikit-learn. Nó tích hợp một số ứng dụng máy học và hàm xử
lý ảnh cơ bản để người học có thể dễ dàng tiếp cận. Sau khi thực tập với
thư viện này, người đọc được khuyến khích sử dụng thêm thư viện
OpenCV để thực hiện các tác vụ phức tạp hơn.
1.1.4. Định nghĩa về ảnh số
Ảnh số là một mảng hay ma trận 2 chiều gồm các phần tử ảnh được
sắp xếp theo cột và hàng. Mỗi phần tử trong ma trận này được gọi là điểm
ảnh. Các điểm ảnh chứa thông tin về màu sắc và cường độ ánh sáng. Hình

1.1 dưới đây là một ví dụ về ma trận cho ảnh xám 2D. Ảnh đầu tiên bên
trái (1.1a) là một ảnh được số hóa. Các con số mà ta nhìn thấy trên ảnh ở
giữa (1.1b) tương ứng với giá trị mỗi điểm ảnh. Cuối cùng một ảnh (1.1c)
có thể được xem như một ma trận các giá trị mức xám.

(a)

b)

Hình 1.1. Ma trận ảnh 2D

10

(c)


1.1.5. Xử lý ảnh bằng scikit – image
Thư viện scikit-image cung cấp một số ảnh có sẵn được lưu trong
gói data. Ví dụ, có một ảnh màu tên là “rocket” đã được lưu sẵn. Để sử
dụng được ảnh này trước hết cần khai báo sử dụng gói data từ trong thư
viện skimage. Việc khai báo này có thể thực hiện bằng câu lệnh “from
skimage import data”. Sau đó, một phương pháp rocket có thể giúp tải
ảnh “rocket” từ trong gói thư viện và lưu lại trong biến rocket_image.
Mã:
from skimage import data
rocket_image = data.rocket()

Hình 1.2. Ảnh gốc Rocket từ thư viện
1.1.6. Định nghĩa ảnh RGB và ảnh xám
Ảnh xám chỉ có sắc độ đen và trắng. Thông thường, cường độ mức

xám được lưu trữ dưới dạng số nguyên 8 bit cho 256 mức xám khác nhau.

11


Ảnh màu thường được biểu diễn bằng ba kênh màu RGB (kênh đỏ,
xanh lục và xanh lam của ảnh). Mỗi kênh màu được mô tả bằng một mảng
2 chiều, và mỗi giá trị trong các mảng này thường được lưu trữ dưới dạng
số nguyên 8 bit giống như ảnh xám.
Điểm khác biệt chính của ảnh màu và ảnh xám nằm ở chỗ, ảnh màu
có ba kênh màu, trong khi ảnh xám có một kênh duy nhất. Ta có thể chuyển
đổi ảnh RGB thành ảnh xám bằng cách sử dụng hàm rgb2gray() và chuyển
ảnh xám thành ảnh màu bằng cách sử dụng hàm gray2rgb(). Hai hàm này
được cung cấp trong thư viện color. Một ví dụ về sự khác biệt giữa ảnh
gốc và ảnh màu có thể tìm được ở Hình 1.3
Ví dụ mẫu:
from skimage import color
grayscale = color.rgb2gray(original)
rgb = color.gray2rgb(grayscale)

Hình 1.3. Ảnh gốc và ảnh xám
12


1.1.7. Hiển thị ảnh
Để hiển thị ảnh, có thể sử dụng hàm imshow trong thư viện
matplotlib.pylot. Ngồi ra, các thơng tin về tên ảnh và tông màu hiển thị
cũng cần được xử lý để đảm bảo ảnh được hiển thị với chất lượng tốt.
Chính vì vậy, một chương trình con show_image() được cung cấp để hiển
thị ảnh một cách dễ dàng hơn. Trong ngơn ngữ Python, từ khố def cho

biết đây là một chương trình con tùy biến. Các tham số title và cmap_type
có thể được dùng để điều khiển tên sẽ được hiển thị và tông màu sử dụng
một cách tương ứng. Nếu để mặc định, giá trị title sẽ được gán là 'Image',
và giá trị cmap_type sẽ được gán là 'gray'.
Ví dụ về chương trình con show_image():
def show_image(image, title='Image', cmap_type='gray'):
plt.imshow(image, cmap=cmap_type)
plt.title(title)
plt.axis('off')
plt.show()
Vì vậy, giả sử người dùng muốn hiển thị một ảnh đã được chuyển
đổi sang ảnh xám, chỉ cần gọi hàm show_image với tham số đầu tiên là
ảnh xám cần hiển thị và đặt tên cho ảnh đó là "Anh_Xam" bằng cách khai
báo tham số thứ hai. Tham số thứ ba không khai báo, tức là giá trị
cmap_type sẽ được gán là 'gray' một cách mặc định.
Ví dụ mẫu về chuyển đổi ảnh màu thành ảnh xám:
from skimage import color
grayscale = color.rgb2gray(original)

13


show_image(grayscale, " Anh_Xam ")
1.1.8. Thư viện NumPy cho xử lý ảnh
Các ảnh được thể hiện dưới dạng ma trận hai chiều. Trong Python,
các ma trận thường được định nghĩa dưới dạng các ma trận NumPy. Các
hàm xử lý ảnh đều giả thiết ảnh đầu vào là một ma trận Numpy.
Giả sử có một ảnh được đọc bằng hàm imread() của thư viện
matplotlib. Hàm type() trong Python có thể được sử dụng để kiểm tra kiểu
dữ liệu của nó. Đoạn mã sau đây cho thấy ảnh đọc về là một đối tượng

Ndarray. Ảnh có thể được biểu diễn bởi mảng đa chiều NumPy (hoặc
"NdArrays"); đây không chỉ là một mảng chứa các giá trị thơng thường mà
cịn là một đối tượng. Các đối tượng này được hỗ trợ bởi nhiều phương
pháp xử lý giúp cho việc tính tốn ma trận trở nên đơn giản hơn.
Ví dụ mẫu về đọc ảnh có sẵn trong máy tính:
# Đọc ảnh sử dụng Matplotlib
madrid_image = plt.imread('/madrid.jpeg')
type(madrid_image)
Ảnh màu là một mảng NumPy với ba chiều. Chiều thứ nhất và chiều
thứ hai là hàng và cột của ảnh, chiều thứ ba đại diện cho các kênh màu. Ta
có thể tách các mảng đa chiều này thành nhiều mảng hai chiều, và mỗi
mảng hai chiều là một kênh màu này riêng biệt. Ví dụ, để tách thơng tin
kênh màu đỏ của ảnh, các điểm ảnh theo chiều dọc và chiều ngang sẽ được
giữ lại, và chỉ chọn các giá trị của lớp màu đầu tiên. Thư viện Matplotlib
có thể hiển thị chúng với bản đồ màu mặc định.
Ví dụ mẫu về trích thơng tin về các kênh màu:
14


# Thu dữ liệu kênh màu đỏ
red = image[: , : , 0]
# Thu dữ liệu kênh màu xanh lục
green = image[: , : , 1]
# Thu dữ liệu kênh màu xanh lam
blue = image[: , : , 2]

Hình 1.4. Ảnh gốc và kết quả các kênh màu RGB
Hàm imshow trong thư viện Matplotlib.pylot có thể hiển thị các
kênh màu nhưng tông màu mặc định sẽ là màu xanh. Bằng cách sử dụng
cmap=’gray’, các kênh màu này có thể được hiển thị như các ảnh đen

trắng. Ví dụ về ảnh hưởng của tham số điều khiển cmap có thể được quan
sát trong Hình 1.4 và 1.5. Ngồi ra, lệnh show() cho phép dừng chương
trình để hiển thị ảnh.
Ví dụ mẫu về hiển thị ảnh nếu muốn ảnh hiển thị dưới tông màu đen
trắng. Tham số cần điều khiển là cmap.
plt.imshow(red, cmap="gray")
plt.title('Red')
plt.axis('off')
plt.show()

15


Hình 1.5. Ảnh gốc và ảnh kết quả các kênh màu RGB sau khi đổi ảnh
gốc thành ảnh xám
1.1.9. Kích thước ảnh
Có hai thuộc tính quan trọng của các đối tượng NumPy là kích thước
(size) và hình dạng (shape) của ma trận đó. Ví dụ, đối với bức tranh
Madrid được đọc từ dataset của thư viện skimage. Bức tranh này có độ
phân giải là 426 hàng và 640 cột. Bởi vì là ảnh màu, nó có ba kênh màu để
biểu diễn màu sắc. Vì vậy, kích thước của ảnh này là (426, 640, 3). Để có
thể truy vấn được các thơng tin này, một thuộc tính của đối tượng Numpy
được sử dụng là shape. Ngược lại, nếu cần truy vấn thơng tin về tổng số
các điểm ảnh, thuộc tính size của đối tượng sẽ được sử dụng.

Hình 1.6. Ảnh Marid từ tải từ thư viện skimage
16


Ví dụ mẫu về truy vấn kích thước ảnh.

# Truy xuất kích thước ảnh
madrid_image.shape
# Truy xuất số lượng các điểm ảnh
madrid_image.size
1.1.10. Ứng dụng Numpy để xử lý ảnh
Vì các ảnh đọc được là các ma trận Numpy, do đó các hàm có sẵn
của thư viện Numpy cũng có thể được áp dụng để xử lý ảnh. Ví dụ về tính
năng lật và xoay ảnh. Đây là một tính năng cơ bản mà các phần mềm hiển
thị ảnh có thể cung cấp cho người dùng. Bằng cách dùng hàm flipud(), ảnh
sẽ được lật theo chiều dọc. Bằng cách sử dụng hàm flipplr(), ảnh sẽ được
lật theo chiều ngang. Để sử dụng được các hàm này, trước tiên cần dùng
lệnh “import numpy as np” để khai báo sử dụng thư viện Numpy.
Ví dụ mẫu về cách gọi các hàm trong numpy:
import numpy as np
# Xoay ảnh theo chiều dọc
vertically_flipped = np.flipud(madrid_image)
show_image(vertically_flipped, 'Vertically flipped image')
# xoay ảnh theo hướng trái
horizontally_flipped = np.fliplr(madrid_image)
show_image(horizontally_flipped, 'Horizontally flipped image')

17


Hình 1.7. Ảnh kết quả sau khi lật ảnh ngang và theo hướng bên trái
1.1.11. Lược đồ mức xám
Lược đồ mức xám của một ảnh là một biểu diễn thống kê số lượng
điểm ảnh của mỗi mức xám. Các ảnh thông thường nhận các mức xám là
số nguyên từ 0 đến 255. Trong hình 1.8b, ảnh quan sát rất tối. Vì vậy khi
quan sát lược đồ mức xám tương ứng (ở hình 1.8a), hầu hết các điểm ảnh

có cường độ thấp, từ 0 đến 50. Trong khi ảnh 1.8d sáng hơn và hầu hết các
điểm ảnh từ có mức xám từ 200 đến 255 (ở hình 1.8b).
18


Hình 1.8. Ảnh gốc và Histogram của ảnh
Đối với ảnh màu, mỗi kênh màu có thể được xem như một ảnh xám.
Do đó, các lược đồ mức xám cũng có thể được dùng trên từng kênh màu
riêng rẽ. Trong ví dụ hình 1.9, các kênh màu được tách riêng, và mỗi kênh
sẽ hiển thị lược đồ một cách độc lập.

Hình 1.9. Ảnh gốc và lược đồ mức giá trị theo kênh màu RGB
Bằng cách quan sát lược đồ mức xám, nhiều thơng tin có thể được
rút trích. Các lược đồ mức xám này có thể được sử dụng để lấy ngưỡng
ảnh, để thay đổi độ sáng và độ tương phản cũng như cân bằng độ sáng của
ảnh.

19


Để hiển thị thông tin lược đồ mức xám của ảnh, thư viện Matplotlib
sử dụng hàm hist. Nó nhận một mảng đầu vào x và các tham số điều khiển
bin. Tham số bin điều khiển số lượng các mức xám được thống kê trong
một khoảng range xác định. Trong ví dụ tiếp theo, kênh màu đỏ của ảnh
sẽ được tách ra khỏi ảnh màu image. Sau đó, hàm hist. sẽ được dùng để
hiển thị lược đồ mức xám của mảng. Hàm ravel trả về một mảng liên tục
1D từ các giá trị của ma trận 2D (kênh màu đỏ của ảnh). Trong ví dụ dưới
đây, tham số điều bins được đặt bằng 256 vì ảnh có 256 mức xám từ từ 0
đến 255. Có nghĩa là cần 256 giá trị để hiển thị biểu đồ. Cuối cùng, lệnh
plt.show() được dùng để tạm ngưng chương trình và hiển thị kết quả.

Trong ví dụ dưới đây, phương thức ravel() sẽ thay thế cho hàm ravel để
chuyển đổi đối tượng Numpy nhiều chiều thành mảng NumPy một chiều
mà hàm hist yêu cầu.
Ví dụ mẫu:
# Red color of the image
red = image[: , : , 0]
# Obtain the red histogram
plt.hist(red.ravel(), bins=256)
blue = image[: , : , 2]
plt.hist(blue.ravel(), bins=256)
plt.title('Blue Histogram')
plt.show()

20


Hình 1.10. Ảnh gốc và lược đồ mức xám của các kênh màu RGB
1.2. Phân ngưỡng
Phân ngưỡng là một kỹ thuật được sử dụng để chuyển một ảnh xám
thành ảnh nhị phân trong đó vùng nền (mức 0) và đối tượng (mức 1) của
ảnh sẽ được tách biệt rõ ràng. Bằng cách so sánh giá trị mức xám của một
điểm ảnh với một ngưỡng cho trước, điểm ảnh đó sẽ được gán thuộc về
đối tượng cần quan tâm hoặc phông nền. Nếu giá trị mức xám của điểm
ảnh nhỏ hơn giá trị ngưỡng, nó sẽ được chuyển thành màu trắng (phông
nền) và ngược lại chuyển thành màu đen (đối tượng cần quan tâm).
Phân ngưỡng là một thuật toán rất phổ cập vì nó cho phép tách đối
tượng quan tâm ra khỏi nền, sau đó đối tượng sẽ được xử lý để rút ra những
thơng tin có ích. Ví dụ, trong bài tốn nhận diện các đặc trưng trên khn
21



mặt để điểm danh nhân viên, việc đầu tiền là cần tách phần khuôn mặt ra
khỏi khung nền. Hay trong các bài toán nhận diện sản phẩm bị lỗi và loại
lỗi; công việc đầu tiên vẫn là phải tách đối tượng ra để tiến hành nhận diện
lỗi. Việc phân ngưỡng chỉ hoạt động tốt khi các ảnh xám có độ tương phản
cao. Do đó, để phân ngưỡng các ảnh màu cần chuyển ảnh màu thành ảnh
xám trước khi áp dụng các thuật tốn phân ngưỡng. Quy trình thực hiện
các bước như sau:
● Tải ảnh cần xử lý
● Thiết lập giá trị ngưỡng (thresh). Trong ví dụ sau đây ngưỡng
được chọn là 127 (điểm nằm giữa từ 0 đến 255)
● Tạo ra ảnh nhị phân bằng cách so sánh ảnh mới ngưỡng đã chọn
bằng cách sử dụng một toán tử so sánh lớn hơn so với thresh.
● Cuối cùng, hiển thị ảnh đã phân ngưỡng bằng hàm show_image().
Ví dụ mẫu:
# Thiết lập giá trị của ngưỡng
thresh = 127
# So sánh ảnh với ngưỡng đã chọn
binary = image > thresh
# Hiển thị kết quả đạt được
show_image(image, 'Original')
show_image(binary, 'Thresholded')

22


Hình 1.11. Ảnh gốc và ảnh đã lấy ngưỡng
Trong trường hợp muốn nghịch đảo ảnh phân ngưỡng (tức là đảo
ngược các mức đen và trắng trong ảnh), toán tử "<=" có thể được sử dụng
thay cho tốn tử ">". Ảnh kết quả cũng là ảnh nhị phân nhưng nền màu

đen và chủ thể màu trắng.
Ví dụ mẫu về kỹ thuật phân ngưỡng:
# Thiết lập giá trị của ngưỡng
thresh = 127
# So sánh ảnh với ngưỡng đã chọn
binary = image <= thresh
# Hiển thị kết quả đạt được
show_image(image, 'Original')
show_image(inverted_binary,'Inverted Thresholded')
1.2.1. Phân loại các bài toán phân ngưỡng
Thư viện scikit-image hỗ trợ hai kỹ thuật phân ngưỡng. Phân
ngưỡng toàn cục dựa trên biểu đồ mức xám của toàn bộ ảnh để chọn một
ngưỡng thresh duy nhất. Ngưỡng này sẽ được áp dụng cho mọi điểm ảnh
trong ảnh. Phương pháp này thường phù hợp với những ảnh có nền tương

23


đối đồng đều. Kỹ thuật phân ngưỡng thứ hai là kỹ thuật cục bộ. Phương
pháp này so sánh mỗi điểm ảnh với một ngưỡng khác nhau. Do đó ngưỡng
ở đây là một ảnh có kích thước bằng với ảnh gốc, và giá trị mỗi ngưỡng
ứng với điểm ảnh sẽ dựa trên những những điểm lân cận trên ảnh gốc tương
ứng. Phương án cục bộ này thường tối ưu cho cho những ảnh mà độ sáng
của khung nền thay đổi thường xun và có độ sáng nền khơng đồng đều.
So với phân ngưỡng tồn cục, phân ngưỡng cục bộ có kết quả tốt hơn. Tuy
nhiên cần lưu ý rằng phân ngưỡng cục bộ sẽ chậm hơn phân ngưỡng toàn
cục. Ảnh bên dưới là ảnh so sánh hai kỹ thuật phân ngưỡng này. Khi ảnh
nền bị hiện tượng đổ bóng do phân bố ánh sáng khơng đều, phân ngưỡng
cục bộ tốt hơn.


Ngồi phân ngưỡng toàn cục và phân ngưỡng cục bộ, thư viện scikitimage còn hỗ trợ việc thử nhiều mức phân ngưỡng khác nhau để quan sát
kết quả thu được. Hàm try_all_threshold của thư viện filters trong gói
scikit-image cung cấp giải pháp kiểm tra kết quả phân ngưỡng với nhiều
ngưỡng khác nhau. Ta sử dụng hàm try_all_threshold bằng cách truyền
ảnh image và tham số điều khiển verbose. Ở đây ảnh image là ảnh xám với
dữ liệu uint8; còn verbose = False để hàm này không in ra nhiều thông tin
về các ngưỡng đang được thực thi. Cuối cùng, hàm shown_plot() giúp
hiển thị tất cả các kết quả.
Ví dụ mẫu:

24


from skimage.filters import try_all_threshold
# Thực thi tất cả các phương pháp phân ngưỡng.
fig, ax = try_all_threshold(image, verbose=False)
# Hiển thị kết quả
show_plot(fig, ax)
Trong ví dụ trên, bảy thuật tốn phân ngưỡng toàn cục được sử sử
dụng. Kết quả dưới đây hiển thị đầu tiên là ảnh gốc, sau đó là các ảnh kết
quả của các phương pháp tạo ngưỡng.

Hình 1.12. Ảnh gốc và ảnh đã lấy ngưỡng bằng nhiều phương pháp
khác nhau
1.2.2. Phân ngưỡng Otsu
Khi ảnh cần phân ngưỡng là ảnh có nền đồng nhất phương pháp phân
ngưỡng tồn cục sẽ hoạt động tốt nhất. Mặc dù vậy, việc chọn giá trị
ngưỡng thresh tồn cục cần phải được tính tới. Nếu giá trị ngưỡng này
được chọn tốt, kết quả bài toán phân ngưỡng sẽ đạt được tốt nhất. Để đạt
được điều đó, hàm threshold_otsu() từ thư viện filters có thể được sử

dụng. Hàm này sử dụng phương pháp Otsu nổi tiếng để xác định thresh.
Sau đó, giá trị thresh sẽ được áp dụng cho tất cả điểm ảnh để phân chia
25


×