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
74 trang | 
Chia sẻ: builinh123 | Lượt xem: 4009 | 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 bao_cao_datn_2601.pdf