Download as pdf or txt
Download as pdf or txt
You are on page 1of 57

TRƯỜNG ĐẠI HỌC PHENIKAA

KHOA ĐIỆN – ĐIỆN TỬ


----------

BÀI TẬP LỚN MÔN XỬ LÝ ẢNH Y TẾ

ĐỀ TÀI: TÌM HIỂU CÁC KỸ THUẬT XỬ LÝ ẢNH Y


TẾ ÁP DỤNG TRÊN ẢNH X-QUANG NGỰC, MRI
BỤNG VÀ ĐÙI

Sinh viên thực hiện Trần Thị Xuân Ninh


MSSV: 19010255
Lớp: K13 KTYS

Giảng viên hướng dẫn Nguyễn Văn Tới

Hà Nội, tháng 5 năm 2023

1
MỤC LỤC
LỜI NÓI ĐẦU .................................................................................................................... 3
CHƯƠNG I: TỔNG QUAN ................................................................................................. 4
1.1. Giới thiệu chung về xử lý ảnh y tế........................................................................... 4
1.2. Các cơ sở dữ liệu ....................................................................................................... 7
1.3. Các định dạng ảnh..................................................................................................... 8
CHƯƠNG II. CÁC KỸ THUẬT XỬ LÝ ẢNH Y TẾ THỰC HIỆN TRÊN GOOGLE COLAB 11
1. Hiển thị ảnh ........................................................................................................... 11
2. Truy xuất giá trị ảnh............................................................................................... 12
3. Đường viền ảnh ...................................................................................................... 12
4. Đổi màu ảnh........................................................................................................... 15
5. Ảnh âm bản ........................................................................................................... 17
6. Thay đổi độ sáng .................................................................................................... 19
7. Thay đổi độ tương phản .......................................................................................... 21
8. Gamma correction .................................................................................................. 23
9. Tính, hiển thị, cân bằng histogram ........................................................................... 24
10. Nhiễu Trung bình Averaging ............................................................................... 27
11. Nhiễu Gaussian ................................................................................................... 28
12. Median Blurring ................................................................................................. 30
13. Bilateral Filtering................................................................................................ 31
14. Image Gradients ................................................................................................. 33
15. Phát hiện cạnh canny........................................................................................... 34
16. Ngưỡng ảnh (đặt giá trị, thích ứng, otsu)............................................................... 36
17. Phân đoạn ảnh, thuật toán đầu nguồn................................................................... 42
18. Phép toán hình thái ............................................................................................. 45
19. SIFT................................................................................................................... 48
20. Feature matching ................................................................................................ 49
21. Homography....................................................................................................... 52
KẾT LUẬN ...................................................................................................................... 55
TÀI LIỆU THAM KHẢO.................................................................................................. 57

2
LỜI NÓI ĐẦU

Trong thời gian gần đây, việc áp dụng các kỹ thuật xử lý ảnh y tế trên ảnh chụp
X-quang và MRI của các cơ quan trên cơ thể đã trở thành một lĩnh vực nghiên
cứu quan trọng trong lĩnh vực y học. Công nghệ thông tin đã mang lại những tiến
bộ đáng kể trong việc phân tích và chẩn đoán hình ảnh y tế, tạo ra những khả năng
mới để hiểu và đánh giá các bệnh lý.

Truyền thống, việc chẩn đoán bệnh lý dựa trên ảnh X-quang và MRI yêu cầu sự
can đảm và kinh nghiệm lâu năm của các chuyên gia y tế. Tuy nhiên, việc đánh
giá đồng nhất và chính xác giữa các bác sĩ và giảm thiểu sai sót là một thách thức
lớn. Đây là lý do tại sao các kỹ thuật xử lý ảnh y tế đã trở thành một phần quan
trọng trong quá trình chẩn đoán hình ảnh và nghiên cứu y học.

Đề tài này nhằm mục đích tìm hiểu và xem xét các kỹ thuật xử lý ảnh y tế được
áp dụng trên ảnh chụp X-quang và MRI của ba bộ phận quan trọng của cơ thể
người: ngực, bụng và đùi. Tôi sẽ trình bày các thuật toán xử lý ảnh được sử dụng
để cải thiện chất lượng ảnh X-quang, tăng cường độ sáng, tương phản, loại bỏ
nhiễu và giảm thiểu sự mất mát thông tin, cũng như các thuật toán phân đoạn và
các phép toán hình thái…

Bằng việc tìm hiểu và áp dụng các kỹ thuật xử lý ảnh y tế trên ảnh chụp X-quang
và MRI của ngực, bụng và đùi, tôi hy vọng rằng sẽ cho ra một số kết quả quan
trọng.
Tôi tin rằng việc tìm hiểu và áp dụng các kỹ thuật xử lý ảnh y tế trên ảnh chụp X-
quang, MRI của ngực, bụng và đùi đóng vai trò quan trọng trong việc nâng cao
khả năng chẩn đoán và điều trị bệnh lý.
Chân thành cảm ơn sự quan tâm và đồng hành của Thầy và các bạn trong quá
trình hoàn thiện đề tài này. Tôi hy vọng rằng báo cáo này sẽ đóng góp vào sự hiểu
biết và thúc đẩy sự phát triển của lĩnh vực xử lý ảnh y tế trong thực tế y học.

Trân trọng.

3
CHƯƠNG I: TỔNG QUAN

1.1. Giới thiệu chung về xử lý ảnh y tế


1.1.1. Xử lý ảnh y tế

Xử lý ảnh y tế là một lĩnh vực trong công nghệ thông tin và y học, nhằm
áp dụng các phương pháp và kỹ thuật xử lý ảnh vào các hình ảnh y tế như
ảnh chụp X-quang, CT (Computed Tomography), MRI (Magnetic
Resonance Imaging) và siêu âm để phân tích, đánh giá và chẩn đoán các
bệnh lý trong cơ thể. Mục tiêu của xử lý ảnh y tế là cải thiện chất lượng
ảnh, tăng cường thông tin hình ảnh và hỗ trợ quyết định chẩn đoán của các
chuyên gia y tế.

1.1.2. Quá trình xử lý ảnh y tế

Xử lý ảnh y tế là quá trình áp dụng các thuật toán và kỹ thuật xử lý ảnh để


phân tích và đánh giá hình ảnh y tế.
Quá trình xử lý hình ảnh y tế bắt đầu bằng cách thu thập dữ liệu thô từ hình
ảnh CT hoặc MRI và tái cấu trúc chúng thành định dạng phù hợp để sử
dụng trong phần mềm có liên quan. Trước khi áp dụng các thuật toán phân
tích, hình ảnh y tế cần được tiền xử lý để loại bỏ nhiễu, tăng cường độ
tương phản và làm rõ thông tin hình ảnh. Các phương pháp tiền xử lý bao
gồm làm sạch ảnh, lọc nhiễu, điều chỉnh độ tương phản và cân bằng
histogram.
Tiếp theo đó là các bước xử lý ảnh: phân đoạn ảnh, đánh dấu và phát hiện
bất thường ảnh,... Cuối cùng, các kết quả xử lý ảnh được hiển thị và trình
bày để hỗ trợ trong việc chẩn đoán bệnh.

1.1.3. Lợi ích và ứng dụng của xử lý ảnh y tế


1.1.3.1. Lợi ích

Xử lý ảnh y tế mang lại nhiều lợi ích quan trọng trong lĩnh vực y học:
- Tăng khả năng phát hiện sớm bất thường: Xử lý ảnh y tế giúp tăng
cường khả năng phát hiện sớm các dấu hiệu bất thường và bệnh lý
trong hình ảnh y tế. Các thuật toán phân tích và mô hình học máy có
thể nhận diện các biểu hiện không bình thường, giúp bác sĩ phát hiện
sớm các vấn đề y tế và đưa ra chẩn đoán chính xác.

4
- Hỗ trợ quyết định chẩn đoán: Xử lý ảnh y tế cung cấp thông tin quan
trọng để hỗ trợ quyết định chẩn đoán. Bác sĩ có thể sử dụng các công
cụ và phần mềm xử lý ảnh để phân tích và đánh giá hình ảnh y tế, từ
đó giúp họ đưa ra quyết định chẩn đoán chính xác và nhanh chóng.
- Giảm thiểu sai sót chẩn đoán: Xử lý ảnh y tế giúp giảm thiểu sai sót
chẩn đoán do yếu tố con người gây ra. Các thuật toán và mô hình
máy học có khả năng xử lý lượng lớn dữ liệu hình ảnh và nhận dạng
các biểu hiện bất thường, giúp tăng độ chính xác và đồng nhất trong
quy trình chẩn đoán.
- Cải thiện chất lượng chăm sóc y tế: Xử lý ảnh y tế cung cấp hình ảnh
chất lượng cao và rõ ràng, giúp bác sĩ và nhân viên y tế có cái nhìn
toàn diện về tình trạng sức khỏe của bệnh nhân. Điều này giúp cải
thiện chất lượng chăm sóc y tế và quản lý bệnh tốt hơn.
- Hỗ trợ nghiên cứu và phân tích: Xử lý ảnh y tế cung cấp cơ sở dữ
liệu hình ảnh phong phú cho nghiên cứu y học. Các nhà nghiên cứu
có thể sử dụng các công cụ và phương pháp xử lý ảnh để phân tích,
so sánh và tìm kiếm thông tin từ các tập dữ liệu.
- Tăng hiệu suất và tiết kiệm thời gian: Xử lý ảnh y tế giúp tăng hiệu
suất trong quy trình chẩn đoán và điều trị. Các công cụ và phần mềm
xử lý ảnh cho phép tự động hoá nhiều công đoạn phân tích và đánh
giá, giúp tiết kiệm thời gian cho bác sĩ và nhân viên y tế. Điều này
cho phép họ tập trung hơn vào việc tương tác và điều trị bệnh nhân.
- Nâng cao truy cập và chia sẻ thông tin: Xử lý ảnh y tế cung cấp khả
năng truy cập và chia sẻ dữ liệu hình ảnh y tế một cách dễ dàng và
an toàn. Bác sĩ và nhân viên y tế có thể truy cập hình ảnh từ xa, tăng
cường hợp tác và trao đổi thông tin giữa các chuyên gia. Điều này
cũng hỗ trợ việc tư vấn từ xa và thăm khám từ xa, đặc biệt trong các
vùng hẻo lánh hay tình huống khẩn cấp.
- Hỗ trợ quy trình hướng dẫn và đào tạo: Xử lý ảnh y tế có thể được
sử dụng để tạo ra các tài liệu hướng dẫn và đào tạo cho bác sĩ và
nhân viên y tế. Hình ảnh y tế được tạo thành các bài giảng, video
hoặc tài liệu tương tác giúp cung cấp hướng dẫn chi tiết và thực hành
cho việc phân tích và đánh giá hình ảnh y tế.
- Tiềm năng phát triển và tương tác với công nghệ khác: Xử lý ảnh y
tế liên tục phát triển và tương tác mạnh mẽ với các công nghệ mới
như trí tuệ nhân tạo, học sâu, thị giác máy tính và thực tế tăng cường.

5
Các kỹ thuật mới này có thể nâng cao khả năng phân tích, đánh giá
và chẩn đoán hình ảnh y tế, mở ra tiềm năng cho những tiến bộ đáng
kể trong lĩnh vực y học.
1.1.3.2. Ứng dụng

Xử lý ảnh y tế có nhiều ứng dụng quan trọng trong lĩnh vực y học và chăm sóc
sức khỏe:
- Chẩn đoán hình ảnh: Xử lý ảnh y tế được sử dụng để hỗ trợ quyết định
chẩn đoán bằng cách phân tích và đánh giá hình ảnh từ các kỹ thuật hình
ảnh như X-quang, CT, MRI, siêu âm và PET-CT. Các thuật toán phân tích
ảnh và học máy có khả năng nhận diện và phân loại các dấu hiệu bất
thường, giúp bác sĩ chẩn đoán các bệnh lý như ung thư, bệnh tim mạch,
bệnh não, và nhiều hơn nữa.
- Định vị và hướng dẫn can thiệp: Xử lý ảnh y tế có thể được sử dụng để hỗ
trợ quá trình can thiệp và phẫu thuật. Bằng cách tích hợp hình ảnh y tế với
các công cụ định vị thích hợp, bác sĩ có thể xác định vị trí chính xác và
định hình các cơ quan và cấu trúc bên trong cơ thể, giúp họ thực hiện các
thủ tục can thiệp, như chọc dò, tiêm chất tẩy uế, hay phẫu thuật, một cách
an toàn và chính xác.
- Theo dõi và đánh giá tiến triển bệnh: Xử lý ảnh y tế cung cấp cơ sở dữ liệu
hình ảnh liên tục cho việc theo dõi và đánh giá tiến triển bệnh. Bằng cách
so sánh các hình ảnh lặp lại theo thời gian, bác sĩ có thể đánh giá hiệu quả
của liệu pháp, xác định sự thay đổi trong kích thước và đặc điểm của khối
u, hay theo dõi tiến độ của một bệnh lý nhất định.
- Phân tích hình ảnh phân tử: Xử lý ảnh y tế có thể được sử dụng để phân
tích hình ảnh phân tử từ các kỹ thuật như hình ảnh PET-CT.
- Phân tích hình ảnh retinal: Xử lý ảnh y tế được sử dụng để phân tích hình
ảnh retinal trong điều trị và theo dõi các bệnh lý liên quan đến mắt, như
bệnh đục thuỷ tinh thể, bệnh thủy tinh thể, và bệnh đục thủy tinh thể. Các
thuật toán xử lý ảnh có thể phát hiện và đánh dấu các biểu hiện bất thường
trên hình ảnh retinal, giúp bác sĩ chẩn đoán và đánh giá sự tiến triển của
bệnh.
- Phân tích hình ảnh histopathology: Xử lý ảnh y tế được sử dụng để phân
tích hình ảnh histopathology, trong đó các mẫu mô được xem dưới kính
hiển vi để xác định các tế bào và cấu trúc mô bị tổn thương. Các thuật toán
xử lý ảnh có thể phát hiện và phân tích các đặc điểm và biểu hiện bất thường

6
trong mẫu histopathology, giúp bác sĩ chẩn đoán và đánh giá các bệnh lý
liên quan đến mô.
- Hỗ trợ trong nghiên cứu y học: Xử lý ảnh y tế cung cấp một nguồn dữ liệu
quan trọng cho nghiên cứu y học. Các nhà nghiên cứu có thể sử dụng các
công cụ và phương pháp xử lý ảnh để phân tích và đánh giá các tập dữ liệu
hình ảnh y tế lớn, từ đó tìm hiểu về các đặc điểm của bệnh lý, tiên lượng
bệnh, và phản ứng với liệu pháp.
- Trích xuất đặc trưng và phân loại: Xử lý ảnh y tế có thể được sử dụng để
trích xuất đặc trưng từ hình ảnh và phân loại các bệnh lý. Các thuật toán và
mô hình học máy có thể học từ dữ liệu hình ảnh y tế để phát hiện các đặc
trưng đặc biệt và phân loại các trường hợp bệnh. Điều này có thể hỗ trợ
việc tự động hoá quy trình chẩn đoán và giúp tăng cường độ chính xác và
đồng nhất trong việc phân loại bệnh.

1.2. Các cơ sở dữ liệu


1.2.1. Cơ sở dữ liệu Vingroup Big Data Institute

Cuộc thi “Phát hiện bất thường trên ảnh X-quang lồng ngực” do Viện
Nghiên cứu Dữ liệu lớn VinBigdata, Tập đoàn Vingroup tổ chức.
Bài toán ở đây là xây dựng các thuật toán trí tuệ nhân tạo để phát hiện và
khoanh vùng 14 loại tổn thương khác nhau trên hình ảnh X-quang phổi.
Thuật toán được phép huấn luyện dựa trên bộ dữ liệu gồm 15.000 ảnh X-
quang phổi được thu thập và gán nhãn tại Việt Nam, sau đó được đánh giá
bằng cách so sánh với kết quả đọc của bác sĩ trên bộ dữ liệu kiểm thử gồm
3.000 ảnh khác. Đây là bộ dữ liệu X-quang phổi được gán nhãn bởi bác sĩ
có quy mô lớn nhất trên thế giới được chia sẻ cho cộng đồng đến thời điểm
hiện tại. Hình ảnh được thu thập từ bệnh viện Trung ương Quân đội 108
và Bệnh viện Đại học Y Hà Nội, 100% dữ liệu được nặc danh hoá.

1.2.2. Cơ sở dữ liệu “The Visible Human Project” - Dự án con người hữu


hình

Dự án NLM Visible Human Project đã tạo ra các hình đại diện ba chiều
hoàn chỉnh, chi tiết về mặt giải phẫu, có sẵn công khai của cơ thể nam giới
và cơ thể nữ giới. Cụ thể, VHP cung cấp một thư viện phạm vi công cộng
gồm các hình ảnh phẫu thuật lạnh cắt ngang, CT và MRI thu được từ một

7
tử thi nam và một tử thi nữ. Bộ dữ liệu Visible Human Male bao gồm MRI,
CT và hình ảnh giải phẫu.

1.2.3. Cơ sở dữ liệu ChestXray-14

ChestX-ray14 là một bộ dữ liệu hình ảnh y tế bao gồm 112.120 hình ảnh
X-quang nhìn từ phía trước của 30.805 bệnh nhân duy nhất (được thu thập
từ năm 1992 đến 2015) với mười bốn nhãn bệnh phổ biến được khai thác
bằng văn bản, được khai thác từ các báo cáo X quang dạng văn bản thông
qua NLP kỹ xảo. Nó mở rộng trên ChestX-ray8 bằng cách bổ sung thêm
sáu bệnh về ngực: Phù nề, Khí phế thũng, Xơ hóa, Dày màng phổi và Thoát
vị.

1.3. Các định dạng ảnh


1.3.1. Định dạng ảnh dicom

Định dạng ảnh DICOM (Digital Imaging and Communications in


Medicine) là một tiêu chuẩn được sử dụng rộng rãi trong lĩnh vực y tế để
lưu trữ, truyền tải và xử lý hình ảnh y tế. DICOM định nghĩa cách dữ liệu
hình ảnh y tế được cấu trúc, mã hóa và truyền tải giữa các hệ thống y tế
khác nhau.
DICOM không chỉ đơn thuần là một định dạng file ảnh, mà còn là một
chuẩn quan trọng để đảm bảo tính tương thích và khả năng tương tác giữa
các thiết bị hình ảnh y tế và hệ thống y tế. Được phát triển bởi Hiệp hội
Ảnh y tế (Medical Imaging and Technology Alliance) và Hiệp hội Y tế
(American College of Radiology) vào những năm 1980, DICOM đã trở
thành tiêu chuẩn quốc tế được sử dụng rộng rãi trong các ứng dụng y tế
trên toàn thế giới.
Một số đặc điểm chính của DICOM bao gồm:
- Cấu trúc dữ liệu: DICOM định nghĩa cấu trúc dữ liệu hình ảnh y tế bao
gồm thông tin về bệnh nhân, loại hình ảnh, thông tin kỹ thuật, và các thuộc
tính khác. Điều này giúp đảm bảo tính toàn vẹn và tương thích của dữ liệu
trong quá trình chia sẻ và truyền tải.
- Mã hóa dữ liệu: DICOM sử dụng phương pháp mã hóa dữ liệu hình ảnh y
tế để đảm bảo tính bảo mật và chất lượng của dữ liệu. Nó hỗ trợ việc nén
dữ liệu hình ảnh để giảm kích thước file mà vẫn giữ được chất lượng hình
ảnh.

8
- Khả năng mở rộng: DICOM cho phép mở rộng và tùy chỉnh theo nhu cầu
của các ứng dụng y tế cụ thể. Nó hỗ trợ việc thêm vào và mở rộng các thuộc
tính và giao thức để phù hợp với các yêu cầu đặc biệt của từng lĩnh vực y
tế.
- Khả năng tương thích và tương tác: DICOM đảm bảo tính tương thích và
khả năng tương tác giữa các hệ thống hình ảnh y tế và hệ thống y tế khác.
Điều này đảm bảo rằng dữ liệu hình ảnh y tế có thể được chia sẻ, truyền tải
và xử lý một cách hiệu quả và đáng tin cậy giữa các hệ thống khác nhau.
DICOM hỗ trợ giao thức truyền tải dữ liệu mạnh mẽ như DICOM network
protocol (DICOM-NP), DICOM web services (DICOM-WS) và DICOM
cloud services (DICOM-CS), cho phép truyền tải dữ liệu hình ảnh y tế qua
mạng và giao tiếp với các hệ thống khác nhau.
Định dạng ảnh DICOM cung cấp nhiều lợi ích quan trọng trong lĩnh vực y
tế. Đầu tiên, nó tạo điều kiện cho việc chia sẻ dữ liệu hình ảnh y tế giữa
các cơ sở y tế và các chuyên gia y tế. Thứ hai, DICOM cho phép tích hợp
dữ liệu hình ảnh y tế vào hệ thống thông tin y tế (HIS) và hồ sơ điện tử
bệnh nhân (EHR). Thứ ba, DICOM cung cấp khả năng lưu trữ dữ liệu hình
ảnh y tế theo thời gian dài và bảo đảm tính toàn vẹn của dữ liệu. Cuối cùng,
DICOM tạo điều kiện cho phát triển và sử dụng các ứng dụng phân tích
hình ảnh và trí tuệ nhân tạo trong lĩnh vực y tế. Nhờ đó, các thuật toán và
công nghệ mới có thể được áp dụng để hỗ trợ quyết định chẩn đoán, đánh
giá tiến triển bệnh và cải thiện chất lượng chăm sóc sức khỏe.
Tóm lại, định dạng ảnh DICOM đóng vai trò quan trọng trong việc quản
lý, chia sẻ và xử lý dữ liệu hình ảnh y tế. Nó tạo điều kiện cho tính tương
thích, tương tác và tiêu chuẩn hóa trong lĩnh vực y tế, đồng thời hỗ trợ
các ứng dụng và công nghệ mới trong lĩnh vực y tế. Với DICOM, các hình
ảnh y tế có thể được truyền tải và chia sẻ một cách dễ dàng giữa các bệnh
viện, phòng khám và cơ sở y tế khác nhau, giúp nâng cao tốc độ và hiệu
quả trong quá trình chẩn đoán và điều trị.

1.3.2. Định dạng ảnh png

Định dạng ảnh PNG (Portable Network Graphics) là một định dạng file hình ảnh
phổ biến và rất được ưa chuộng trên Internet. PNG được thiết kế để thay thế cho
định dạng ảnh GIF và cung cấp các lợi ích vượt trội về chất lượng và hiệu suất.
PNG sử dụng thuật toán nén không mất mát để giữ nguyên chất lượng hình ảnh
ban đầu mà không làm mờ hoặc mất đi thông tin quan trọng. Điều này đặc biệt

9
hữu ích cho các hình ảnh có sự chênh lệch màu sắc đậm, đặc biệt là trong các
biểu đồ, đồ họa và ảnh có văn bản. So với định dạng ảnh JPEG, PNG thường cho
kết quả nén tốt hơn đối với các hình ảnh không có sự mất mát và không gây ra
hiện tượng mờ hay nhiễu.
Một trong những đặc điểm nổi bật của PNG là khả năng hỗ trợ kênh trong suốt
(transparency). Điều này cho phép người dùng tạo ra các hình ảnh với phần nền
trong suốt, hiển thị chính xác các đối tượng trên nền của các ứng dụng hoặc trang
web. PNG hỗ trợ cả kênh trong suốt đơn giản (binary transparency) và kênh trong
suốt xuyên qua (alpha transparency), mang lại linh hoạt và sự sáng tạo trong việc
sử dụng hình ảnh.
PNG cũng hỗ trợ màu sắc 24 bit và màu sắc 48 bit, cho phép tái tạo chính xác các
gam màu đa dạng và tương phản cao. Đồng thời, PNG hỗ trợ việc lưu trữ dữ liệu
metadata như thông tin tác giả, ngày tạo và độ phân giải hình ảnh.
Với tính năng nổi bật và ưu điểm vượt trội, PNG đã trở thành một định dạng ảnh
phổ biến được sử dụng trong nhiều ứng dụng như thiết kế đồ họa, trang web, trò
chơi điện tử, và các ứng dụng đa phương tiện khác. PNG được công nhận là một
định dạng ảnh linh hoạt, mạnh mẽ và không mất mát chất lượng, đáng tin cậy
trong việc lưu trữ và chia sẻ hình ảnh trên nền tảng kỹ thuật số.

10
CHƯƠNG II. CÁC KỸ THUẬT XỬ LÝ ẢNH Y TẾ THỰC HIỆN TRÊN
GOOGLE COLAB

1. Hiển thị ảnh

Bước Nội dung Code

Bước 1 Nhập thư viện Python import cv2 as cv


OpenCV và thư viện
matplotlib.pyplot. gán tên import sys
cho chúng lần lượt là cv và
plt import matplotlib.pyplot as plt

Bước 2 Cv.imread: tải hình ảnh từ r1 = cv.imread('/content/MRI dui.png')


một tệp

Bước 3 if r1 is None:

sys.exit("Could not read the image.")

Bước 4 Hiển thị ảnh r1 plt.imshow(r1)

Bước 5 Hiển thị đúng màu ảnh plt.imshow(img[:,:,::-1])

Kết quả:

11
2. Truy xuất giá trị ảnh

3. Đường viền ảnh

Trong xử lý ảnh y tế, đường viền ảnh (hoặc còn gọi là contour) là các đường đóng
khép kín xung quanh các vùng đối tượng hoặc khu vực cần quan tâm trong ảnh y
tế. Công việc đường viền ảnh có thể được sử dụng cho nhiều mục đích khác nhau,
chẳng hạn:

Phát hiện và định vị các cấu trúc y tế: Đường viền ảnh có thể được sử dụng để
phát hiện và định vị các cấu trúc y tế trong ảnh, chẳng hạn như cạnh của các cơ
quan, tế bào, hoặc các khu vực nghi ngờ về bệnh lý. Điều này có thể hữu ích trong
việc đưa ra chẩn đoán y tế, như phát hiện dấu hiệu của bệnh lý như khối u, mô
hình rối loạn, hoặc phát hiện các vùng nghi ngờ về nhiễm trùng.

Đo đạc và tính toán thông số hình học của cấu trúc y tế: Đường viền ảnh cung
cấp thông tin về hình dạng và kích thước của các cấu trúc y tế, từ đó có thể tính
toán các thông số hình học như diện tích, chu vi, tỉ lệ dài/rộng, hoặc độ lõm/lõm
của các vùng quan tâm. Các thông số này có thể được sử dụng để đánh giá kích
thước, hình dạng, và tính đồng đều của các cấu trúc y tế, giúp trong việc đưa ra
đánh giá lâm sàng, theo dõi tiến triển của bệnh, hoặc theo dõi hiệu quả của liệu
pháp.

12
Tách đối tượng y tế khỏi nền: Đường viền ảnh cung cấp thông tin về đường biên
của các đối tượng y tế, từ đó có thể được sử dụng để tách đối tượng y tế khỏi nền
hoặc các cấu trúc xung quanh. Điều này có thể hữu ích trong việc loại bỏ nhiễu,
tách một cấu trúc y tế ra khỏi nền xung quanh để phân tích riêng, hoặc trong quá
trình tái tạo hình ảnh 3D.

Bước Nội dung Code

Bước 1 Nhập thư viện Python OpenCV import cv2 as cv


và thư viện matplotlib.pyplot.
import sys
gán tên cho chúng lần lượt là cv
và plt import matplotlib.pyplot

Bước 2 Hiển thị ảnh muốn tạo viền. img2 = cv.imread('/content/MRI


dui.png')

Bước 3 Tạo đường viền với các phần tử replicate =


cuối cùng được sao chép cv.copyMakeBorder(img2,50,50,50
,50,cv.BORDER_REPLICATE)

Bước 4 Bên trong và bên ngoài phản reflect =


chiếu qua đường viền cv.copyMakeBorder(img2,50,50,50
,50,cv.BORDER_REFLECT)

Bước 5 Tương tự như bên trên nhưng reflect101 =


loại bỏ đi 1 (số) phần tử sát viền cv.copyMakeBorder(img2,50,50,50
,50,cv.BORDER_REFLECT_101)

Bước 6 Sự lặp lại: cuối ảnh - ảnh gốc – wrap =


đầu ảnh cv.copyMakeBorder(img2,50,50,50
,50,cv.BORDER_WRAP)

13
Bước 7 Tạo đường viền màu xanh constant=
cv.copyMakeBorder(img2,50,50,50
,50,cv.BORDER_CONSTANT,val
ue=BLUE)

Bước 8 Hiển thị ảnh: plt.subplot(231),plt.imshow(img2[:,


:,::-1]),plt.title('ORIGINAL')
- ảnh gốc tại vị trí 231, tên là
ORIGINAL plt.subplot(232),plt.imshow(replica
te[:,:,::-1]),plt.title('REPLICATE')
- ảnh replicate tại vị trí 232, tên
là RELICATE plt.subplot(233),plt.imshow(reflect[
:,:,::-1]),plt.title('REFLECT')
- ảnh reflect tại vị trí 233, tên
REFLECT plt.subplot(234),plt.imshow(reflect
101[:,:,::-
-....
1]),plt.title('REFLECT_101')
Hiển thị tất cả các ảnh.
plt.subplot(235),plt.imshow(wrap[:,
:,::-1]),plt.title('WRAP')

plt.subplot(236),plt.imshow(consta
nt[:,:,::-1]),plt.title('CONSTANT')

plt.show()

Kết quả:

14
4. Đổi màu ảnh

Trong xử lý ảnh y tế, việc đổi màu ảnh có thể được sử dụng cho nhiều mục đích
khác nhau, chẳng hạn:

Phân định cấu trúc y tế: Việc đổi màu ảnh có thể giúp phân định các cấu trúc y tế
khác nhau trong ảnh, chẳng hạn như phân biệt giữa các cấu trúc vật lý khác nhau
(ví dụ: xương, mô mềm) hoặc phân định các vùng có khả năng bị bệnh lý (ví dụ:
vùng nhiễm trùng, vùng tổn thương) trong ảnh y tế.

Đánh dấu vùng quan tâm: Việc đổi màu ảnh có thể được sử dụng để đánh dấu các
vùng quan tâm trong ảnh y tế, chẳng hạn như vùng cần theo dõi hoặc vùng cần
xem xét để đưa ra quyết định lâm sàng. Điều này có thể giúp dễ dàng nhận diện
các vùng quan tâm và hỗ trợ trong quá trình đánh giá và đưa ra phác đồ điều trị.

Tăng cường độ tương phản: Việc đổi màu ảnh có thể được sử dụng để tăng cường
độ tương phản của ảnh y tế, giúp làm nổi bật các cấu trúc y tế hoặc các dấu hiệu
bệnh lý. Điều này có thể cung cấp thông tin hữu ích cho việc đưa ra chẩn đoán
hoặc đánh giá bệnh lý.
Đồng bộ hóa hình ảnh: Việc đổi màu ảnh cũng có thể được sử dụng để đồng bộ
hóa hình ảnh giữa các cấu trúc khác nhau hoặc giữa các hình ảnh khác nhau của
cùng một bệnh nhân. Điều này có thể giúp trong việc so sánh và theo dõi sự thay
đổi của các cấu trúc y tế theo thời gian hoặc giữa các hình ảnh khác nhau.

15
Bước Nội dung Code

Bước 1 Nhập thư viện Python OpenCV import cv2 as cv

và thư viện matplotlib.pyplot. import sys


gán tên cho chúng lần lượt là cv
import numpy as np
và plt
import matplotlib.pyplot as plt

Bước 2 flags = [i for i in dir(cv) if


i.startswith('COLOR_')]

Nhận các cờ print( flags ) #nhận các cờ

Bước 3 Hiển thị ảnh s1 =


cv.imread('/content/ngucx.png

')

plt.imshow(s1)

plt.imshow(s1[:,:,::-1])

Bước 4 Chuyển đổi ảnh từ thang màu gray_img = cv.cvtColor(s1,


cv.COLOR_BGR2GRAY)
BGR sang thang màu GRAY
rồi hiển thị ảnh plt.imshow(gray_img)

Bước 5 Chuyển đổi ảnh từ thang màu hsv = cv.cvtColor(s1,


cv.COLOR_BGR2HSV)
BGR sang thang màu HSV rồi
hiển thị ảnh plt.imshow(hsv)

Kết quả:

16
ảnh hsv

5. Ảnh âm bản

Một số ứng dụng của việc biến đổi ảnh âm bản trong xử lý ảnh y tế:

Phát hiện dấu hiệu bệnh lý: Biến đổi ảnh âm bản có thể giúp làm nổi bật các dấu
hiệu bệnh lý trên ảnh y tế, chẳng hạn như khối u, vết thương, mảng bất thường,
hoặc các cấu trúc y tế có dạng, kích thước, hay độ tương phản khác thường. Điều
này có thể hỗ trợ cho việc đưa ra chẩn đoán, phát hiện sớm bệnh lý, và theo dõi
sự tiến triển của bệnh.

Tăng cường đối tượng quan tâm: Biến đổi ảnh âm bản cũng có thể được sử dụng
để tăng cường đối tượng quan tâm trong ảnh y tế. Bằng cách làm nổi bật các cấu
trúc y tế hoặc vùng quan tâm trong ảnh, biến đổi ảnh âm bản có thể giúp đồng bộ
hóa hoặc cải thiện độ tương phản giữa các vùng khác nhau trong ảnh, từ đó cung
cấp thông tin hữu ích cho việc đánh giá và đưa ra phác đồ điều trị.

Giáo dục và hướng dẫn: Biến đổi ảnh âm bản cũng có thể được sử dụng trong
mục đích giáo dục và hướng dẫn trong lĩnh vực y tế. Với ảnh âm bản, các cấu trúc
y tế sẽ được làm rõ hơn, giúp học viên hoặc bệnh nhân dễ dàng nhận diện và hiểu
về cấu trúc của các bộ phận trong cơ thể, từ đó nâng cao hiểu biết và nhận thức
về sức khỏe.

17
Bước Nội dung Code

Bước 1 Nhập thư viện Python OpenCV import cv2 as cv


và thư viện matplotlib.pyplot.
import sys
gán tên cho chúng lần lượt là cv
và plt import numpy as np

import matplotlib.pyplot as plt

Bước 2 Hiển thị ảnh h1 =


cv.imread('/content/ngucx.png')

plt.imshow(h1)

plt.imshow(h1[:,:,::-1])

Bước 3 [w,h] = h1.shape[:2]

for i in range(w):

for j in range(h):

h1[i][j] = 255 - h1[i][j]

Bước 4 plt.imshow(h1)

Kết quả:

18
6. Thay đổi độ sáng

Thay đổi độ sáng (brightness) trong xử lý ảnh y tế là một kỹ thuật xử lý ảnh được
sử dụng để điều chỉnh độ sáng của ảnh y tế, tăng hoặc giảm cường độ sáng của
ảnh. Đây là một phương pháp linh hoạt và phổ biến trong xử lý ảnh y tế, có thể
được sử dụng để nhiều mục đích, bao gồm:

Cải thiện độ tương phản: Thay đổi độ sáng của ảnh y tế có thể giúp cải thiện độ
tương phản giữa các khu vực sáng và tối trong ảnh. Điều này có thể làm nổi bật
các chi tiết nhỏ, cấu trúc y tế hay vùng quan tâm trong ảnh, giúp người chuyên
gia y tế dễ dàng nhận diện và đánh giá chính xác các dấu hiệu bệnh lý hoặc cấu
trúc y tế.

Loại bỏ nhiễu: Thay đổi độ sáng của ảnh cũng có thể được sử dụng để giảm thiểu
hoặc loại bỏ nhiễu trong ảnh.

Bước Nội dung Code

19
Bước 1 Nhập thư viện Python import cv2 as cv
OpenCV và thư viện
import sys
matplotlib.pyplot. gán tên
cho chúng lần lượt là cv và plt import numpy as np

import matplotlib.pyplot as plt

Bước 2 Hiển thị ảnh h1 = cv.imread('/content/MRI dui


nu.png')

plt.imshow(h1)

plt.imshow(h1[:,:,::-1])

Bước 3 [w,h] = h1.shape[:2]

for i in range(w):

for j in range(h):

h1[i][j] = h1[i][j] + 50

plt.imshow(h1)

Bước 4 plt.imshow(h1)

Kết quả:

20
7. Thay đổi độ tương phản

Thay đổi độ tương phản của ảnh trong xử lý ảnh y tế có thể được sử dụng để đạt
được các mục đích sau:

Nâng cao khả năng nhận diện và đánh giá bệnh lý: Thay đổi độ tương phản của
ảnh y tế có thể giúp làm rõ các chi tiết trong ảnh, từ đó giúp tăng khả năng nhận
diện và đánh giá bệnh lý. Các cấu trúc y tế hoặc vùng quan tâm trong ảnh sẽ được
làm nổi bật hơn, giúp tăng độ tương phản giữa các vùng khác nhau, từ đó cung
cấp thông tin hữu ích cho việc đánh giá và phát hiện sớm bệnh lý.

Tăng cường hình ảnh để hiển thị hoặc in ấn: Thay đổi độ tương phản của ảnh
cũng có thể được sử dụng để tăng cường hình ảnh, giúp hình ảnh trở nên rõ nét
và dễ đọc hơn. Điều này đặc biệt hữu ích trong trường hợp hiển thị ảnh trên màn
hình hoặc in ấn vào tài liệu y tế, đồng thời giúp giảm bớt khó khăn trong việc đọc
và đánh giá các cấu trúc y tế trên ảnh.

Đồng bộ hóa và chuẩn hóa hình ảnh: Thay đổi độ tương phản của ảnh cũng có thể
được sử dụng để đồng bộ hóa và chuẩn hóa hình ảnh trong quá trình xử lý ảnh y
tế. Điều này giúp đồng nhất độ tương phản giữa các ảnh khác nhau, từ đó tạo điều
kiện thuận lợi cho việc so sánh, phân tích và đánh giá các cấu trúc y tế trên các
ảnh khác nhau.

Đào tạo và giáo dục: Thay đổi độ tương phản của ảnh cũng có thể được sử dụng
trong mục đích giáo dục, đào tạo, hoặc trình bày trong lĩnh vực y tế. Việc điều
chỉnh độ tương phản của ảnh giúp làm nổi bật các cấu trúc y tế, từ đó dễ dàng giải

21
thích và trình bày về cấu trúc của các bộ phận trong cơ thể cho học viên, bệnh
nhân hoặc những người tham gia đào tạo.

Bước Nội dung Code

Bước 1 Nhập thư viện Python import cv2 as cv


OpenCV và thư viện
import sys
matplotlib.pyplot. gán tên cho
chúng lần lượt là cv và plt import numpy as np

import matplotlib.pyplot as plt

Bước 2 Hiển thị ảnh h1 = cv.imread('/content/MRI dui


nu.png')

plt.imshow(h1)

plt.imshow(h1[:,:,::-1])

Bước 3 [w,h] = h1.shape[:2]

for i in range(w):

for j in range(h):

h1[i][j] = h1[i][j]*3 - 10

plt.imshow(h1)

Bước 4 plt.imshow(h1)

22
Kết quả:

8. Gamma correction

Bước Nội dung Code

Bước 1 Nhập thư viện Python import cv2 as cv


OpenCV và thư viện
import sys
matplotlib.pyplot. gán tên
cho chúng lần lượt là cv và import numpy as np
plt
import matplotlib.pyplot as plt

Bước 2 Hiển thị ảnh r3 = cv.imread('/content/ngucx.png')

plt.imshow(r3)

plt.imshow(r3[:,:,::-1])

Bước 3 r31 = 255*(pow(r3/255, 2.5))

23
Bước 4 plt.imshow(r31)

Kết quả:

9. Tính, hiển thị, cân bằng histogram

Bước Nội dung Code

Bước 1 Nhập thư viện Python import cv2 as cv

OpenCV và thư viện import numpy as np


matplotlib.pyplot. gán tên
import matplotlib.pyplot as plt
cho chúng lần lượt là cv và
plt

24
Bước 2 Hiển thị ảnh img = cv.imread('/content/MRI dui
nu.png')

plt.imshow(img)

plt.imshow(img[:,:,::-1])

Bước 3 Chuyển đổi ảnh sang thang gray_img = cv2.cvtColor(img,


cv2.COLOR_BGR2GRAY)
màu GRAY
plt.imshow(gray_img)

Bước 4 biểu đồ Histogram hist = cv2.calcHist([gray_img],


[0], None, [256], [0, 256])

Vẽ biểu đồ Histogram plt.hist(gray_img.ravel(), 256, [0,


256])

plt.show()

Cân bằng Histogram eq_img = cv2.equalizeHist(gray_img)

25
Vẽ ảnh gốc và ảnh sau khi plt.subplot(1, 2, 1)

cân bằng plt.imshow(gray_img, cmap='gray')

plt.title('Original Image')

plt.xticks([]), plt.yticks([])

plt.subplot(1, 2, 2)

plt.imshow(eq_img, cmap='gray')

plt.title('Equalized Image')

plt.xticks([]), plt.yticks([])

plt.show

Tạo biểu đồ histogram sau hist_eq = cv2.calcHist([eq_img],


[0], None, [256], [0, 256])
khi cân bằng

Vẽ plt.hist(eq_img.ravel(), 256, [0,


256])

plt.show()

Kết quả:

26
10. Nhiễu Trung bình Averaging

Bước Nội dung Code

Bước 1 Nhập thư viện Python import cv2 as cv


OpenCV và thư viện
import numpy as np
matplotlib.pyplot. gán tên
cho chúng lần lượt là cv và import matplotlib.pyplot as plt
plt

Bước 2 Hiển thị ảnh img = cv.imread('/content/MRI dui


nu.png')

plt.imshow(img)

plt.imshow(img[:,:,::-1])

Bước 3 Tính trung bình ảnh gốc blur = cv.blur(img,(5,5))


với hạt nhân có kích thước
5x5

27
Bước 4 Hiển thị ảnh plt.subplot(121),plt.imshow(img),plt.titl
e('Original')

plt.xticks([]), plt.yticks([])

plt.subplot(122),plt.imshow(blur),plt.tit
le('Blurred')

plt.xticks([]), plt.yticks([])

plt.show()

Kết quả:

11. Nhiễu Gaussian

Bước Nội dung Code

Bước 1 Nhập thư viện Python import cv2 as cv


OpenCV và thư viện
import numpy as np
matplotlib.pyplot. gán tên
cho chúng lần lượt là cv import matplotlib.pyplot as plt
và plt

28
Bước 2 Hiển thị ảnh img = cv.imread('/content/MRI dui
nu.png')

plt.imshow(img)

plt.imshow(img[:,:,::-1])

Bước 3 Lấy trung bình của tất cả blur = cv.GaussianBlur(img,(5,5),0)


các pixel dưới khu vực
hạt nhân và thay thế phần
tử trung tâm. Gaussian
Blurring có hiệu quả cao
trong việc loại bỏ nhiễu
Gaussian khỏi hình ảnh.

Bước 4 Hiển thị ảnh plt.subplot(121),plt.imshow(img),plt.titl


e('Original')

plt.xticks([]), plt.yticks([])

plt.subplot(122),plt.imshow(blur),plt.titl
e('Blurred')

plt.xticks([]), plt.yticks([])

plt.show()

29
Kết quả:

12. Median Blurring

Bước Nội dung Code

Bước 1 Nhập thư viện Python OpenCV import cv2 as cv

và thư viện matplotlib.pyplot. import numpy as np


gán tên cho chúng lần lượt là cv
import matplotlib.pyplot as plt
và plt

Bước 2 Hiển thị ảnh img = cv.imread('/content/MRI


dui nu.png')

plt.imshow(img)

plt.imshow(img[:,:,::-1])

Bước 3 Median Blurring: hàm median = cv.medianBlur(img,5)

cv.medianBlur() lấy giá trị


trung bình của tất cả các pixel
dưới vùng kernel và phần tử
trung tâm được thay thế bằng
giá trị trung vị này.

30
Bước 4 Hiển thị ảnh plt.subplot(121),plt.imshow(img[
:,:,::-1]),plt.title('Original')

plt.xticks([]), plt.yticks([])

plt.subplot(122),plt.imshow(medi
an[:,:,::-
1]),plt.title('Median')

plt.xticks([]), plt.yticks([])

plt.show()

Kết quả:

13. Bilateral Filtering

Bước Nội dung Code

Bước 1 Nhập thư viện Python import cv2 as cv

OpenCV và thư viện import numpy as np


matplotlib.pyplot. gán tên
import matplotlib.pyplot as plt
cho chúng lần lượt là cv và
plt

31
Bước 2 Hiển thị ảnh img = cv.imread('/content/MRI dui
nu.png')

plt.imshow(img)

plt.imshow(img[:,:,::-1])

Bước 3 cv.bilateralFilter() có hiệu blur =


cv.bilateralFilter(img,9,75,75)
quả cao trong việc loại bỏ
nhiễu trong khi vẫn giữ cho
các cạnh sắc nét

Bước 4 Hiển thị ảnh plt.subplot(121),plt.imshow(img[:,:


,::-1]),plt.title('Original')

plt.xticks([]), plt.yticks([])

plt.subplot(122),plt.imshow(blur[:,
:,::-
1]),plt.title('bilateralFilter')

plt.xticks([]), plt.yticks([])

plt.show()

Kết quả:

32
14. Image Gradients

Bước Nội dung Code

Bước 1 Nhập thư viện Python import cv2 as cv

OpenCV và thư viện import numpy as np


matplotlib.pyplot. gán
import matplotlib.pyplot as plt
tên cho chúng lần lượt là
cv và plt

Bước 2 Hiển thị ảnh img = cv.imread('/content/MRI dui


nu.png')

plt.imshow(img)

plt.imshow(img[:,:,::-1])

laplacian = cv.Laplacian(img,cv.CV_64F)

Bước 4 sobelx = cv.Sobel(img,cv.CV_64F,1,0,ksize=5)

Bước 5 sobely =
cv.Sobel(img,cv.CV_64F,0,1,ksize=5)

33
Bước 6 plt.subplot(2,2,1),plt.imshow(img,cma
p = 'gray')

plt.title('Original'),
plt.xticks([]), plt.yticks([])

plt.subplot(2,2,2),plt.imshow(laplaci
an,cmap = 'gray')

plt.title('Laplacian'),
plt.xticks([]), plt.yticks([])

plt.subplot(2,2,3),plt.imshow(sobelx,
cmap = 'gray')

plt.title('Sobel X'), plt.xticks([]),


plt.yticks([])

plt.subplot(2,2,4),plt.imshow(sobely,
cmap = 'gray')

plt.title('Sobel Y'), plt.xticks([]),


plt.yticks([])

plt.show()

Kết quả:

15. Phát hiện cạnh canny

Bước Nội dung Code

34
Bước 1 Nhập thư viện Python import cv2 as cv
OpenCV và thư viện
import numpy as np
matplotlib.pyplot. gán tên
cho chúng lần lượt là cv và import matplotlib.pyplot as plt
plt

Bước 2 Hiển thị ảnh img = cv.imread('/content/MRI bung


nam.png')

plt.imshow(img)

plt.imshow(img[:,:,::-1])

Bước 3 Canny Edge Detection là edges = cv.Canny(img,50,100)


một thuật toán phát hiện
cạnh phổ biến.

Bước 4 plt.subplot(121),plt.imshow(img[:,:,::-
1])

plt.title('Original Image'), plt.xticks([]),


plt.yticks([])

plt.subplot(122),plt.imshow(edges,cma
p = 'gray')

plt.title('Edge Image'), plt.xticks([]),


plt.yticks([])

plt.show()

35
Kết quả:

16. Ngưỡng ảnh (đặt giá trị, thích ứng, otsu)

Bư Nội dung Code


ớc

Bư Nhập thư viện Python import cv2 as cv


ớc
OpenCV và thư viện
1 import numpy as np
matplotlib.pyplot. gán tên
cho chúng lần lượt là cv và import matplotlib.pyplot as plt
plt

Bư Đọc ảnh img = cv.imread('/content/MRI bung


ớc
nam.png', cv.IMREAD_GRAYSCALE)
2
assert h4 is not None, "file could not be read,
check with os.path.exists()"

Bư Lớn hơn ngưỡng _255 ret,thresh1 =


ớc
cv.threshold(img,127,255,cv.THRESH_BI
3 Nhỏ hơn ngưỡng _0
NARY) #

36
Bư Ngược lại của BINARY ret,thresh2 =
ớc
cv.threshold(img,127,255,cv.THRESH_BI
4
NARY_INV)

Nhỏ hơn ngưỡng thì bằng ret,thresh3 =


ngưỡng cv.threshold(img,127,255,cv.THRESH_TR
UNC)

Lớn hơn ngưỡng = 255 ret,thresh4 =


cv.threshold(img,127,255,cv.THRESH_TO
Nhỏ hơn ngưỡng giữ
ZERO)
nguyên

Nhỏ hơn ngưỡng = 255 ret,thresh5 =


cv.threshold(img,127,255,cv.THRESH_TO
Lớn hơn ngưỡng giữ
ZERO_INV)
nguyên

Hiển thị các ảnh titles = ['Original


Image','BINARY','BINARY_INV','TRUNC
','TOZERO','TOZERO_INV']

images = [img, thresh1, thresh2, thresh3,


thresh4, thresh5]

for i in range(6):

37
plt.subplot(2,3,i+1),plt.imshow(images[i],'g
ray',vmin=0,vmax=255)

plt.title(titles[i])

plt.xticks([]),plt.yticks([])

plt.show()

Kết quả:

Lớn hơn ngưỡng ret,th1 =


_255 cv.threshold(img,127,255,cv.THRESH_BINARY)

Nhỏ hơn ngưỡng


_0

38
Giá trị ngưỡng là th2 =
giá trị trung bình cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRE
của khu vực lân SH_MEAN_C,\
cận trừ đi hằng số
cv.THRESH_BINARY,11,2)
C.

Giá trị ngưỡng là th3 =


tổng trọng số cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRE
Gaussian của các SH_GAUSSIAN_C,\
giá trị vùng lân cận
cv.THRESH_BINARY,11,2)
trừ đi hằng số C

Hiển thị các ảnh titles = ['Original Image', 'Global Thresholding (v =


127)',

'Adaptive Mean Thresholding', 'Adaptive


Gaussian Thresholding']

images = [img, th1, th2, th3]

for i in range(4):

plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')

plt.title(titles[i])

plt.xticks([]),plt.yticks([])

plt.show()

39
Kết quả:

Lớn hơn ngưỡng ret1,th1 =


_255 cv.threshold(img,127,255,cv.THRESH_BINARY)

Nhỏ hơn ngưỡng


_0

ret2,th2 =
cv.threshold(img,0,255,cv.THRESH_BINARY+cv.TH
RESH_OTSU)

blur = cv.GaussianBlur(img,(5,5),0)

ret3,th3 =
cv.threshold(blur,0,255,cv.THRESH_BINARY+cv.TH
RESH_OTSU)

40
Hiển thị ảnh images = [img, 0, th1,

img, 0, th2,

blur, 0, th3]

titles = ['Original Noisy Image','Histogram','Global


Thresholding (v=127)',

'Original Noisy Image','Histogram',"Otsu's


Thresholding",

'Gaussian filtered Image','Histogram',"Otsu's


Thresholding"]

for i in range(3):

plt.subplot(3,3,i*3+1),plt.imshow(images[i*3],'gray')

plt.title(titles[i*3]), plt.xticks([]), plt.yticks([])

plt.subplot(3,3,i*3+2),plt.hist(images[i*3].ravel(),256)

plt.title(titles[i*3+1]), plt.xticks([]), plt.yticks([])

plt.subplot(3,3,i*3+3),plt.imshow(images[i*3+2],'gray')

plt.title(titles[i*3+2]), plt.xticks([]), plt.yticks([])

plt.show()

41
Kết quả:

17. Phân đoạn ảnh, thuật toán đầu nguồn

Bư Nội dung Code


ớc

Bư Nhập thư viện Python import cv2 as cv


ớc
OpenCV và thư viện
1 import numpy as np
matplotlib.pyplot. gán
tên cho chúng lần lượt import matplotlib.pyplot as plt
là cv và plt

Bư Đọc ảnh img = cv.imread('/content/MRI bung nam.png',


ớc
cv.IMREAD_GRAYSCALE)
2
assert img is not None, "file could not be read,
check with os.path.exists()"

42
Chuyển ảnh sang gray =

thang màu gray, đặt cv.cvtColor(img,cv.COLOR_BGR2GRAY)
ớc
ngưỡng
3 ret, thresh =
cv.threshold(gray,0,255,cv.THRESH_BINARY
_INV+cv.THRESH_OTSU)

Loại bỏ nhiễu kernel = np.ones((3,3),np.uint8)



ớc opening =
4 cv.morphologyEx(thresh,cv.MORPH_OPEN,ke
rnel, iterations = 2)

Co lại sure_bg = cv.dilate(opening,kernel,iterations=3)



ớc
5

dist_transform =
cv.distanceTransform(opening,cv.DIST_L2,5)

ret, sure_fg =
cv.threshold(dist_transform,0.7*dist_transform.
max(),255,0)

sure_fg = np.uint8(sure_fg)

unknown = cv.subtract(sure_bg,sure_fg)

43
Hiển thị ảnh titles = ['Original
Image','opening','sure_bg','unknown']

images = [img, opening, sure_bg, unknown]

for i in range(4):

plt.subplot(2,2,i+1),plt.imshow(images[i],'gray',
vmin=0,vmax=255)

plt.title(titles[i])

plt.xticks([]),plt.yticks([])

plt.show()

titles = ['Original
Image','opening','sure_bg','unknown']

images = [img, opening, sure_bg, unknown]

for i in range(4):

plt.subplot(2,2,i+1),plt.imshow(images[i],'gray',
vmin=0,vmax=255)

plt.title(titles[i])

plt.xticks([]),plt.yticks([])

plt.show()

44
18. Phép toán hình thái

B Nội dung Code


ư
ớc

B Nhập thư viện Python import cv2 as cv


ư
OpenCV và thư viện
ớc import numpy as np
matplotlib.pyplot. gán
1
tên cho chúng lần lượt import matplotlib.pyplot as plt
là cv và plt

B Đọc ảnh img = cv.imread(/content/ngucx.png',


ư
cv.IMREAD_GRAYSCALE)
ớc
2 assert img is not None, "file could not be read,
check with os.path.exists()"

plt.imshow(img)

tất cả các pixel gần kernel = np.ones((5,5),np.uint8)


ranh giới sẽ bị loại bỏ
erosion = cv.erode(img,kernel,iterations = 1)
theo kích thước hạt
nhân là 5x5. hàm
cv.erode Làm xói mòn
hình ảnh bằng cách sử
dụng một yếu tố cấu
trúc cụ thể

45
tăng kích thước của dilation = cv.dilate(img,kernel,iterations = 1)
đối tượng, hàm
plt.imshow(img)
cv.dilate Làm giãn một
hình ảnh bằng cách sử
dụng một yếu tố cấu
trúc cụ thể

co -giãn. Hàm opening = cv.morphologyEx(img,


cv::morphologyEx có cv.MORPH_OPEN, kernel)
thể thực hiện các phép
plt.imshow(img)
biến đổi hình thái tiên
tiến bằng cách sử dụng
xói mòn và giãn nở
làm các hoạt động cơ
bản.

giãn - co closing = cv.morphologyEx(img,


cv.MORPH_CLOSE, kernel)

plt.imshow(img)

sự khác biệt giữa co và gradient = cv.morphologyEx(img,


giãn của 1 hình ảnh cv.MORPH_GRADIENT, kernel)

plt.imshow(img)

sự khác biệt của hình tophat = cv.morphologyEx(img,


ảnh gốc và opening cv.MORPH_TOPHAT, kernel)

plt.imshow(img)

sự khác biệt của hình blackhat = cv.morphologyEx(img,


ảnh gốc và closing cv.MORPH_BLACKHAT, kernel)

46
plt.imshow(img)

Kết quả:

47
19. SIFT

SIFT là một thuật toán phát hiện đặc trưng không bị thay đổi tỷ lệ, rất hữu ích
trong việc nhận dạng và trích xuất đặc trưng từ hình ảnh.

Bước 1 Nhập thư viện Python OpenCV


và thư viện matplotlib.pyplot. import cv2 as cv
gán tên cho chúng lần lượt là cv
và plt import numpy as np
import matplotlib.pyplot as plt
Bước 2 Đọc ảnh
img =
cv.imread(/content/ngucx.png',
cv.IMREAD_GRAYSCALE)
Bước 3 Đổi màu ảnh sang ảnh xám gray=
cv.cvtColor(img,cv.COLOR_BGR
2GRAY)
Bước 4 Tạo một đối tượng SIFT sift = cv.SIFT_create()
Bước 5 Sử dụng phương thức “detect” kp = sift.detect(gray,None)
để phát hiện các keypoint trên
ảnh xám
Bước 6 Vẽ các keypoint lên ảnh xám. img=cv.drawKeypoints(gray,kp,im
Lưu ảnh với các keypoint g)
được vẽ lên. cv.imwrite('sift_keypoints.jpg',img
)
Bước 7 Vẽ lại các keypoint lên ảnh img=cv.drawKeypoints(gray,kp,im
gốc g,flags=cv.DRAW_MATCHES_F
LAGS_DRAW_RICH_KEYPOIN
TS)
cv.imwrite('sift_keypoints.jpg',img
)
Bước 8 Phát hiện và tính toán các sift = cv.SIFT_create()
keypoint và descripted trên kp, des =
ảnh xám. Lưu kết quả sift.detectAndCompute(gray,None
)

48
20. Feature matching

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img1 = cv.imread('/content/dui
nu.png',cv.IMREAD_GRAYSCALE) # queryImage
img2 =
cv.imread('/content/duinu..png',cv.IMREAD_GRAYSCALE) #
trainImage
# Initiate ORB detector
orb = cv.ORB_create()
# find the keypoints and descriptors with ORB
kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)

# create BFMatcher object


bf = cv.BFMatcher(cv.NORM_HAMMING, crossCheck=True)
# Match descriptors.
matches = bf.match(des1,des2)
# Sort them in the order of their distance.
matches = sorted(matches, key = lambda x:x.distance)
# Draw first 10 matches.
img3 =
cv.drawMatches(img1,kp1,img2,kp2,matches[:10],None,flags=cv.
DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
plt.imshow(img3),plt.show()

Kết quả:

49
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img1 = cv.imread('/content/MRI dui
nu.png',cv.IMREAD_GRAYSCALE) # queryImage
img2 =
cv.imread('/content/duinu..png',cv.IMREAD_GRAYSCALE) #
trainImage
# Initiate SIFT detector
sift = cv.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
# BFMatcher with default params
bf = cv.BFMatcher()
matches = bf.knnMatch(des1,des2,k=2)
# Apply ratio test
good = []
for m,n in matches:
if m.distance < 0.75*n.distance:
good.append([m])
# cv.drawMatchesKnn expects list of lists as matches.
img3 =
cv.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=cv.Dra
wMatchesFlags_NOT_DRAW_SINGLE_POINTS)
plt.imshow(img3),plt.show()

Kết quả:

50
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img1 = cv.imread('/content/MRI dui
nu.png',cv.IMREAD_GRAYSCALE) # queryImage
img2 =
cv.imread('/content/duinu..png',cv.IMREAD_GRAYSCALE) #
trainImage
# Initiate SIFT detector
sift = cv.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
# FLANN parameters
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees
= 5)
search_params = dict(checks=50) # or pass empty dictionary
flann = cv.FlannBasedMatcher(index_params,search_params)
matches = flann.knnMatch(des1,des2,k=2)
# Need to draw only good matches, so create a mask
matchesMask = [[0,0] for i in range(len(matches))]
# ratio test as per Lowe's paper
for i,(m,n) in enumerate(matches):
if m.distance < 0.7*n.distance:
matchesMask[i]=[1,0]
draw_params = dict(matchColor = (0,255,0),
singlePointColor = (255,0,0),
matchesMask = matchesMask,
flags = cv.DrawMatchesFlags_DEFAULT)
img3 =
cv.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_p
arams)
plt.imshow(img3,),plt.show()

51
Kết quả:

21. Homography

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img1 = cv.imread('/content/MRI dui
nu.png',cv.IMREAD_GRAYSCALE) # queryImage
img2 =
cv.imread('/content/duinu..png',cv.IMREAD_GRAYSCALE) #
trainImage
# Initiate SIFT detector
sift = cv.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
# FLANN parameters
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees
= 5)
search_params = dict(checks=50) # or pass empty dictionary
flann = cv.FlannBasedMatcher(index_params,search_params)
matches = flann.knnMatch(des1,des2,k=2)

52
# Need to draw only good matches, so create a mask
matchesMask = [[0,0] for i in range(len(matches))]
# ratio test as per Lowe's paper
for i,(m,n) in enumerate(matches):
if m.distance < 0.7*n.distance:
matchesMask[i]=[1,0]
draw_params = dict(matchColor = (0,255,0),
singlePointColor = (255,0,0),
matchesMask = matchesMask,
flags = cv.DrawMatchesFlags_DEFAULT)
img3 =
cv.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_p
arams)
plt.imshow(img3,),plt.show()

if len(good)>MIN_MATCH_COUNT:
src_pts = np.float32([ kp1[m.queryIdx].pt for m in good
]).reshape(-1,1,2)
dst_pts = np.float32([ kp2[m.trainIdx].pt for m in good
]).reshape(-1,1,2)
M, mask = cv.findHomography(src_pts, dst_pts,
cv.RANSAC,5.0)
matchesMask = mask.ravel().tolist()
h,w = img1.shape
pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-
1,1,2)
dst = cv.perspectiveTransform(pts,M)
img2 = cv.polylines(img2,[np.int32(dst)],True,255,3,
cv.LINE_AA)
else:
print( "Not enough matches are found - {}/{}".format(len(good),
MIN_MATCH_COUNT) )
matchesMask = None

draw_params = dict(matchColor = (0,255,0), # draw matches in


green color
singlePointColor = None,

53
matchesMask = matchesMask, # draw only inliers
flags = 2)
img3 =
cv.drawMatches(img1,kp1,img2,kp2,good,None,**draw_params)
plt.imshow(img3, 'gray'),plt.show()

Kết quả:

54
KẾT LUẬN

Trong đề tài này, tôi đã tìm hiểu và nghiên cứu các kỹ thuật xử lý ảnh y tế được
áp dụng trên ảnh X-quang ngực, MRI bụng và đùi. Tôi đã thực hiện một số công
việc và đưa ra một số nhận xét quan trọng.

Đầu tiên, tôi đã nghiên cứu về các phương pháp xử lý ảnh y tế và nhận thức được
vai trò quan trọng của chúng trong chẩn đoán và điều trị bệnh. Tôi đã tìm hiểu về
các kỹ thuật tiền xử lý ảnh, bao gồm làm sạch ảnh, cân bằng histogram, làm rõ
cạnh, và làm mịn ảnh. Tôi cũng đã khám phá các kỹ thuật nâng cao như phân
đoạn ảnh và trích xuất đặc trưng.

Thứ hai, tôi đã áp dụng các kỹ thuật này vào ba loại ảnh y tế cụ thể: ảnh X-quang
ngực, MRI bụng và đùi. Trong trường hợp ảnh X-quang ngực, tôi đã sử dụng các
phương pháp tiền xử lý để loại bỏ nhiễu và làm rõ các cạnh của các cấu trúc bên
trong ngực. Điều này giúp các chuyên gia y tế phân tích và nhận biết các vấn đề
sức khỏe như khối u, viêm phổi hay xương gãy một cách chính xác hơn.

Đối với MRI bụng, tôi đã tìm hiểu về các phương pháp phân đoạn ảnh để phát
hiện và phân loại các cấu trúc bên trong bụng như gan, túi mật, tử cung và buồng
trứng. Sự chính xác và độ tin cậy của việc phân đoạn này có thể giúp trong việc
chẩn đoán và điều trị các bệnh lý trong khu vực bụng.

Cuối cùng, tôi đã tìm hiểu về xử lý ảnh y tế trên MRI đùi, đặc biệt là trong lĩnh
vực nghiên cứu về thay thế cơ cấu và tái tạo mô. Các kỹ thuật xử lý ảnh có thể
được áp dụng để giải quyết vấn đề của việc phát hiện và đánh giá tình trạng cơ
cấu xương, sụn và mô mềm trong đùi. Điều này có thể hỗ trợ trong quá trình chẩn
đoán chấn thương, theo dõi tiến trình hồi phục sau phẫu thuật hoặc đánh giá hiệu
quả của liệu pháp tái tạo mô.

Từ việc tìm hiểu và áp dụng các kỹ thuật xử lý ảnh y tế trên ảnh X-quang ngực,
MRI bụng và đùi, tôi nhận thấy rằng những kỹ thuật này đóng vai trò quan trọng
trong cung cấp thông tin chính xác và chi tiết về tình trạng sức khỏe của bệnh
nhân. Chúng giúp tăng độ chính xác của quá trình chẩn đoán, đồng thời cung cấp
một cơ sở hiểu biết tốt hơn cho việc đưa ra quyết định về điều trị.

55
Tuy nhiên, cần lưu ý rằng các kỹ thuật xử lý ảnh y tế không thể hoàn toàn thay
thế sự khám phá và đánh giá của các chuyên gia y tế. Chúng chỉ là công cụ hỗ trợ
và yêu cầu sự thông thái và sự tinh chỉnh từ phía chuyên gia để đạt được kết quả
tốt nhất.

Ngoài ra, cần tiếp tục nghiên cứu và phát triển các kỹ thuật xử lý ảnh y tế để cải
thiện hiệu suất và độ chính xác. Cần có sự phối hợp chặt chẽ giữa cộng đồng y tế
và cộng đồng nghiên cứu để áp dụng những tiến bộ công nghệ vào thực tế và tận
dụng hết tiềm năng của chúng.

Tóm lại, việc tìm hiểu và áp dụng các kỹ thuật xử lý ảnh y tế trên ảnh X-quang
ngực, MRI bụng và đùi đã mang lại những kết quả đáng chú ý trong việc cải thiện
quá trình chẩn đoán và điều trị bệnh. Sự phát triển tiếp tục của lĩnh vực này có
thể đóng góp quan trọng vào sự tiến bộ của y học và tăng cường chất lượng chăm
sóc sức khỏe.

56
TÀI LIỆU THAM KHẢO

1.https://www.kaggle.com/c/vinbigdata-chest-xray-abnormalities-detection
2. https://paperswithcode.com/dataset/chestx-ray14
3. https://www.nlm.nih.gov/research/visible/visible_human.html
4. https://tailieu.vn/doc/ung-dung-cua-xu-ly-anh-y-te-1512822.html

57

You might also like