Qua quá trình thực hiện đồ án về phương pháp phân loại ảnh MRI não, đồ án
đã có được những kết quả như sau:
o Trình bày rõ các ứng dụng của phân loại ảnh MRI não.
o Xây dựng cơ sở dữ liệu phù hợp với thuật toán SVM.
o Kết quả phân loại có độ chính xác cao.
o Phân loại đối với các dữ liệu đầu vào khác nhau.
Hướng phát triển của đề tài :
o Xây dựng một hệ thống hoàn chỉnh kết hợp với phần cứng.
o Xây dựng một hệ thống phân loại ảnh MRI não có độ chính xác cao
hơn và thời gian nhanh hơn.
o Xây dựng một chương trình không chỉ phân loại ảnh MRI não mà có
thể chẩn đoán chính xác loại bệnh đang mắc phải
74 trang |
Chia sẻ: builinh123 | Lượt xem: 3470 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Đồ án Phân loại ảnh MRI u não, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
buộc yi(+b) ≥ 1, với w càng nhỏ càng tốt. Bài toán tối ưu hóa
này có thể được giải bằng cách sử dụng các công cụ tiêu chuẩn từ tối ưu hóa lồi (Boyd
và Vandenberghe, 2004).
Hình 1.10: Ảnh hưởng của hằng số biên mềm C trên ranh giới quyết định
Dữ liệu có thể được thay đổi bằng cách di chuyển điểm bóng mờ màu xám đến
một vị trí mới theo mũi tên, điều đó làm giảm biên đáng kể mà một SVM biên cứng
khó có thể phân tách dữ liệu. Hình bên trái, biên quyết định cho một SVM với một giá
trị rất cao của C mà bắt chước hành vi của SVM biên cứng và do đó dẫn tới lỗi huấn
luyện. Một giá trị C nhỏ hơn (bên phải) cho phép bỏ qua điểm gần ranh giới, và làm
tăng biên. Ranh giới quyếtđịnh giữa các điểm dương và các điểm âm được thể hiện
bằng dòng đậm. Các dòng nhạt hơn là biên độ (giá trị bằng -1 hoặc +1).
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
30
1.2.5.4 SVM biên mềm
Trong thực tế, dữ liệu thường không phân chia tuyến tính (Hình 3). Kết quả lý
thuyết và thực nghiệm cho thấy với biên lớn hơn thì SVM biên mềm sẽ cho hiệu quả
tốt hơn so với SVM biên cứng. Để chấp nhận một số lỗi, người ta thay thế các ràng
buộc dạng bất đẳng thức (2) vớiyi ( + b) ≥ 1 - ξi, i = 1,, n, trong đó ξi ≥0 là
các biến phụ không âm. Thêm vào hàm tối ưu hóa :
Hằng số C> 0 thiết lập mức độ quan trọng của việc cực đại biên và giảm số
lượng biến phụ ξi. Công thức này được gọi là SVM biên mềm (Cortes và Vapnik,
1995). Ảnh hưởng của sự lựa chọn C được minh họa trong hình 3. Với một giá trị C
lớn (minh họa hình 3A), hai điểm gần siêu phẳng nhất bị ảnh hưởng lớn hơn các điểm
dữ liệu khác. Khi C giảm (Hình 3B), những điểm chuyển động bên trong lề, và hướng
của siêu phẳng được thay đổi, dẫn đến một biên lớn hơn cho dữ liệu. Lưu ý rằng giá trị
của C không có ý nghĩa trực tiếp, và có một công thức của SVMs trong đó sử dụng một
tham số trực quan hơn 0<ν ≤ 1. Tham số ν kiểm soát các véctơ hỗ trợ, và lỗi biên
(Schölkopf và Smola, 2002), và (Shawe vàC ristianini, 2004).
1.2.5.5 SVM cho phân lớp phi tuyến
Trong nhiều ứng dụng, một bộ phân lớp phi tuyến có độ chính xác cao hơn. Tuy
nhiên, phân lớp tuyến tính có một lợi thế đó là các thuật toán đơn giản (Bishop,
2007;Hastie & cs 2001). Điều này đặt ra câu hỏi có cách phân lớp tuyến tính nào có thể
mở rộng cho phi tuyến không? Hơn nữa, chúng ta có thể xử lý dữ liệu có thể không
được biểu diễn trong không gian vectơ, như trong lĩnh vực sinh học.Có một cách đơn
giản chuyển phân lớp tuyến tính sang phi tuyến hoặc sử dụng cho phân lớp dữ liệu
không biểu diễn dưới dạng vectơ. Đó là ánh xạ dữ liệu cho một không gian vector nào
đó, mà chúng ta sẽ đề cập đến như là không gian đặc trưng, bằng cách sử dụng hàm f.
Hàm đó là:
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
31
Hình 1.11:SVM cho phân lớp phi tuyến
Lưu ý rằng f(x) là tuyến tính trong không gian đặc trưng được định nghĩa bởi
ánh xạ f, nhưng khi nhìn trong không gian đầu vào ban đầu nó là một hàm số phi
tuyếnx nếu f(x) là một hàm phi tuyến. Ví dụ đơn giản nhất của ánh xạ là xem xét tất cả
cáctích của các cặp (liên quan đến kernel đa thức). Kết quả là một một bộ phân loại có
dạng hàm phân tách bậc hai. Cách tiếp cận tính toán trực tiếp các đặc trưng phi tuyến
này khó mở rộng cho số lượng đầu vào lớn.Chiều của không gian đặc trưng liên quan
kích thước của không gian đầu vào.Nếu chúng ta sử dụng đơn thức bậc d cao hơn 2, số
chiều sẽ lũy thừa theo d, kết quả là tăng sử dụng bộ nhớ và thời gian cần thiết để tính
toán các hàm phân tách. Nếu dữ liệu nhiều chiều, chẳng hạn như trong trường hợp dữ
liệu biểu hiện gen, thì rất phức tạp. Phương pháp kernel tránh điều phức tạp này bằng
cách ánh xạ dữ liệu tới không gian đặc trưng nhiều chiều. Chúng ta đã thấy ở trên là
các vector trọng số của một mặt phẳng phân tách với biên độ lớn có thể được biểu diễn
như một tổ hợp tuyến tính của các điểm huấn luyện, tức là:
.
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
32
Điều này cũng đúng cho một lớp lớn của các thuật giải tuyến tính. Hàm phân tích trở
thành:
Việc biểu diễn dưới dạng biến αi được gọi là dạng đối ngẫu (dual), đại diện hai hàm
đặc biệt phụ thuộc vào các dữ liệu chỉ thông qua các tích vô hướng trong không gian.
Các quan sát tương tự cũng đúng cho bài toán tối ưu hóa đối ngẫu (phương trình (4))
khi thay thế xi với f(xi).Nếu hàm kernel k(x, x’) được định nghĩa là:
Hàm này có thể được tính toán một cách hiệu quả. Dạng đối ngẫu cho phép giải
quyết vấn đề mà không cần thực hiện ánh xạ f vào một không gian có nhiều chiều. Các
vấn đề tiếp theo là xác định các độ đo tương tự (hàmkernel) có thể được tính một cách
hiệu quả.
Kernel cho các dữ liệu thực
Dữ liệu thực là dữ liệu mà các mẫu là các vector có số chiều xác định. Đây là
dạng dữ liệu phổ biến trong tin sinh học và nhiều lĩnh vực khác. Một vài ví dụ về áp
dụng SVM xử lý dữ liệu thực bao gồm dự đoán trạng thái của bệnh từ dữ liệu vi mảng
(Guyon I & cs, 2002) và dự đoán chức năng protein từ một tập các tính năng bao gồm
thành phần acid amin vàc ác thuộc tính khác nhau của các axit amin trong protein (C ai
& cs., 2003). Hai hàm kernel phổ biến nhất được sử dụng cho các dữ liệu thực là đa
thức kernel và Gaussian kernel. Bậc d của đa thức kernel được định nghĩa là:
κ là thường được chọn là 0 (đồng nhất) hoặc 1 (không đồng nhất). Không gian đặc
trưng cho các hàm kernel không đồng nhất bao gồm tất cả các đơn thức bậc nhỏ hơn d
(Schölkopf và Smola, 2002). Nhưng, thời gian tính toán của nó là tuyến tính với số
chiều của không gian đầu vào. Kernel với d =1 và κ = 0, biểu hiện bằng klinear, là
kernel tuyến tính dẫn đến một hàm phân tách tuyến tính. Bậc của kernel đa thức kiểm
soát sự linh hoạt của bộ phân lớp (hình 4). Đa thức bậc thấp nhất là kernel tuyến tính.
Hàm kernel này không đủ tốt nếu không gian đặc trưng là phi tuyến. Đối với các dữ
liệu trong hình 4 ở đa thức bậc 2 đã đủ linh hoạt để phân biệt giữa hai lớp với một biên
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
33
tốt. Đa thức bậc 5 định lượng một ranh giới quyết định tương tự, với độ cong lớn hơn.
Quá trình chuẩn hóa có thể giúp cải thiện hiệu suất và ổn định d. Kernel thứ hai được
sử dụng rộng rãi là Gaussian kernel được xác định bởi:
Hình 1.12: Ảnh hưởng đa chiều Gaussian kernel cho một giá trị cố định đối với các
hằng số biên mềm
Trong đó σ > 0 là một tham số điều khiển độ rộng của Gaussian. Nó đóng một
vai trò tương tự như bậc của kernel đa thức trong việc kiểm soát sự linh hoạt của bộ
phân lớp .Gaussian kernel cơ bản là bằng không nếu khoảng cách bình phương x - x' 2
là lớn hơn nhiều so với σ, tức là cho x’ cố định là một vùng xung quanh x’ với các giá
trị kernel cao. Như một ví dụ minh họa, các kết quả trên một mẫu lớn hơn nhiều các tập
dữ liệu hai chiều xác định vị trí cắt-nối được hiển thị trong bảng 1. Việc sử dụng của
mộtkernel phi tuyến, hoặc Gaussian hoặc đa thức, dẫn đến một cải tiến nhỏ trong việc
thực hiện phân lớp kernel tuyến tính. Đối với đa thức bậc cao và Gaussian kernel nhỏ,
độ chính xác thu được giảm [4] [14]
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
34
1.3. Kết luận chương
Qua chương này, em đã xây dựng được một hệ thống phân loại ảnh thích hợp với
dữ liệu đầu vào, các bước để tiến hành bào gồm : phân đoạn, giảm đặc trưng, trích xuất
đặc trưng và phân loại đã được tiến hành dựa vào 4 thuật toán đó là : K-means, DWT,
PCA, SVM và các thuật toán đã giải quyết tốt các vấn đề đặt ra cho mỗi tiến trình.
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
35
CHƯƠNG 2: XÂY DỰNG CHƯƠNG TRÌNH PHÂN LOẠI
MRI NÃO
2.1 Đề xuất tổng quan chương trình:
Hình 2.1: Sơ đồ chung của hệ thống xử lý và phân loại ảnh.
Ảnh MRI não : Chúng tôi sử dụng các hình ảnh MRI của bệnh nhân bị ảnh
hưởng bệnh ung thư não, chúng ta có những hình ảnh MRI của năm căn bệnh
ung thư khác nhau của não bộ. Năm loại MRI hình ảnh đó là Astrocytoma,
Glioma, Meningioma, Metastasis bronchogenic carcinoma và Sarcoma.
Tiền xử lý : Mục đích chính của giai đoạn tiền xử lý trong thuật toán của chúng
em là để biến đổi ảnh xám , và sử dụng thuật toán Otsu để phân cụm để phân
nhóm các pixel ảnh, dựa theo các đặc trưng giống nhau của từng nhóm để lấy
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
36
vùng mà mình cần quan sát ví dụ đối với ảnh đồng thời tiền xử lý loại bỏ nhiễu
do các biến đổi trong biên độ tần số vô tuyến và cải thiện hơn nữa quá trình
phân loại [1] [6] [10] [13].
Biến đổi wavelet rời rạc 2 chiều : Sử dụng biến đổi wavelet rời rạc 2 chiều để
giảm kích thước của ảnh MRI bằng cách cho qua bộ lọc để loại bỏ thành phần
tần số cao và giữ lại thành phần tần số thấp [8] [12].
Thuật toán PCA : Sử dụng kĩ thuật PCA để giảm chiều dữ liệu cho công việc
tính toán dễ dàng hơn và sử dung kĩ thuật GLCM để trích xuất các đặc riêng
của ảnh MRI để ta có thể phân loại được hai loại bệnh u não khác nhau.
SVM : Trong đồ án này chúng em sử dụng phương pháp học máy có giám sát
là support vector machine ( SVM ) . Support vector machine (SVM) xây dựng
(learn) một siêu phẳng (hyperplane) để phân lớp (classify) tập dữ liệu thành 2
lớp riêng biệt, nhiệm vụ của nó là xây dựng mô hình phân lớp để khi có một
dữ liệu mới vào thì mô hình phân lớp sẽ cho biết dữ liệu đó thuộc lớp nào hiện
nay [3] [4] [5]
2.2 Xây dựng các thuật toán
2.2.1 Các thuật toán giảm đặc trưng
Sau khi ta đọc ảnh MRI não thì tiếp theo ta tính toán hệ số LL3 và sắp xếp chúng
vào ma trận theo hàng và cột. Tại mỗi tầng lọc, biểu thức của phép lọc được cho bởi
công thức:
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
37
Trong đó, S(n) là tín hiệu, h(n) là đáp ứng xung của các bộ lọc thông thấp
tương ứng với hàm tỉ lệ Φ(n) và g(n) là đáp ứng xung của các bộ lọc thông cao
tương ứng với hàm wavelet ψ(n). Hai bộ lọc này liên hệ nhau theo hệ thức:
Với N là số mẫu trong tín hiệu,việc sử dụng biến đổi wavelet rời rạc 2 chiều để
giảm kích thước của ảnh MRI bằng cách cho qua bộ lọc để loại bỏ thành phần tần số
cao và giữ lại thành phần tần số thấp. Kích thước ban đầu của ảnh là 256x 256 bây giờ
chỉ còn lại là 32 x 32 = 1024 vì ta đã lược bỏ đáng kể thành phần tần số cao. Vì vậy kết
luận rằng việc áp dụng thuật toán DWT đã giúp giảm đáng kể kích thước ảnh [9] [14]
Hình 2.2: Ảnh MRI sau khi biến đổi DWT 3 mức
Sau khi biến đổi wavelet rời rạc thì kích thước của ảnh vẫn còn lớn vì vậy bước
tiếp theo ta sẽ sử dụng kĩ thuật PCA để giảm số chiều dữ liệu. Mục tiêu của phương
pháp PCA là “giảm số chiều” của 1 tập vector sao cho vẫn đảm bảo được “tối đa
thông tin quan trọng nhất” . Tức Feature extraction (giữ k thuộc tính “mới”) chứ
không phải Feature selection (giữ lại k thuộc tính nguyên gốc ban đầu). [7] [12]
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
38
Bước 1:
Sử dụng các ảnh MRI nãoI1, I2, In.
Hình 2.3: Tập cơ sở dữ liệu hình ảnh MRI não
Bước 2: Biểu diễn mọi ảnh Ii thành vector i
Ví dụ: Để đơn giản ta giả sử
chỉ có 4 ảnh trong tập huấn
luyện (kích thước 3x3).
Ta tính toán được:
1
2
3
4
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
39
Bước 3:
Tính vector ảnh não trung bình theo công thức:
Cụ thể ta có:
Bước 4:
Trừ vector khuôn mặt trung bình:
Cụ thể ta có:
=
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
40
Bước 5:
Tính ma trận hiệp phương sai (covariance) C:
C sẽ có kích thước N2xN2
Cụ thể ta có:
Từ đó ta dễ dàng tính được ma trận hiệp phương sai C, kết quả như sau:
1/M
Ma trận A
kích thước
N2xM (9x4)
tạo bởi ghép
các làm
các cột
A
=
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
41
Bước 6: Tính các Eigenvector ui(“vector riêng”) của ma trận vuông A.AT (C có kích
thước N2xN2). Ma trận này có kích thước quá lớn không khả thi phải khôn khéo
đi đường vòng !!
Bước 6.1:
Xét ma trận AT.A (chú ý ma trận này chỉ có kích thước là MxM)
Cụ thể ta có:
Bước 6.2:
Tính các vector riêng vi (eigenvectors) của ma trận vuông AT.A này. [2] [8] Tips: Về
cách tìm trị riêng (eigenvalues) & vector riêng (eigenvectors) có thể xem lại “Toán cao
cấp – Tập 1 – Đại số và Hình học Giải tích”. Tuy nhiên, cách này không khả thi khi lập
trình !! Phải dùng “Phương pháp lặp” (thuật toán QR) để tìm.Ở đây ta sẽ tìm được 4 trị
riêng của ma trận AT.A, tuy nhiên ta sẽ sắp xếp lại theo thứ tự giảm dần, và chỉ lấy các
trị riêng “non-zero”. Kết quả ta được 3 trị riêng (từ đó tính ra 3 vector riêng tương
ứng):
AT.A
= Kích thước MxM
(4x4). Giảm
hẳn!!
v
1
v
2
v
3
Các eigenvector của
AT.A tương ứng với
các eigenvalues.
Kích thước Mx1
Các eigenvalues
củaAT.A.
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
42
Sau khi đã tính được các vector vi (có kích thước là Mx1), ta sẽ dễ dàng suy ra được
các vector riêng ui (kích thước N2x1) mong muốn cần tìm, theo công thức
Chú ý nên chuẩn hóa các vector ui ( 1iu ), nghĩa là:
i
i
i
u
u
u
Sau khi chuẩn hóa ta thu được các vector uicuối cùng như sau:
2.2.2 Trích xuất đặc trưng sử dụng ma trận đồng mức xám (GLCM)
u1 u2 u3
Các eigenvector của ma
trận hiệp phương sai C
(AT.A) cần phải tìm.
Kích thước N2x1
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
43
Bước tiếp theo là sử dụng ma trận đồng mức xám ( GLCM ) để tính toán các đặc
trưng của ảnh MRI sau khi áp dụng các công thức ở phần lý thuyết ta tính được các
thông số 10 ảnh MRI có ở bảng dưới
Ta có các thông số độ tương phản , entropy và độ tương quan của não ác tính
lớn hơn lành tính vì bên ác tính giá trị mức xám nó không đồng đều , cấu trúc hình ảnh
của nó cũng phức tạp hơn, còn các thông số năng lượng, đồng nhất của u lành cao hơn
ác tính là vì hình ảnh u lành nó đồng nhất hơn , cấu trúc hình ảnh nó sẽ phân bố đồng
đều hơn so với u ác tính . Bây giờ ta lấy các thông số đặc trưng này ta đem qua cái
bước tiếp theo đó là bước phân loại.Sau khi sử dụng thuật toán PCA ta phân tích nó
chứa 19 thành phần chính và chỉ chiếm 1,86% so với các đặc trưng tổng thể nhưng lại
chiếm đến 95,4% đặc trưng quan trọng nhất.
2.2.3 Phân lớp sử dụng SVM
Chúng em xây dựng một tập dữ liệu huấn luyện bao gồm các thông số đầu vào và nhãn
tương ứng với dữ liệu là bao gồm và nhãn lớp có thông
số [12] thì trong đồ án này gồm có hai nhãn lớp chính là
nhãn “Malignant” tương ứng là lớp ác tính và nhãn “Benign” tương ứng lành tính. Tiếp
theo ta áp dụng hai phương pháp tuyến tính và phi tuyến tính để tiến hành phân loại thì
ta sẽ thu được kết quả là trong 160 ảnh MRI thì LIN kernel cho độ chính xác lên tới
95% còn Gaussian có độ chính xác là 99,38% . Điều này kết luận rằng kernel Gaussian
cho độ chính xác cao hơn kernel LIN [1] [5] [6].
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
44
2.3 Kết luận chương:
Trong chương này, chúng em đã xây dựng các thuật toán cho chương trình , cách
thức các thuật toán áp dụng vào đồ án và bên cạnh đó đánh giá kết quả thu được từ đó
có cái nhìn tổng quan hơn các thuật toán xử lý ảnh.
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
45
CHƯƠNG 3: THỰC NGHIỆM VÀ ĐÁNH GIÁ KẾT QUẢ
3.1. Giới thiệu chương
Sau khi tìm hiểu lý thuyết cũng như thuật toán của quá trình xử lý ảnh, chương này sẽ
giúp ta phân tích, đánh giá kết quả nhận được từ hệ thống đã xây dựng, qua đó tìm
hướng phát triển đề tài cũng như nâng cao chất lượng của hệ thống
3.2. Giao diện chương trình
Ở đồ án này, em sử dụng tính năng GUI (Graphical User Interface) là giao diện
đồ họa có nhiều thanh công cụ có sẳn giúp quá trình tương tác giữa người dùng và
phần mô phỏng của hệ thống được thuận tiện.
Hình 3.1: Giao diện chương trình.
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
46
Các phím bấm:
Load MRI Image: chọn ảnh MRI não muốn nhận dạng.
Segmented Image: phân đoạn khối u của ảnh MRI não đã chọn
RBF Accuracy in % : Đánh giá % độ chính xác của phân loại SVM của
kernel Gaussian
Linear Accuracy in % : Đánh giá % độ chính xác của phân loại SVM của
kernel Linear[8]
Các ô thông báo:
Type of Tumor : Kết quả của việc phân loại.
Entropy : Kết quả tính giá trị entropy của ma trận đồng mức xám .
Contrast : Kết quả tính giá trị độ tương phản của ma trận đồng mức xám .
Correlation : Kết quả tính giá trị độ tương quan của ma trận đồng mức xám
Energy : Kết quả tính giá trị năng lượng của ma trận đồng mức xám .
Homogeneity : Kết quả tính giá trị đồng nhất của ma trận đồng mức xám.
3.3 Kết quả thực nghiệm
3.3.1 Cơ sở dữ liệu kiểm tra
Cơ sở dữ liệu bao để tiến hành kiểm tra bao gồm 22 ảnh MRI có kích thước của
mỗi ảnh là 256 x 256 mà được lấy từ website của trường ĐH Harvard
(URL:
Trong số đó ta có các loại bệnh phổ biến của não như : glioma, meningioma,
Alzheimer’s disease, Alzheimer’s disease plus visual agnosia, Pick’s disease,sarcoma
và Huntington’s disease [2] [4] [10] [13]
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
47
Hình 3.2: Các mẫu ảnh MRI não (a) ảnh não trạng thái bình thường; (b) glioma;
(c) meningioma; (d) Alzheimer’s disease; (e) bệnh Alzheimer’s; (f) bệnh Pick; (g)
sarcoma; (h) bệnh Huntington’s
3.3.2 Kết quả thực nghiệm với mẫu u lành tính
Hình 3.3: Kết quả thực nghiệm với u lành.
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
48
Khi tiến hành phân loại, ta chọn Load MRI và vào foder chứa hình ảnh MRI não
u lành tính , sau khi ta đã chọn xong ta bắt đầu phân đoạn hình ảnh khối U thì ta thu
được kết quả trong khung “ Type of Tumor “ là “BENIGN” cho thấy kết quả hoàn toàn
chính xác như những gì ta đã chọn. Khung “ Features “ hiển thị cho ta những đặc trưng
riêng đã tính được từ hình ảnh ta đã chọn. Ta sẽ chọn mẫu khác để tiếp tục khảo sát.
Hình 3.4: Kết quả thực nghiệm với u lành.
Sau khi thử với ảnh MRI khác kết quả phân loại vẫn đúng như những gì mong
đợi. Tiếp theo ta tiến hành kiểm tra tỉ lệ phần trăm độ chính xác phân loại của 2 Kernel
SVM đó là kernel RBF và kernel Linear.
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
49
Hình 3.5:Kết quả thực nghiệm đo tỉ lệ % chính xác của 2 Kernel
Sau khi tiến hành đo tỉ lệ % chính xác ta nhận thấy tỉ lệ phần trăm của 2 Kernel
RBF và Linear là ngang nhau đều là 90% . Điều đó cho thấy rằng độ chính xác của 2
cách này là rất cao , độ tin cậy gần như tuyệt đối. Sự khác biệt ít rõ rệt vì dữ liệu huấn
luyện không đủ nhiều mặc dù theo giả thuyết độ chính xác của RBF là cao hơn so với
Linear.
3.3.3 Kết quả thực nghiệm với mẫu u ác tính:
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
50
Hình 3.6:Kết quả thực nghiệm với u ác.
Ta chọn Load MRI và vào foder chứa hình ảnh MRI não u lành tính , sau khi ta
đã chọn xong ta bắt đầu phân đoạn hình ảnh khối U thì ta thu được kết quả trong khung
“ Type of Tumor “ là “MALIGNANT” cho thấy kết quả hoàn toàn chính xác như
những gì ta đã chọn. Khung “ Features “ hiển thị cho ta những đặc trưng riêng đã tính
được từ hình ảnh ta đã chọn. Tiếp theo ta tiến hành kiểm tra tỉ lệ phần trăm độ chính
xác phân loại của 2 Kernel SVM đó là kernel RBF và kernel Linear thì độ chính xác
vẫn tương tự như kết quả phân loại dành cho khối u lành.
3.4 Mô hình đánh giá :
Ta sử dụng phương pháp Hold-out để đánh giá độ chính xác của việc phân loại.
Trong phương pháp holdout, dữ liệu dưa ra được phân chia ngẫu nhiên thành 2 phần là:
tập dữ liệu đào tạo và tập dữ liệu kiểm tra. Thông thường 2/3 dữ liệu cấp cho tập dữ
liệu đào tạo, phần còn lại cho tập dữ liệu kiểm tra.
Toàn bộ tập ví dụ D được chia thành 2 tập con không giao nhau [4][7]
- Tập huấn luyện D_train – để huấn luyện hệ thống
- Tập kiểm thử D_test – để đánh giá hiệu năng của hệ thống đã học
→ D = D_train ∪ D_test, và thường là |D_train| >> |D_test|
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
51
Các yêu cầu:
Bất kỳ ví dụ nào thuộc vào tập kiểm thử D_test đều không được sử dụng trong
quá trình huấn luyện hệ thống
Bất kỳ ví dụ nào được sử dụng trong giai đoạn huấn luyện hệ thống (i.e., thuộc
vào D_train) đều không được sử dụng trong giai đoạn đánh giá hệ thống
Các ví dụ kiểm thử trong D_test cho phép một đánh giá không thiên vị đối với
hiệu năng của hệ thống
Trong phạm vi đồ án này , chúng em dùng 160 ảnh MRI não để khảo sát và chúng ta sẽ
phân chia : 128 ảnh dùng để huấn luyện, 32 ảnh để kiểm tra.
Hình 3.7 : Mô hình hold-out để tiến hành đánh giá
Hình 3.8 : Kết quả đánh giá của 2 kernel Linear và GRB
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
52
Dựa vào bảng đánh giá ta có thể thấy được kết quả phân loại của GRB (20 +
139)/160 = 99.38% và kết quả của LIN (17 +135)/160 = 95% , điều đó cho thấy rằng
kernel RGB có độ chính xác cao hơn kernel LIN. Vậy nếu ta muốn việc phân loại
nhanh hơn và tránh hiện tượng overfitting ta có thể sử dụng kernel LIN , còn nếu ta
muốn việc phân loại chính xác hơn ta sử dụng kernel RBF [5].
3.5 Phân tích thời gian thực hiện:
Việc tính toán thời gian là một yếu tố quan trọng để đánh giá cả quá trình phân
loại. Công việc huấn luyện SVM không được xem xét, vì các thông số của SVM giữ
không thay đổi sau khi huấn luyện. Chúng tôi đã xem xét 160 hình ảnh MRI vào phân
loại, ghi nhận thời gian tính toán, tính toán giá trị trung bình, mô tả việc tiêu thụ thời
gian của giai đoạn khác nhau trong hình1. Đối với mỗi hình ảnh có kích thước 256 ×
256, thì thời gian cho việc tính toán sẽ có thể mất bao nhiêu lâu [9] [11]
DWT 2D PCA + GLCM SVM Classification
Hình 3.9: Tính toán thời gian của 3 giai đoạn chính
Tính năng biến đổi wavelet rời rạc, PCA, và phân loại SVM tiêu tốn thời gian
lần lượt là 0,023 s, 0,0187, và 0,0031 s, tương ứng. Vậy giai đoạn DWT là tiêu tốn thời
gian nhất là 0,023 s. Còn công việc giảm số chiều dữ liệu dùng PCA tiêu tốn thời gian
là 0,0187 s. Việc phân loại SVM tốn thời gian ít nhất chỉ 0,0031 s. Tổng thời gian tính
toán cho mỗi hình ảnh kích thước 256 × 256 là khoảng 0,0448 s, điều đó cho thấy rằng
hệ thống đủ cho công việc chẩn đoán diễn ra nhanh chóng [13][14].
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
53
3.6. Kết luận chương.
Qua thực nghiệm, nhận thấy việc phân loại với các ảnh MRI đều cho ra kết quả
chính xác như mong đợi. Khi ta thêm một ảnh nào khác không có trong cơ sở dữ liệu
thì việc phân loại vẫn cho độ chính xác cao. Chúng em đã áp dụng hai loại kernel khác
nhau của SVM để so sánh sự khác nhau giữa chúng, thì trong thí nghiệm này kernel
GRB thể hiện độ chính xác cao hơn LIN qua sự khảo sát 160 ảnh MRI. Chương trình
test có thời gian đáp ứng khá nhanh và thời gian tiêu tốn tính được là 0.0448s, điều này
thuận lợi cho việc chẩn đoán nhanh của bác sĩ .
Hệ thống còn một số hạn chế như là chưa phân loại rõ loại bệnh gì mà chỉ phân ra
hai loại ác tính và lành tính, vì hệ thống có độ chính xác cao và thời gian tiêu tốn nhanh
đồng nghĩa với việc dùng nhiều thuật toán phức tạp
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
54
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI
Qua quá trình thực hiện đồ án về phương pháp phân loại ảnh MRI não, đồ án
đã có được những kết quả như sau:
o Trình bày rõ các ứng dụng của phân loại ảnh MRI não.
o Xây dựng cơ sở dữ liệu phù hợp với thuật toán SVM.
o Kết quả phân loại có độ chính xác cao.
o Phân loại đối với các dữ liệu đầu vào khác nhau.
Hướng phát triển của đề tài :
o Xây dựng một hệ thống hoàn chỉnh kết hợp với phần cứng.
o Xây dựng một hệ thống phân loại ảnh MRI não có độ chính xác cao
hơn và thời gian nhanh hơn.
o Xây dựng một chương trình không chỉ phân loại ảnh MRI não mà có
thể chẩn đoán chính xác loại bệnh đang mắc phải
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
55
TÀI LIỆU THAM KHẢO
[1] Zhang, Y., L. Wu, and S. Wang, “Magnetic resonance brain image
classification by an improved artificial b ee colony algorithm,”
[2] Mohsin, S. A., N. M. Sheikh, and U. Saeed, “MRI induced heating of
deep brain stimulation leads: Effect of the air-tissue interface,”
[3] Golestanirad, L., A. P. Izquierdo, S. J. Graham, J. R. Mosig, and C.
Pollo, “Effect of realistic modeling of deep brain stimulation on the
prediction of volume of activated tissue,” Progress In Electromagnetics
Research, Vol. 126, 1–16, 2012.
[4] Mohsin, S. A., “Concentration of the specific absorption rate around deep
brain stimulation electrodes during MRI,” Progress In Electromagnetics
Research, Vol. 121, 469–484, 2011.
[5] Oikonomou, A., I. S. Karanasiou, and N. K. Uzunoglu, “Phasedarray
near field radiometry for brain intracranial applications,” Progress In
Electromagnetics Research, Vol. 109, 345–360, 2010.
[6] Scapaticci, R., L. Di Donato, I. Catapano, and L. Crocco, “A feasibility
study on microwave imaging for brain stroke monitoring,” Progress In
Electromagnetics Research B, Vol. 40, 305–324, 2012.
[7] Asimakis, N. P., I. S. Karanasiou, P. K. Gkonis, and N. K. Uzunoglu,
“Theoretical analysis of a passive acoustic brain monitoring system,”
Progress In Electromagnetics Research B, Vol. 23, 165–180, 2010.
[8] Chaturvedi, C. M., V. P. Singh, P. Singh, P. Basu, M. Singaravel, R. K.
Shukla, A. Dhawan, A. K. Pati, R. K. Gangwar, and S. P. Singh. “2.45
GHz (CW) microwave irradiation alters circadian organization, spatial
memory, DNA structure in the brain cells and blood cell counts of male
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
56
mice, mus musculus,” Progress In Electromagnetics Research B, Vol. 29,
23–42, 2011.
[9] Emin Tagluk, M., M. Akin, and N. Sezgin, “Classification of sleep apnea
by using wavelet transform and artificial neural networks,” Expert
Systems with Applications, Vol. 37, No. 2, 1600–1607, 2010.
[10] Zhang, Y., L. Wu, and G. Wei, “A new classifier for polarimetric SAR
images,” Progress in Electromagnetics Research, Vol. 94, 83– 104, 2009.
[11] Camacho, J., J. Pic´o, and A. Ferrer, “Corrigendum to ‘The best
approaches in the on line monitoring of batch processes based on PCA:
Does the modelling structure matter?’ [Anal. Chim. Acta Volume 642
(2009) 59-68],” Analytica Chimica Acta, Vol. 658,
[12] Chaplot, S., L. M. Patnaik, and N. R. Jagannathan, “Classification of
magnetic resonance brain images using wavelets as input to supp ort
vector machine and neural network,” Biomedical Signal Processing and
Control, Vol. 1, No. 1, 86–92, 2006.
[13] Cocosco, C. A., A. P. Zijdenbos, and A. C. Evans, “A fully automatic
and robust brain MRI tissue classification method,” Medical Image
Analysis, Vol. 7, No. 4, 513–527, 2003.
[14] Zhang, Y. and L. Wu, “Weights optimization of neural network
viaimproved BCO approach,” Progress In Electromagnetics Research,
Vol. 83, 185–198, 2008.
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
57
PHỤ LỤC
Code chương trình:
Chương trình PCA và DWT :
close all
clc
clear all
[filename,pathname] =
uigetfile({'*.*';'*.bmp';'*.tif';'*.gif';'*.png'},'Pick an
Image File');
I = imread([pathname,filename]);
figure, imshow(I); title('Brain MRI Image');
I = imresize(I,[200,200]);
% Convert to grayscale
gray = rgb2gray(I);
% Otsu Binarization for segmentation
level = graythresh(I);
img = im2bw(I,level);
figure, imshow(img);title('Otsu Thresholded Image');
% K means Clustering to segment tumor
cform = makecform('srgb2lab');
% Apply the colorform
lab_he = applycform(I,cform);
% Classify the colors in a*b* colorspace using K means
clustering.
% Since the image has 3 colors create 3 clusters.
% Measure the distance using Euclidean Distance Metric.
ab = double(lab_he(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
nColors = 1;
[cluster_idx cluster_center] =
kmeans(ab,nColors,'distance','sqEuclidean', ...'Replicates',1);
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
58
%[cluster_idx cluster_center] =
kmeans(ab,nColors,'distance','sqEuclidean','Replicates',3);
% Label every pixel in tha image using results from K means
pixel_labels = reshape(cluster_idx,nrows,ncols);
% Create a blank cell array to store the results of clustering
segmented_images = cell(1,3);
% Create RGB label using pixel_labels
rgb_label = repmat(pixel_labels,[1,1,3]);
for k = 1:nColors
colors = I;
colors(rgb_label ~= k) = 0;
segmented_images{k} = colors;
end
%
figure, imshow(segmented_images{1});title('Objects in Cluster
1');
%figure, imshow(segmented_images{2});title('Objects in Cluster
2');
seg_img = im2bw(segmented_images{1});
figure, imshow(seg_img);title('Segmented Tumor');
%seg_img = img;
% Extract features using DWT
x = double(seg_img);
m = size(seg_img,1);
n = size(seg_img,2);
signal1 = seg_img(:,:);
%Feat = getmswpfeat(signal,winsize,wininc,J,'matlab');
%Features = getmswpfeat(signal,winsize,wininc,J,'matlab');
[cA1,cH1,cV1,cD1] = dwt2(signal1,'db4');
[cA2,cH2,cV2,cD2] = dwt2(cA1,'db4');
[cA3,cH3,cV3,cD3] = dwt2(cA2,'db4');
DWT_feat = [cA3,cH3,cV3,cD3];
G = pca(DWT_feat);
whos DWT_feat
whos G
g = graycomatrix(G);
stats = graycoprops(g,'Contrast Correlation Energy
Homogeneity');
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
59
Contrast = stats.Contrast;
Correlation = stats.Correlation;
Energy = stats.Energy;
Homogeneity = stats.Homogeneity;
Mean = mean2(G);
Standard_Deviation = std2(G);
Entropy = entropy(G);
RMS = mean2(rms(G));
%Skewness = skewness(img)
Variance = mean2(var(double(G)));
a = sum(double(G(:)));
Smoothness = 1-(1/(1+a));
Kurtosis = kurtosis(double(G(:)));
Skewness = skewness(double(G(:)));
% Inverse Difference Movement
m = size(G,1);
n = size(G,2);
in_diff = 0;
for i = 1:m
for j = 1:n
temp = G(i,j)./(1+(i-j).^2);
in_diff = in_diff+temp;
end
end
IDM = double(in_diff);
feat = [Contrast,Correlation,Energy,Homogeneity, Mean,
Standard_Deviation, Entropy, RMS, Variance, Smoothness,
Kurtosis, Skewness, IDM];
load Trainset.mat
xdata = meas;
group = label;
svmStruct1 = svmtrain(xdata,group,'kernel_function', 'linear');
species = svmclassify(svmStruct1,feat,'showplot',false)
% To plot classification graphs, SVM can take only two
dimensional data
data1 = [meas(:,1), meas(:,2)];
newfeat = [feat(:,1),feat(:,2)];
pause
%close all
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
60
svmStruct1_new = svmtrain(data1,group,'kernel_function',
'linear','showplot',false);
species_Linear_new =
svmclassify(svmStruct1_new,newfeat,'showplot',false);
%%
% Multiple runs for accuracy highest is 90%
load Trainset.mat
%data = [meas(:,1), meas(:,2)];
data = meas;
groups = ismember(label,'BENIGN ');
groups = ismember(label,'MALIGNANT');
[train,test] = crossvalind('HoldOut',groups);
cp = classperf(groups);
%svmStruct =
svmtrain(data(train,:),groups(train),'boxconstraint',Inf,'showp
lot',false,'kernel_function','rbf');
svmStruct =
svmtrain(data(train,:),groups(train),'showplot',false,'kernel_f
unction','linear');
classes = svmclassify(svmStruct,data(test,:),'showplot',false);
classperf(cp,classes,test);
Accuracy_Classification = cp.CorrectRate.*100;
sprintf('Accuracy of Linear kernel is:
%g%%',Accuracy_Classification)
%% Accuracy with RBF
svmStruct_RBF =
svmtrain(data(train,:),groups(train),'boxconstraint',Inf,'showp
lot',false,'kernel_function','rbf');
classes2 =
svmclassify(svmStruct_RBF,data(test,:),'showplot',false);
classperf(cp,classes2,test);
Accuracy_Classification_RBF = cp.CorrectRate.*100;
sprintf('Accuracy of RBF kernel is:
%g%%',Accuracy_Classification_RBF)
%% Accuracy with Polynomial
svmStruct_Poly =
svmtrain(data(train,:),groups(train),'Polyorder',2,'Kernel_Func
tion','polynomial');
classes3 =
svmclassify(svmStruct_Poly,data(test,:),'showplot',false);
classperf(cp,classes3,test);
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
61
Accuracy_Classification_Poly = cp.CorrectRate.*100;
sprintf('Accuracy of Polynomial kernel is:
%g%%',Accuracy_Classification_Poly)
%%
% 5 fold cross validation
% 5 fold cross validation
load Normalized_Features.mat
xdata = norm_feat;
group = norm_label;
indicies = crossvalind('Kfold',label,5);
cp = classperf(label);
for i = 1:length(label)
test = (indicies==i);train = ~ test;
svmStruct =
svmtrain(xdata(train,:),group(train),'boxconstraint',Inf,'showp
lot',false,'kernel_function','rbf');
classes =
svmclassify(svmStruct,xdata(test,:),'showplot',false);
%class =
svmclassify(meas(test,:),meas(train,:),label(train,:));
classperf(cp,classes,test);
end
Chương trình giao diện:
function varargout = BrainMRI_GUI(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @BrainMRI_GUI_OpeningFcn, ...
'gui_OutputFcn', @BrainMRI_GUI_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State,
varargin{:});
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
62
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before BrainMRI_GUI is made visible.
function BrainMRI_GUI_OpeningFcn(hObject, eventdata, handles,
varargin)
handles.output = hObject;
ss = ones(200,200);
axes(handles.axes1);
imshow(ss);
axes(handles.axes2);
imshow(ss);
% Update handles structure
guidata(hObject, handles);
% --- Outputs from this function are returned to the command
line.
function varargout = BrainMRI_GUI_OutputFcn(hObject, eventdata,
handles)
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
[FileName,PathName] = uigetfile('*.jpg;*.png;*.bmp','Pick an
MRI Image');
if isequal(FileName,0)||isequal(PathName,0)
warndlg('User Press Cancel');
else
P = imread([PathName,FileName]);
P = imresize(P,[200,200]);
% input =imresize(a,[512 512]);
axes(handles.axes1)
imshow(P);title('Brain MRI Image');
handles.ImgData = P;
% handles.FileName = FileName;
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
63
guidata(hObject,handles);
end
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
if isfield(handles,'ImgData')
%if isfield(handles,'imgData')
I = handles.ImgData;
gray = rgb2gray(I);
% Otsu Binarization for segmentation
level = graythresh(I);
%gray = gray>80;
img = im2bw(I,.6);
img = bwareaopen(img,80);
img2 = im2bw(I);
axes(handles.axes2)
imshow(img);title('Segmented Image');
%imshow(tumor);title('Segmented Image');
handles.ImgData2 = img2;
guidata(hObject,handles);
signal1 = img2(:,:);
%Feat = getmswpfeat(signal,winsize,wininc,J,'matlab');
%Features = getmswpfeat(signal,winsize,wininc,J,'matlab');
[cA1,cH1,cV1,cD1] = dwt2(signal1,'db4');
[cA2,cH2,cV2,cD2] = dwt2(cA1,'db4');
[cA3,cH3,cV3,cD3] = dwt2(cA2,'db4');
DWT_feat = [cA3,cH3,cV3,cD3];
G = pca(DWT_feat);
whos DWT_feat
whos G
g = graycomatrix(G);
stats = graycoprops(g,'Contrast Correlation Energy
Homogeneity');
Contrast = stats.Contrast;
Correlation = stats.Correlation;
Energy = stats.Energy;
Homogeneity = stats.Homogeneity;
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
64
Mean = mean2(G);
Standard_Deviation = std2(G);
Entropy = entropy(G);
RMS = mean2(rms(G));
%Skewness = skewness(img)
Variance = mean2(var(double(G)));
a = sum(double(G(:)));
Smoothness = 1-(1/(1+a));
Kurtosis = kurtosis(double(G(:)));
Skewness = skewness(double(G(:)));
% Inverse Difference Movement
m = size(G,1);
n = size(G,2);
in_diff = 0;
for i = 1:m
for j = 1:n
temp = G(i,j)./(1+(i-j).^2);
in_diff = in_diff+temp;
end
end
IDM = double(in_diff);
feat = [Contrast,Correlation,Energy,Homogeneity, Mean,
Standard_Deviation, Entropy, RMS, Variance, Smoothness,
Kurtosis, Skewness, IDM];
load Trainset.mat
xdata = meas;
group = label;
svmStruct1 = svmtrain(xdata,group,'kernel_function',
'linear');
species = svmclassify(svmStruct1,feat,'showplot',false);
if strcmpi(species,'MALIGNANT')
helpdlg(' Malignant Tumor ');
disp(' Malignant Tumor ');
else
helpdlg(' Benign Tumor ');
disp(' Benign Tumor ');
end
set(handles.edit4,'string',species);
% Put the features in GUI
set(handles.edit7,'string',Entropy);
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
65
set(handles.edit14,'string',Contrast);
set(handles.edit15,'string',Correlation);
set(handles.edit16,'string',Energy);
set(handles.edit17,'string',Homogeneity);
end
% --- Executes on button press in pushbutton3.
function pushbutton4_Callback(hObject, eventdata, handles)
load Trainset.mat
%data = [meas(:,1), meas(:,2)];
Accuracy_Percent= zeros(200,1);
itr = 80;
hWaitBar = waitbar(0,'Evaluating Maximum Accuracy with 100
iterations');
for i = 1:itr
data = meas;
%groups = ismember(label,'BENIGN ');
groups = ismember(label,'MALIGNANT');
[train,test] = crossvalind('HoldOut',groups);
cp = classperf(groups);
%svmStruct =
svmtrain(data(train,:),groups(train),'boxconstraint',Inf,'showp
lot',false,'kernel_function','rbf');
svmStruct_RBF =
svmtrain(data(train,:),groups(train),'boxconstraint',Inf,'showp
lot',false,'kernel_function','rbf');
classes2 =
svmclassify(svmStruct_RBF,data(test,:),'showplot',false);
classperf(cp,classes2,test);
%Accuracy_Classification_RBF = cp.CorrectRate.*100;
Accuracy_Percent(i) = cp.CorrectRate.*100;
sprintf('Accuracy of RBF Kernel is: %g%%',Accuracy_Percent(i))
waitbar(i/itr);
end
delete(hWaitBar);
Max_Accuracy = max(Accuracy_Percent);
sprintf('Accuracy of RBF kernel is: %g%%',Max_Accuracy)
set(handles.edit1,'string',Max_Accuracy);
guidata(hObject,handles);
% --- Executes on button press in pushbutton4.
function pushbutton3_Callback(hObject, eventdata, handles)
load Trainset.mat
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
66
%data = [meas(:,1), meas(:,2)];
Accuracy_Percent= zeros(200,1);
itr = 100;
hWaitBar = waitbar(0,'Evaluating Maximum Accuracy with 100
iterations');
for i = 1:itr
data = meas;
%groups = ismember(label,'BENIGN ');
groups = ismember(label,'MALIGNANT');
[train,test] = crossvalind('HoldOut',groups);
cp = classperf(groups);
svmStruct =
svmtrain(data(train,:),groups(train),'showplot',false,'kernel_f
unction','linear');
classes = svmclassify(svmStruct,data(test,:),'showplot',false);
classperf(cp,classes,test);
%Accuracy_Classification = cp.CorrectRate.*100;
Accuracy_Percent(i) = cp.CorrectRate.*100;
sprintf('Accuracy of Linear Kernel is:
%g%%',Accuracy_Percent(i))
waitbar(i/itr);
end
delete(hWaitBar);
Max_Accuracy = max(Accuracy_Percent);
sprintf('Accuracy of Linear kernel is: %g%%',Max_Accuracy)
set(handles.edit2,'string',Max_Accuracy);
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
load Trainset.mat
%data = [meas(:,1), meas(:,2)];
Accuracy_Percent= zeros(200,1);
itr = 100;
hWaitBar = waitbar(0,'Evaluating Maximum Accuracy with 100
iterations');
for i = 1:itr
data = meas;
groups = ismember(label,'BENIGN ');
groups = ismember(label,'MALIGNANT');
[train,test] = crossvalind('HoldOut',groups);
cp = classperf(groups);
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
67
svmStruct_Poly =
svmtrain(data(train,:),groups(train),'Polyorder',2,'Kernel_Func
tion','polynomial');
classes3 =
svmclassify(svmStruct_Poly,data(test,:),'showplot',false);
classperf(cp,classes3,test);
Accuracy_Percent(i) = cp.CorrectRate.*100;
sprintf('Accuracy of Polynomial Kernel is:
%g%%',Accuracy_Percent(i))
waitbar(i/itr);
end
delete(hWaitBar);
Max_Accuracy = max(Accuracy_Percent);
%Accuracy_Classification_Poly = cp.CorrectRate.*100;
sprintf('Accuracy of Polynomial kernel is: %g%%',Max_Accuracy)
set(handles.edit3,'string',Max_Accuracy);
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as
text
% str2double(get(hObject,'String')) returns contents of
edit1 as a double
% --- Executes during object creation, after setting all
properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all
CreateFcns called
% Hint: edit controls usually have a white background on
Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
68
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit3_Callback(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit3 as
text
% str2double(get(hObject,'String')) returns contents of
edit3 as a double
% --- Executes during object creation, after setting all
properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all
CreateFcns called
% Hint: edit controls usually have a white background on
Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes during object creation, after setting all
properties.
function edit4_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
69
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit6_Callback(hObject, eventdata, handles)
function edit6_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit6 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all
CreateFcns called
% Hint: edit controls usually have a white background on
Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit7_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all
properties.
function edit7_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit7 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all
CreateFcns called
% Hint: edit controls usually have a white background on
Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit8_Callback(hObject, eventdata, handles)
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
70
% --- Executes during object creation, after setting all
properties.
function edit8_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit9_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all
properties.
function edit9_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit10_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all
properties.
function edit10_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit10 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles empty - handles not created until after all
CreateFcns called
% Hint: edit controls usually have a white background on
Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit11_Callback(hObject, eventdata, handles)
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
71
% --- Executes during object creation, after setting all
properties.
function edit11_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit12_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all
properties.
function edit12_CreateFcn(hObject, eventdata, handles)
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit13_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all
properties.
function edit13_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit14_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all
properties.
function edit14_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
72
function edit15_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all
properties.
function edit15_CreateFcn(hObject, eventdata, handles)
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit16_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all
properties.
function edit16_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit17_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all
properties.
function edit17_CreateFcn(hObject, eventdata, handles)
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton6 (see GCBO)
% eventdata reserved - to be defined in a future version of
MATLAB
% handles structure with handles and user data (see GUIDATA)
load Trainset.mat
%data = [meas(:,1), meas(:,2)];
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
73
Accuracy_Percent= zeros(200,1);
itr = 100;
hWaitBar = waitbar(0,'Evaluating Maximum Accuracy with 100
iterations');
for i = 1:itr
data = meas;
groups = ismember(label,'BENIGN ');
groups = ismember(label,'MALIGNANT');
[train,test] = crossvalind('HoldOut',groups);
cp = classperf(groups);
svmStruct4 =
svmtrain(data(train,:),groups(train),'showplot',false,'kernel_f
unction','quadratic');
classes4 =
svmclassify(svmStruct4,data(test,:),'showplot',false);
classperf(cp,classes4,test);
%Accuracy_Classification_Quad = cp.CorrectRate.*100;
Accuracy_Percent(i) = cp.CorrectRate.*100;
sprintf('Accuracy of Quadratic Kernel is:
%g%%',Accuracy_Percent(i))
waitbar(i/itr);
end
delete(hWaitBar);
Max_Accuracy = max(Accuracy_Percent);
sprintf('Accuracy of Quadratic kernel is: %g%%',Max_Accuracy)
set(handles.edit19,'string',Max_Accuracy);
function edit19_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all
properties.
function edit19_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes during object creation, after setting all
properties.
function axes6_CreateFcn(hObject, eventdata, handles)
imshow('D:\Brain_Tumor5\1.bmp')
% --- Executes during object creation, after setting all
properties.
ĐỒ ÁN TỐT NGHIỆP – CHUYÊN NGÀNH KĨ THUẬT MÁY TÍNH
74
function axes7_CreateFcn(hObject, eventdata, handles)
imshow('D:\Brain_Tumor5\2.png')
% --- Executes during object creation, after setting all
properties.
function axes8_CreateFcn(hObject, eventdata, handles)
imshow('D:\Brain_Tumor5\3.bmp')
Các file đính kèm theo tài liệu này:
- bao_cao_datn_2601.pdf