Đồ án Phân loại ảnh MRI u não

 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

pdf74 trang | Chia sẻ: builinh123 | Lượt xem: 3511 | Lượt tải: 3download
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 ( 1iu ), 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:

  • pdfbao_cao_datn_2601.pdf
Luận văn liên quan