THÀNH PHỐ HỒ CHÍ MINHSVTH: ĐỒ ÁN TỐT NGHIỆP NGÀNH CNKT ĐIỀU KHIỂN VÀ TỰ ĐỘNG HÓA LẬP TRÌNH THUẬT TOÁN XỬ LÝ ẢNH VÀ THIẾT KẾ, LẬP TRÌNH CÁC CHỨC NĂNG CHO PHẦN MỀM CỦA MÁY ĐẾM KHUẨN LẠC S
Trang 1THÀNH PHỐ HỒ CHÍ MINH
SVTH: ĐỒ ÁN TỐT NGHIỆP NGÀNH CNKT ĐIỀU KHIỂN VÀ TỰ ĐỘNG HÓA
LẬP TRÌNH THUẬT TOÁN XỬ LÝ ẢNH VÀ THIẾT KẾ, LẬP TRÌNH CÁC CHỨC NĂNG CHO PHẦN MỀM
CỦA MÁY ĐẾM KHUẨN LẠC SCAN
GVHD: TS NGUYỄN VĂN THÁI
TRẦN HỮU PHÁT
S K L 0 1 2 5 2 0
Tp Hồ Chí Minh, tháng 11/2023
Trang 2BỘ GIÁO DỤC & ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
KHOA ĐIỆN ĐIỆN TỬ BỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN
LẠC SCAN
Trang 4BỘ GIÁO DỤC & ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
KHOA ĐIỆN ĐIỆN TỬ BỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN
-∞∆∞ -
ĐỒ ÁN TỐT NGHIỆP
LẬP TRÌNH THUẬT TOÁN XỬ LÝ ẢNH VÀ THIẾT KẾ, LẬP TRÌNH CÁC CHỨC NĂNG CHO PHẦN MỀM CỦA MÁY ĐẾM KHUẨN
LẠC SCAN
GVHD: TS Nguyễn Văn Thái SVTH: Trần Hữu Phát
MSSV: 18151101
Trang 5-2-
Trang 6LỜI CẢM ƠN
Tôi muốn bày tỏ lòng biết ơn chân thành đến những cá nhân và tổ chức sau đây, những người đã có đóng góp quan trọng và hỗ trợ vô giá tỏng suốt quá trình làm luận văn của tôi:
● Dự án này đã nhận được đầu tư và tài trợ từ công ty Công Nghệ TNHH LABONE ● Tiến sĩ Nguyễn Văn Thái, người đã hướng dẫn tận tâm và hỗ trợ kiến thức, tài
nguyên và ý kiến sáng suốt trong quá trình nghiên cứu ● Đội ngũ công ty Công Nghệ TNHH LABONE, những người đã đóng góp kiến
thức chuyên sâu về cơ khí, kiến thức chuyên môn trong lĩnh vực vi sinh để hỗ trợ xây dựng thiết bị máy SCAN và nuôi cấy vi khuẩn
● Công ty SSG VIETNAM, sự hợp tác và hỗ trợ trong việc cung cấp cơ hội cho tôi thu thập dữ liệu thực tế về vi khuẩn cho nghiên cứu của tôi
● Các thành viên tài năng của nhóm Image processing thuộc phòng thí nghiệm 3DVisionLab, nhờ có kiến thức chuyên sâu và kiên trì hỗ trợ trong việc vượt qua thách thức và đạt được mục tiêu của luận văn
● Cha mẹ và gia đình của tôi, nhờ có sự hỗ trợ tinh thần, động viên và cung cấp nguồn lực cần thiết trong hành trình luận văn này
● Các giảng viên của khoa Điện tử, đặc biệt là các giáo viên chuyên ngành Điều Khiển và Tự Động Hóa, vì sự giảng dạy tận tình và bổ trợ các kiến thức cơ bản Tôi chân thành biết ơn sự hỗ trợ, hướng dẫn và đóp góp của những cá nhân và tổ chức này Những nỗ lực của họ ảnh hưởng đáng kể đến thành công của nghiên cứu của tôi
Trang 7Em xin cam đoan đề tài “Lập trình thuật toán xử lý ảnh và thiết kế, lập trình các chức
năng cho phần mềm của máy đếm khuẩn lạc SCAN.” là em tự thực hiện, dựa vào kiến
thức em đã học và trao dồi, dưới sự hỗ trợ của Thầy - TS Nguyễn Văn Thái và không sao chép từ tài liệu hay công trình nào khác
Tp Hồ Chí Minh, ngày… tháng năm 2023
Sinh viên thực hiện
(Ký và ghi rõ họ tên)
Trần Hữu Phát
Trang 8BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SPKT TP.HỒ CHÍ MINH
KHOA ĐIỆN ĐIỆN TỬ BỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN
CỘNG HÓA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP – TỰ DO – HẠNH PHÚC
o0o NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Ngành: Công nghệ kỹ thuật Điều khiển và Tự động hóa Lớp: 1815CL3B
Giảng viên hướng dẫn: TS Nguyễn Văn Thái Ngày nhận đề tài: 28/8/2023 Ngày nộp đề tài: 20/1/2023
1 Tên đề tài: Lập trình thuật toán xử lý ảnh và thiết kế, lập trình các chức năng cho
phần mềm của máy đếm khuẩn lạc SCAN
Nội dung thực hiện đề tài:
● Lựa chọn thiết bị cho máy scan ● Nghiên cứu, lập trình thuật toán xử lý ảnh để tách và đếm khuẩn lạc ● Nghiên cứu, lập trình cơ chế giao tiếp để truyền nhận thông tin giữa Python và
C#.NET ● Lập trình môi trường phầm mềm cô lập chứa toàn bộ thư viện software của thiết
bị, cho phép dễ dàng chia sẻ dự án ● Nghiên cứu, lập trình thuật toán và xây dựng logic user cho các chức năng quan
trọng trong phầm mềm, xây dựng code mang tính kế thừa ● Nghiên cứu phương pháp tối ưu thuật toán để tái sử dụng dữ liệu, giảm thời gian
xử lý và giảm gánh nặng cho hệ thống
Trang 9KHOA ĐIỆN ĐIỆN TỬ BỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN
ĐỘC LẬP – TỰ DO – HẠNH PHÚC
o0o NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
Ngành: Công nghệ kỹ thuật Điều khiển và Tự động hóa Lớp: 1815CL3B Giáo viên hướng dẫn: TS Nguyễn Văn Thái
Tên đề tài: Lập trình thuật toán xử lý ảnh và thiết kế, lập trình các chức năng cho
phần mềm của máy đếm khuẩn lạc SCAN
1 Nội dung đề tài và khối lượng công việc thực hiện: Hoàn thành các nội dung đặt
ra của đề tài Cụ thể là:
● Lựa chọn thiết bị cho máy scan ● Nghiên cứu, lập trình thuật toán xử lý ảnh để tách và đếm khuẩn lạc ● Nghiên cứu, lập trình cơ chế giao tiếp để truyền nhận thông tin giữa Python và
C#.NET ● Lập trình môi trường phầm mềm độc lập chứa toàn bộ thư viện software của thiết
bị, cho phép dễ dàng chia sẻ dự án ● Nghiên cứu, lập trình thuật toán và xây dựng logic user cho các chức năng quan
trọng trong phầm mềm, xây dựng code mang tính kế thừa ● Nghiên cứu phương pháp tối ưu thuật toán để tái sử dụng dữ liệu, giảm thời gian
Trang 11TRƯỜNG ĐẠI HỌC SPKT TP.HỒ CHÍ MINH
KHOA ĐIỆN ĐIỆN TỬ BỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN
CỘNG HÓA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP – TỰ DO – HẠNH PHÚC
o0o LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP
Tên đề tài: Lập trình thuật toán xử lý ảnh và thiết kế, lập trình các chức năng cho
phần mềm của máy đếm khuẩn lạc SCAN
XÁC NHẬN
GV
1
Tuần 1 28/8-10/9
Gặp GVHD để được phổ biến quy định và xác nhận đề tài Tìm hiểu và làm rõ yêu cầu tính năng của phần mềm và thiết bị của dự án Lên ý tưởng, tìm hiểu các thiết bị chiếu sáng, camera Lựa chọn thiết bị và đặt hàng thiết bị
2
Tuần 2 11/9-17/9
Nhận linh kiện đặt hàng, kiểm tra chế độ sáng phù hợp cho thiết bị
3
Tuần 3, 4, 18/9 – 15/10
Nghiên cứu nhiều thuật toán xử lý ảnh để tìm ra thuật toán phù hợp để giải quyết bài toán Lập trình thuật toán để đếm và hiển thị các vi khuẩn
Thu thập dữ liệu từ công ty Hỗ trợ label vi khuẩn để tạo data cho việc train AI
4
Tuần 5, 6, 7 15/10 – 20/10
Tinh chỉnh lại thuật toán xử lý ảnh để phù hợp với luồng đi của hệ thống
Thu thập dữ liệu từ công ty
Trang 125
Tuần 8 21/10 – 23/10
Nghiên cứu lập trình giao diện chức năng trên platform WPF của C#.NET
6 Tuần 9, 10, 11 23/10 – 12/11
Thiết kế luồng và lập trình thuật toán cho các tính năng Back, Next, Clear, SendAuto
7
Tuần 12 13/11 – 19/11
Nghiên cứu phương thức thực hiện giao tiếp giữa thành phần Python và C#.NET của hệ thống
8
Tuần 13, 14 20/11 – 3/12
Thiết kế luồng và lập trình thuật toán cho các tính năng Edit, Remove Bacteria, Add Bacteria, Segment, Add Segment, Send Segment, Increase and Decrease Quantity Remove-Add Bacteria
9
Tuần 15, 16 4/12 – 17/12
Nghiên cứu và lập trình tạo môi trường ảo Lập trình thuật toán chạy chương trình Python từ một chương trình C#.NET
10
Tuần 17, 19 18/12 – 31/12
Sửa lỗi phần mềm, tối ưu thuật toán, hiệu chỉnh phần cứng
11 Tuần 19, 20, 21
1/1– 20/1 Viết báo cáo đồ án
Giảng viên hướng dẫn
(Ký và ghi rõ họ và tên)
Trang 13CHƯƠNG 1 TÓM TẮT 1
2.1.1 42.1.2 52.2 Thuật toán tìm điểm cực đại cục bộ trong ma trận 7
2.2.1 72.2.2 7
2.3.1 92.3.2 102.4 Phương pháp giao tiếp Named Pipes Communication và Win32API 11
2.7 Tầm quan trọng của ánh sáng trong thị giác máy tính 152.7.1 19
2.7.2 19
Trang 143.1 Thiết kế phần cứng 193.1.1 22
4.3 Kết quả của thuật toán xử lý ảnh phân tách vi khuẩn 78
Trang 154.7 Kết quả sử dụng chức năng Undo và Redo 82
4.10 Kết quả khi sử dụng chức năng Segment Process 884.11 Kết quả sử dụng chức năng Edit cho chế độ Segment Processing 89
Trang 16Hình 2-1 (A) và (C) ảnh gốc, (B) và (C) ảnh khi áp dụng distance transform 6
Hình 2-3 Mô tả thuật toán watershed theo nguyên lý nước dâng 10
Hình 2-4 (A) là ảnh gốc và (B) là kết quả đầu ra của thuật toán Watershed 11
Hình 2-6 So sánh hình ảnh ánh sáng kém(bên trái) và hình ảnh ánh sáng tốt (bên phải)
15
Hình 3-11 a) là ảnh gốc và b) là output quá trình huấn luyện AI 27
Hình 3-12 ) Ảnh gốc và b) ví dụ minh họa hình ảnh kết quả của thuật toán distance
28
Hình 3-14 a) Ảnh gốc b) Output của Unet c) Kết quả đếm sai d) Kết quả đếm đúng
Hình 3-16 Sơ đồ tổ chức phương thức trong ScanClass ở Producer 31
Trang 17Hình 3-20 Một số hình ảnh gốc (bên trái) và hình ảnh được hiển thị lên giao diện cùng
Hình 3-21 Hình ảnh chức năng Undo và Redo trong ứng dụng 37
Hình 3-23 Sơ đồ thuộc tính của lớp StatefulPointBackAtion 38
Hình 3-24 Sơ đồ mô tả nguyên lý hoạt động của chức năng Undo và Redo 39
Hình 3-25 Hình ảnh bộ chức năng Segment trong ứng dụng 40
Hình 3-30 Sơ đồ thuật toán hàm CropPolies trong chức năng Segment Process 48
Hình 3-31 Sơ đồ thuật toán hàm getContoursWithinSegments 50
Hình 3-33 Mô tả tác vụ của bộ chức năng Edit cho chế độ Auto Process 53
Hình 3-34 Sơ đồ thuật toán của phương thức lưu trữ dữ liệu và hiển thị các điểm người
Hình 3-35 Sơ đồ thuật toán chức năng Remove Bacteria 56
Hình 3-37 Mô tả tác vụ của bộ chức năng Edit cho chế độ Segment Process 60
Hình 3-38 Sơ đồ thuật toán của phương thức lưu trữ dữ liệu thuộc vùng đa giác và hiển
Hình 3-39 Sơ đồ thuật toán bậc tiền xử lý của hàm ProcessStatefulPoint 62
Hình 3-40 Sơ đồ thuật toán của phương thức DeleteContourAt 62
Hình 3-41 Sơ đồ thuật toán bậc hậu xử lý của hàm ProcessStatefulPoint 64
Hình 3-42 Sơ đồ thuật toán xây dựng chuỗi lệnh của hàm BuildCommand 67
Hình 3-43 Sơ đồ thuật toán đọc và xử lý dữ liệu của Python trả về của hàm
Hình 3-44 Sơ đồ thuật toán đọc thực hiện gửi lệnh thực thi đến Python 69
Hình 3-45 Sơ đồ thuật toán thiết lập kết nối với Python 70
Trang 18Hình 4-2 Vi khuẩn Coliform (hình ảnh thuộc bản quyền của SGS) 74
Hình 4-3 Vi khuẩn Enterococcus (hình ảnh thuộc bản quyền của SGS) 75
Hình 4-4 Vi khuẩn Enterococcus (hình ảnh thuộc bản quyền của SGS) 75
Hình 4-8 Kết quả màn hình khi nhấn chọn Auto Process 77
Hình 4-9 Kết quả màn hình chỉnh sửa khi xóa ba vi khuẩn ở chế độ Automatic
Hình 4-10 Kết quả màn hình chỉnh sửa khi thêm hai vi khuẩn ở chế độ Automatic
Hình 4-11 Kết quả màn hình chỉnh sửa vi khuẩn khi nhấn Undo 80
Hình 4-12 Kết quả màn hình chỉnh sửa vi khuẩn khi nhấn Redo 81
Hình 4-13 Kết quả màn hình khi nhấn Undo sau khi vẽ môt đa giác 82
Hình 4-14 Kết quả màn hình khi nhấn Redo sau khi vẽ môt đa giác 83
Hình 4-17 Kết quả màn hình hiển thị và đếm số vi khuẩn ở trong vùng đa giác 85
Hình 4-18 Kết quả màn hình chỉnh sửa khi xóa ba vi khuẩn ở chế độ Segment
Hình 4-19 Kết quả màn hình thông báo không được chỉnh sửa ở ngoài vùng đa giác
87
Trang 19Bảng 2-2 Ma trận sau khi được thuật toán bắt đầu xử lý 5
Bảng 2-3 Ma trận sau khi được thuật toán bắt đầu xử lý 5
Bảng 2-4 Ma trận sau khi được thuật toán bắt đầu xử lý 6
Bảng 3-4 Bảng miêu tả doom light IDS5-00-100-1-W-24V 23
Bảng 3-5 Bảng thông số kỹ thuật của doom light IDS5-00-100-1-W-24V 24
Bảng 3-7 Thông số kỹ thuật của back light BHS4-00-100-X-W-24V 25
Bảng 3-9 Bảng thông số kỹ thuật của bộ nguồn ANG-2000-CH2-24V-A1 26
Trang 20WPF: Windows Presentation Foundation FPS: Frames per second
API: Application Programming Interface OOP: Object-Oriented Programming CMD: Command Prompt
Trang 21
Vi khuẩn có những đặc tính tích cực đặc biệt có thể có ảnh hưởng tích cực đối với sự phát triển của cây trồng Những vi khuẩn này thường xuất hiện trong đất, mang theo khả năng cung cấp chất dinh dưỡng cho cây, đồng thời đối phó với vi khuẩn gây hại, từ đó kích thích sự phát triển và năng suất của cây Đóng góp của chúng không chỉ làm cho đất trở nên màu mỡ mà còn cung cấp các yếu tố cần thiết, hỗ trợ quá trình phát triển khỏe mạnh của cây
Tuy nhiên, không phải tất cả các vi khuẩn đều mang lại lợi ích Một số loại vi khuẩn có thể gây tác động tiêu cực Ví dụ, sự xuất hiện của vi khuẩn Escherichia coli (E.coli) trong thực phẩm thường là dấu hiệu của sự ô nhiễm, tiềm ẩn nguy cơ gây bệnh cho con người Rủi ro ô nhiễm này thường liên quan đến việc tiêu thụ thực phẩm như thịt bò xay chưa chín kỹ, sữa và nước trái cây chưa được tiệt trùng, phô mai mềm từ sữa sống, cũng như rau củ sống Ngoài ra, việc phát hiện E.coli trong nước thường được sử dụng như một chỉ số của sự ô nhiễm gần đây
Nhiều tổ chức, phòng thí nghiệm và cơ quan đang quan tâm đến việc thiết lập các quy trình, tiêu chí và chuẩn mực cho phân tích vi sinh liên quan đến việc đếm số lượng vi khuẩn trên nền tảng chất lỏng Tiêu chuẩn Việt Nam TCVN 11039-2015 về Phụ gia thực phẩm - Phân tích vi sinh, đã quy định phương pháp xác định tổng số vi sinh vật không yếu tố ô nhiễm trong các phụ gia thực phẩm bằng kỹ thuật đếm trên đĩa, và phương pháp này được mô tả chi tiết trong tiêu chuẩn [1]
Bộ đếm khuẩn lạc là một thiết bị được sử dụng để đo lường số lượng khuẩn hoặc các vi sinh vật khác phát triển trên đĩa thạch, còn được biết đến là đĩa Petri Theo phương pháp truyền thống, quy trình đếm thủ công sẽ thực hiện việc đánh dấu bề mặt ngoại cùng của đĩa bằng một cây bút lông và theo dõi số được đánh dấu Tuy nhiên, phương pháp thủ công này tốn thời gian và sức lực, nó phụ thuộc vào thị giác và sự tập trung của người thực hiện Hơn nữa, khi đối mặt với một số lượng lớn các khuẩn, kết quả đếm thủ công có thể thay đổi giữa các nhà sinh học khác nhau Sự biến động này xuất phát từ việc các phương pháp đếm cho các tụy có mật độ cao thường liên quan đến các kỹ thuật ước lượng, tập trung vào một phần nhỏ của đĩa
Trang 22trưởng đặc biệt chứa các chất dẫn xuất fluorogenic Phương pháp này rất hữu ích để phát hiện các khuẩn lạc nhưng chất dẫn xuất fluorogenic có chi phí cao
Trong các nghiên cứu gần đây về bộ đếm khuẩn lạc dựa trên xử lý hình ảnh và các bài báo khoa học [2][3][4], việc lập trình xử lý ảnh và thiết kế, lập trình các chức năng chuyên nghiệp cho một máy SCAN để tách, đếm các khuẩn lạc và thực hiện các tác vụ chuyên môn, tôi sẽ thực hiện các nhiệm vụ sau đây:
• Nghiên cứu thiết bị hệ thống ánh sáng của máy SCAN
• Thu thập dữ liệu về các khuẩn lạc, phân tích và hỗ trợ gắn nhãn cho dữ liệu
• Lập trình hiển thị kết quả đếm lên ứng dụng được thiết kế
• Lập trình ứng dụng cho phép người dùng tương tác và thực hiện các tác vụ chuyên nghiệp
Trang 23CHƯƠNG 1 TÓM TẮT
1.1 Vấn đề hiện nay
Đếm các tụy vi khuẩn thủ công đòi hỏi sự phân biệt thị giác dựa trên kích thước và hình dạng của chúng, với việc giữ đếm được thực hiện bằng cách tư duy hoặc viết ra giấy Tuy nhiên, phương pháp này dễ bị sai sót do yếu tố con người và có thể bị ảnh hưởng bởi thiên hướng nghiên cứu Hơn nữa, nếu thực hiện đếm thủ công, chúng ta sẽ mất rất nhiều thời gian, đặc biệt là nếu mẫu có quá nhiều vi khuẩn
Có nhiều phương pháp để nuôi cấy và đếm vi khuẩn trong phòng thí nghiệm Tuy nhiên, người ta thường sử dụng các bộ đếm tụy cầm tay trong các phòng thí nghiệm nhỏ, trường đại học hoặc bệnh viện, để xác định số lượng vi khuẩn trong một mẫu Mặc dù phương pháp này chi phí thấp, nhưng tốn thời gian và không thuận tiện cho việc lưu trữ dữ liệu dài hạn
Đối với những thiết bị hỗ trợ việc đếm thủ công có giá thành rẻ nhưng không đáp ứng đủ yêu cầu về mặt kỹ thuật cũng như hỗ trợ người dùng thực hiện những tác vụ đặc biệt trong việc đếm một dĩa mẫu Những thiết bị có sử dụng các chức năng chuyên nghiệp thì giá thành lại quá cao
Nhận thức được vấn đề này, tôi hết sức mong muốn phát triển một thiết bị và phần mềm quét vi khuẩn cho hệ điều hành Windows Thiết bị này sẽ kết nối mượt mà với máy tính cá nhân qua cổng USB, kết quả sẽ được xuất ra file PDF hoặc excel nhầm mục đích thuận tiện cho việc lưu trữ dữ liệu và trao đổi cho người dùng
1.2 Mục tiêu
Mục tiêu được đề ra là lập trình thuật toán xử lý ảnh để tách và đếm được các vi khuẩn trong đĩa mẫu, thiết kế ứng dụng phầm mềm hỗ trợ cho người dùng thao tác thực hiện các nghiệp vụ chuyên môn bao gồm các tính năng xử lý bức ảnh mẫu, chỉnh sửa và vẽ vùng loại trừ đa giác
1.3 Phạm vi nghiên cứu
● Nghiên cứu hệ thống chiếu sáng cho thiết bị ● Nghiên cứu thuật toán xử lý ảnh để giải quyết bài toán tách và đếm khuẩn lạc ● Nghiên cứu và tối ưu hóa phương thức cơ chế giao tiếp giữa trong môi trường
Windows
Trang 24● Thiết kế và xây dựng thuật toán để lập trình các chức năng cho ứng dụng và giải quyết bài toán logic user
● Nghiên cứu đồng bộ ứng dụng với nhiều thiết bị máy tính
1.4 Giới hạn nghiên cứu
Do thời gian có hạn và dữ liệu hạn chế nên các điều kiện sau đây không đạt được: ● Chỉ có thể đếm trên đĩa petri và với một số loại vi khuẩn được thu thập nhiều dữ
liệu ● Ứng dụng chỉ có thể xử dụng trên hệ điều hành Windows ● Do tính chất đặc thù của dự án nên sẽ có giới hạn tối thiểu cho các loại máy tính
xách tay của người dùng
1.5 Nội dung nghiên cứu
● Nghiên cứu, phân tích và đánh giá các quần thể khuẩn lạc ● Nghiên cứu các cách nuôi cấy khuẩn lạc, các môi trường nuôi cấy, cách đếm khuẩn
lạc và các loại khuẩn ● Nghiên cứu hệ thống thiết bị chiếu sáng trong lĩnh vực y sinh, camera và lens,
nguồn điện cho hệ thống đèn ● Nghiên cứu về thuật toán Distance Tranformation, thuật toán tìm điểm cực đại cục
bộ, thuật toán WaterShed ● Nghiên cứu phương thức giao tiếp Named Pipes Communication ● Nghiên cứu tính kế thừa trong lập trình hướng đối tượng cho C#.NET và Python ● Nghiên cứu xây dựng luồng đi cho phầm mềm
● Nghiên cứu phương pháp Virtual Environment trong Python ● Nghiên cứu và thiết kế thuật toán để lập trình các function của ứng dụng và logic
user ● Nghiên cứu tối ưu hóa thuật toán và ứng dụng
1.6 Cấu trúc báo cáo
Chương 1: Tóm tắt
Trang 25Giới thiệu và trình bày lý do chọn đề tài, mục tiêu, nội dung nghiên cứu, giới hạn nghiên cứu
Chương 2: Cơ sở lý thuyết
Giới thiệu kiến thức liên quan như lý thuyết thuật toán xử lý ảnh để tách và đếm đối tượng Bên cạnh đó, còn có phương thức giao tiếp giữa hai ngôn ngữ lập trình, tính kế thừa trong lập trình hướng đối tượng, môi trường cô lập trong lập trình
Chương 3: Xây dựng luồng, lập trình hệ thống và triển khai
Trình bày cụ thể sơ đồ thiết bị chiếu sáng và triển khai phần mềm, giải thích sơ đồ thuật toán xử lý ảnh, cấu trúc phương thức giao tiếp, cấu trúc thuật toán, luồng của các chức năng trong ứng dụng
Chương 4: Kết quả và đánh giá
Trình bày kết quả đạt được của đề tài, đánh giá đề tài
Chương 5: Kết luận và hướng phát triển
Trình bày kết luận của tôi về kết quả của nghiên cứu và định hướng phát triển trong tương lai cho đề tài này
Trang 26CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1 Thuật toán Distance Transformation 2.1.1 Giới thiệu
Thuật toán Distance Transform (biến đổi khoảng cách) là phương pháp xử lý ảnh dùng để tính toán khoảng cách của mỗi điểm ảnh trong không gian hình ảnh đến một đối tượng hoặc một ranh giới gần nhất Đầu vào của thuật toán là một ảnh nhị phân, trong đó giá trị của mỗi pixel là 0 hoặc 1 Và đâu ra của thuật toán sẽ là một ma trận hoặc là một bản đồ khoảng cách Một bức ảnh có thể được chia thành các thành phần như sau:
● Điểm đối tượng là những điểm trực tiếp cấu thành lên đối tượng Trong ảnh nhị phân, điểm đối tượng sẽ là những điểm có giá trị bằng 1
● Điểm nằm ngoài đối tượng được hiểu là điểm nền Trong ảnh nhị phân, điểm này là những điểm có giá trị bằng 0
● Giao của điểm đối tượng và điểm nằm ngoài đối tượng được gọi là biên ảnh
Các phương pháp Distance Transform thường sử dụng các độ đo khoảng cách như khoảng cách Euclidean hoặc khoảng cách Manhattan để đo lường sự chênh lệch giữa các điểm trong không gian hình ảnh Khoảng cách Manhattan, hay còn được gọi là khoảng
cách L1, giữa hai điểm (𝑥1; 𝑦1) và (𝑥2; 𝑦2) trong không gian 2D được tính bằng công thức:
d(x;y) = |𝑥2− 𝑥1| + |𝑦2 − 𝑦1| Trong đó:
(𝑥2; 𝑦2) là điểm ảnh đang xét (𝑥1; 𝑦1) là điểm ảnh gần nhất thuộc đối tượng hoặc ranh giới
Trang 272.1.2 Nguyên lý của thuật toán Distance Transformation [6]
Thuật toán Distance Transform thực hiện chuyển một bức ảnh từ các pixel trong đó đang thể hiện giá trị độ sáng của pixel thành một bức hình mới có cùng kích thước với bức hình gốc, nhưng bây giờ mỗi một pixel không thể hiện độ sáng của điểm ảnh nữa mà là chứa giá trị khoảng cách đến vùng có điểm nằm ngoài đối tượng gần nhất Để hiểu rõ hơn về thuật toán, ví dụ dưới đây sẽ mô tả chi tiết thuật toán
Giả sử đây là ma trận nhị phân của ảnh:
Bảng 2-1 Ma trận nhị phân của một bức ảnh
0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255 0 0 255 255 255 255
Sau khi qua xử lý của thuật toán distance transform thì ở điểm nằm ngoài đối tượng có giá trị mới sẽ là d(0;0) = 0 Tương tự, ta có d(1;1) = 0
Bảng 2-2 Ma trận sau khi được thuật toán bắt đầu xử lý
0 0 0 0 0 0 0 0
Và khi đến các điểm biên ảnh như điểm có tọa độ (2;2), d(2;2) có giá trị bằng 1 Tượng tự như điểm biên ảnh có tọa độ (3;2) thì d(3;2) = 1 Càng đến gần vị trí có giá trị pixel cao nhất thì giá trị d sẽ càng tăng dần Ví dụ tại tọa độ (3;3) thì d(3;3) sẽ bằng 2
Bảng 2-3 Ma trận sau khi được thuật toán bắt đầu xử lý
Trang 28Hiệu ứng giá trị tăng dần từ điểm biên ảnh đến điểm xa vùng nằm ngoài đối tượng và ở vị trí ấy sẽ là d max
Bảng 2-4 Ma trận sau khi được thuật toán xử lý
Trang 29Khu vực lân cận hay vùng lân cận là một vùng xung quanh một điểm cụ thể trong không gian, thường được định nghĩa trong bối cảnh ma trận Kích thước của khu vực lân cận được quyết định bởi tham số trong thuật toán
Trang 30● Tham số (Parameter): giả sử tham số của thuật toán là min_distance = 1 và không có ngưỡng tuyệt đối
● Bước 1: Lọc theo ngưỡng Nếu có ngưỡng tuyệt đối thì những giá trị tại điểm ảnh nhỏ hơn ngưỡng sẽ bị loại bỏ Nếu không có ngưỡng, thì tất cả các giá trị đều sẽ được giữ lại
● Bước 2: Xác định điểm cực đại cục bộ Duyệt qua mỗi điểm trong ma trận đã lọc Vùng lân cận sẽ là một mặt nạ 3x3 nếu như tham số min_distance = 1 sẽ quét từ trái sang phải và từ trên xuống dưới trong ma trận ảnh Bắt đầu từ góc trên cùng bên trái của ma trận và tiếp tục theo hàng, sau đó di chuyển xuống hàng kế tiếp và tiếp tục quét Quá trình này được thực hiện cho tất cả các điểm ảnh trong ma trận Dựa vào ma trận ở Bảng 2-5 thì
vùng lân cận là vùng màu xám ở bảng dưới đây
Bảng 2-6 Mặt nạ 3x3 của vùng lân cận quét lần 1
1 2 3 4 5 2 4 5 3 2 3 5 6 2 1 4 3 2 1 0 5 2 1 0 1
Trong vùng lân cận đang xét có giá trị lớn nhất là 6 Nên điểm này sẽ được xác định là giá trị cực đại cục bộ Tiếp tục mặt nạ di chuyển sang phải
Bảng 2-7 Mặt nạ 3x3 của vùng lân cận quét lần 2
1 2 3 4 5 2 4 5 3 2 3 5 6 2 1 4 3 2 1 0 5 2 1 0 1
Trang 31Trong vùng lân cận đang xét có giá trị lớn nhất cũng là 6 Nên điểm này sẽ được xác định là giá trị cực đại cục bộ Cứ như thế mặt nạ sẽ quét đến hết các giá trị điểm ảnh trong ma trận và tìm ra được giá trị cực đại cục bộ trong ma trận đó
● Bước 3: Lọc các điểm gần nhau Áp dụng một số ngưỡng khoảng cách để giữa lại một số điểm tối ưu Kết quả trả cuối cùng trả về là một mảng chứa chỉ số của các điểm cực đại cục bộ, đối ma trận ảnh Bảng 2-5 trên thì mảng trả về sẽ là [(2,2)]
2.3 Thuật toán WaterShed [5] 2.3.1 Giới thiệu
Thuật toán Watershed (lưu vực) đã trở thành một công cụ quan trọng trong lĩnh vực xử lý ảnh như sinh học và y tế, thị giác máy tính, đặc biệt là trong việc phân đoạn hình ảnh để tìm ra ranh giới giữa các vùng có ý nghĩa khác nhau Về tính chất địa lý, lưu vực có nghĩa là các rặng núi phân chia các khu vực bị ngập nước khác nhau Nếu một ảnh được xem là cảnh quan địa chất thì các đường phân thủy sẽ xác định ranh giới tách các vùng trong tấm ảnh Thuật toán watershed mục đích là để phát hiện và xác định các đường phân cách các vùng khác nhau trong ảnh, tách biệt và phân loại các vùng ảnh dựa trên thuộc tính như độ sáng, cấu trúc Điều này hữu ích trong nhiều ứng dụng, chẳng hạn như nhận diện vật thể, đếm đối tượng, hay phân loại vùng quan trọng
Trang 32
Hình 2-2 Hình ảnh minh họa thuật toán watershed
(ImageSource: https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=13e24d36b34aa75
2.3.2 Nguyên lý của thuật toán watershed
Thuật toán watershed dựa theo nguyên lý nước dâng Ví ảnh đầu vào như là một vùng địa hình với các vùng trũng nhất là nơi có điểm có giá trị mức xám nhỏ nhất Bây giờ, nước bắt đầu dâng từ những điểm này lên đến bề mặt Khi mực nước dâng lên ngày một cao, các lưu vực sẽ sát nhập với nhau Để ngăn cản sự sát nhập này, một con đập sẽ được
Trang 33xây lên ở đường giao nhau của hai lưu vực Khi nước dâng lên tới đỉnh điểm mà chỉ còn nhìn thấy đường con đập thì những đường này sẽ được gọi là đường phân thủy
Để hiểu rõ hơn thuật toán này, những hình ảnh dưới đây sẽ mô tả chi tiết thuật toán
Bắt đầu từ điểm local minimum, nước sẽ bắt đầu dâng từ điểm local minimum và lan tỏa ra các điểm có giá trị cường độ lớn hơn, các điểm này là tập hợp các điểm trong lưu vực của local minimum và tạo ra các bồn nước
Gọi n là số lần nước dâng, thì địa hình sẽ bị ngập tang lên theo số nguyên, tù n = min + 1 đến n = max + 1
Khi nước từ các điểm local minimum lan tỏa và gặp nhau, các bồn nước sẽ bắt đầu hợp nhất và tạo thành các vùng riêng biệt
Trong quá trình lấp đầy nước sẽ khởi tạo một bản đồ nhãn tạm thời có cùng kích thước với hình ảnh ban đầu
Bảng 2-8.Bảng đồ nhãn tạm thời
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bản đồ nhãn tạm thời sẽ trở thành bản đồ nhãn cuối cùng khi quá trình hợp nhất của các bồn nước hoàn thành Mỗi vùng sẽ có một nhãn duy nhất đại diện cho mỗi lưu vực
Bảng 2-9 Ma trận hình ảnh ban đầu
1 2 3 4 5 2 9 5 3 2 3 5 6 2 1 4 3 2 1 12 0 0 1 1 1
Gọi L là điểm local minimum:
Trang 34● Điểm L1 (1;1) có giá trị là 9 ● Điểm L2 (4;3) có giá trị là 12 ● Hai điểm L1 và L2 là điểm cực đại cục bộ được tìm thấy ở bước tìm điểm cực
đại cục bộ
Bảng 2-10 Ma trận được gắn nhãn độc lập
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0
Bảng 2-11 Bản đồ nhãn sau quá trình Watershed
1 1 1 2 2 1 1 1 2 2 1 1 1 2 2 1 1 1 2 2 0 0 2 2 2
Nước bắt đầu lắp đầy từ 2 điểm L1 và L2 tạo thành 2 vùng phân loại là nhãn 1 và 2 Để tránh trường hợp nước tràn thì tham số “mask” trong hàm watershed sẽ hạn chế phân đoạn ở những vùng có giá trị 0
Trang 35Hình 2-3 Mô tả nguyên lý hoạt động của thuật toán watershed
Hình 2-3 Mô tả thuật toán watershed theo nguyên lý nước dâng
(ImageSource: https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=13e24d36b34aa75
e6468d0ce681b4f3ce3789b51)
Trong đó: (A): Là ảnh gốc (B): Là giai đoạn nước bắt đầu dâng (C): Nước dâng cao hơn, đập chắn nước bắt đầu được hình thành (D): Đập chắn nước được hình thành dài hơn do việc sát nhập nước liên tục (E): Các đường phân đoạn được hình thành
Đầu vào của thuật toán thường là một ảnh đen trắng hoặc ảnh xám nhưng trong một số tình huống thì đầu vào của thuật toán sẽ là một ma trận Đầu ra của thuật toán này thường
Trang 36là một ảnh đã được gắn nhãn Trong đó, mỗi vùng đươc đánh nhãn sẽ được tô màu khác nhau Các ranh giới giữa các vùng được xác định bởi thuật toán cũng được hiển thị
(A) (B)
Hình 2-4 (A) là ảnh gốc và (B) là kết quả đầu ra của thuật toán Watershed
2.4.1 Giới thiệu
Phương pháp Named Pipes Communication hay còn được gọi tắt là Named Pipes không phải là một API (Application Programming Interface) theo nghĩa thông thường mà là một cơ chế giao tiếp giữa các tiến trình (inter-process communication) hoặc luồng trên cùng một máy tính trong môi trường Windows Named Pipes thường được sử dụng trong các kịch bản giao tiếp nội bộ, và hiệu suất của nó thường tốt trong ngữ cảnh đó
Bên cạnh đó, Named Pipes là một phương tiện của hệ điều hành Windows để hỗ trợ giao tiếp giữa các thành phần khác nhau của phần mềm, do đó có sự phụ thuộc vào hỗ trợ và cấu hình máy tính Cụ thể, Named Pipes không phải là một phương thức chung có sẵn trên tất cả các hệ điều hành Nếu cố gắng sử dụng Name Pipes qua Internet, rất có thể sẽ gặp phải các vấn đề về bảo mật và định tuyến
Để thao tác với Named Pipes trong môi trường Windows, chúng tôi sử dụng các hàm API được cung cấp bởi Win32API
Win32API là một bộ các giao diện lập trình ứng dụng được cung cấp bởi Microsoft cho hệ điều hành Windows API này chứa các hàm, cấu trúc dữ liệu giúp tương tác với hệ điều hành và các tài nguyên hệ thống
Dưới đây là một số đặc điểm chính về Named Pipes:
Trang 372.4.1.1 Định dạng đặc tính
Name Pipes có thể được sử dụng đồng thời trong hai chế độ: đồng bộ và bất đồng bộ Trong chế độ đồng bộ, các tiến trình phải đợi cho đến khi dữ liệu được chuyển giao hoặc nhận xong trước khi tiếp tục thực hiện công việc khác
Trong chế độ bất đồng bộ, các tiến trình có thể tiếp tục thực thi công việc của mình mà không cần đợi hoàn thành truyền nhận dữ liệu
2.4.1.2 Phân quyền và bảo mật
Named Pipes hỗ trợ quản lý quyền truy cập và bảo mật, giúp kiểm soát quyền truy cập và sử dụng pipe
Người dùng có thể cấu hình Named Pipes để giới hạn quyền truy cập và đảm bảo tính an toàn của giao tiếp
2.4.2 Quy trình phương pháp Named Pipes
Một quy trình của phương pháp Named Pipes như sau:
Trang 38Hình 2-5 Sơ đồ quy trình phương pháp Named Pipes
● Tạo Name Pipe:
Đầu tiên, một tiến trình hay một ứng dụng sẽ tạo name pipe bằng cách sử dụng các
hàm API hỗ trợ trên hệ điều hành Windows chẳng hạn như hàm “CreateNamePipe”
● Chờ kết nối: Tiến trình sở hữu name pipe sẽ chờ cho đến khi các tiến trình khác kết nối đến pipe Trong quá trình này, ống sẽ chấp nhận các kết nối từ các tiến trình khác
● Kết nối đến pipe: Các tiến trình khác muốn giao tiếp thông qua pipe thì phải sử dụng hàm “CreateFile” để tự mở kết nối đến ống có tên
● Truyền dữ liệu: Sau khi kết nối được thiết lập, các tiến trình sử dụng hàm như “ReadFile” và “WriteFile” để truyền dữ liệu qua pipe
● Đóng kết nối và đóng pipe:
Trang 39Khi hoàn thành giao tiếp, các tiến trình sẽ sử dụng hàm “CloseHandle” để đóng kết nối và giải phóng tài nguyên
● Xóa pipe (tùy chọn): Nếu không còn nhu cầu sử dụng pipe thì có thể xóa pipe bằng cách dùng hàm xóa tệp tin như “DeleteFile”
2.5 Virtual Environment trong Python [9]
Khi phát triển nhiều dự án Python trên cùng một máy tính, có thể xảy ra vấn đề khi một dự án yêu cầu một phiên bản cụ thể của một thư viện trong khi dự án khác yêu cầu một phiên bản khác hoặc một dự án trên nhiều máy tình sẽ xảy ra việc máy tính client không có phần mềm Python và client cũng không có nhu cầu để sử dụng một phần mềm Python chuyên nghiệp như lập trình viên Lúc này, môi trường ảo giải quyết vấn đề này bằng cách tạo ra một không gian làm việc độc lập được tạo ra để chứa các thư viện, module, và phiên bản Python cụ thể cho một dự án Giúp cách ly và tránh xung đột giữa các phiên bản của các thư viện
Các công cụ phổ biến cho việc quản lý môi trường ảo trong Python bao gồm “virtualenv” và “venv” Có thể sử dụng một trong những công cụ này để tạo một môi trường ảo mới
● Ví dụ, để tạo một môi trường ảo bằng “venv” trên cmd, có thể chạy bằng lệnh như:
“python -m venv [name_env]” ● Sau đó để kích hoạt môi trường ảo, sử dụng: “[name_env]\Scripts\activate.bat”
● Khi môi trường ảo được kích hoạt, sẽ có tên môi trường xuất hiện trước dấu nhắc ở đầu dòng lệnh
Có thể cài đặt các thư viện, module cụ thể của dự án bằng các sử dụng “pip install”, và các phiên bản của thư viện sẽ được quản lý chỉ trong phạm vi môi trường ảo đó Điều này giúp giảm nguy cơ xung đột giữa cá dự án và đảm bảo tính nhất quán của môi trường phát triển
Trang 402.6 Tính kế thừa trong lập trình đối tượng [10]
Lập trình hướng đối tượng (OOP) là một mô hình lập trình mà mọi thứ trong chương trình được coi là một “đối tượng” Đối tượng này có thể bao gồm dữ liệu, thuộc tính, phương thức hoặc là hàm Mô hình OOP tập trung vào việc tổ chức các phương thức hay hàm thành các “đối tượng” để có thể thao tác với nhau, tạo ra một cách có tổ chức và quản lý chúng hiệu quả
Kế thừa là một khái niệm quan trọng trong lập trình hướng đối tượng, mang lại hiệu quả cao trong lập trình Nó cho phép tái sử dụng phương thức hay hàm và tạo tính linh hoạt trong thiết kế hệ thống
Các phương thức của lớp giúp đóng gói chức năng cụ thể vào các phương thức cụ thể, làm cho mã dễ đọc và duy trì
Về cơ bản, tính kế thừa là quá trình mà một lớp con có thể sử dụng tất cả hoặc một số thuộc tính và phương thức của lớp cha Lớp con không chỉ có thể kế thừa những đặc điểm của lớp cha mà còn có thể mở rộng và định nghĩa lại để phù hợp với nhu cầu cụ thể của chính nó
2.7 Tầm quan trọng của ánh sáng trong thị giác máy tính
Ánh sáng rất quan trọng trong thị giác máy vì nó có ảnh hưởng lớn đến hiệu xuất và sự chính xác Việc lựa chọn ánh sáng thích hợp là điều rất cần thiết để đảm bảo kết quả có độ chính xác cao và đánh tin cậy Ánh sáng kém có thể dẫn đến giảm độ chính xác đáng kể Do đó, ánh sáng có chất lượng cao là rất quan trọng để có hiệu suất tối ưu
Hình 2-6 So sánh hình ảnh ánh sáng kém(bên trái) và hình ảnh ánh sáng tốt (bên
phải) (Image source: https://www.xulyanhcongnghiep.com/anh-sang-trong-xu-ly-anh-cong-