Mục lục:

Xử lý hình ảnh Moyamoya: 8 bước
Xử lý hình ảnh Moyamoya: 8 bước

Video: Xử lý hình ảnh Moyamoya: 8 bước

Video: Xử lý hình ảnh Moyamoya: 8 bước
Video: Phẫu thuật mạch máu trong bệnh lý Moya-Moya 2024, Tháng mười một
Anonim
Xử lý hình ảnh Moyamoya
Xử lý hình ảnh Moyamoya

Moyamoya, "khói phồng", là một căn bệnh hiếm gặp gây ra bởi sự tắc nghẽn các động mạch ở hạch nền, là một khu vực ở đáy não. Căn bệnh này là một bệnh mạch máu não tiến triển chủ yếu ảnh hưởng đến trẻ em. Các triệu chứng của moyamoya bao gồm đột quỵ ban đầu, đột quỵ nhỏ liên tục, yếu cơ, tê liệt hoặc co giật do thu hẹp dần dần các động mạch. Nếu không được điều trị, moyamoya sẽ gây ra các vấn đề về khả năng nói, suy giảm giác quan và ý thức bị tổn thương. Trong dự án của chúng tôi, chúng tôi sẽ sử dụng MATLAB để xử lý trước hình ảnh MRI hoặc MRA bằng cách sử dụng các bộ lọc khác nhau để giảm nhiễu trong hình ảnh nhằm xác định vị trí khu vực bị ảnh hưởng. Ngoài ra, chúng tôi sẽ sử dụng tính năng nâng cao để xác định vị trí các khu vực bị ảnh hưởng chính xác hơn. Hơn nữa, sau đó chúng tôi sẽ chạy thử nghiệm t mẫu độc lập để xác định liệu có sự khác biệt đáng kể giữa số lượng mạch máu trong não bình thường so với não bị ảnh hưởng bởi moyamoya hay không.

Bước 1: Tìm bản quét MRI và MRA của một bộ não bình thường và một bộ não bị ảnh hưởng bởi Moyamoya

Tìm bản quét MRI và MRA của một bộ não bình thường và một bộ não bị ảnh hưởng bởi Moyamoya
Tìm bản quét MRI và MRA của một bộ não bình thường và một bộ não bị ảnh hưởng bởi Moyamoya
Tìm bản quét MRI và MRA của một bộ não bình thường và một bộ não bị ảnh hưởng bởi Moyamoya
Tìm bản quét MRI và MRA của một bộ não bình thường và một bộ não bị ảnh hưởng bởi Moyamoya
Tìm ảnh chụp MRI và MRA của não bình thường và não bị ảnh hưởng bởi Moyamoya
Tìm ảnh chụp MRI và MRA của não bình thường và não bị ảnh hưởng bởi Moyamoya
Tìm ảnh chụp MRI và MRA của não bình thường và não bị ảnh hưởng bởi Moyamoya
Tìm ảnh chụp MRI và MRA của não bình thường và não bị ảnh hưởng bởi Moyamoya

Những hình ảnh này là bản quét chúng tôi đã sử dụng cho dự án mà chúng tôi tìm thấy trên mạng. Hai hình ảnh với các mạch máu nằm ở giữa là hình ảnh quét MRA, trong khi hai hình ảnh còn lại là quét MRI.

Các liên kết sau là nơi tìm thấy những hình ảnh này:

static.cambridge.org/resource/id/urn:cambr…

static.cambridge.org/resource/id/urn:cambr…

Bước 2: Tải hình ảnh vào MATLAB và gán hình ảnh cho một biến để hiển thị hình ảnh

Tải hình ảnh vào MATLAB và gán hình ảnh cho một biến để hiển thị hình ảnh
Tải hình ảnh vào MATLAB và gán hình ảnh cho một biến để hiển thị hình ảnh

Để bắt đầu quá trình, hãy bắt đầu bằng cách xóa cửa sổ lệnh, đóng tất cả các số liệu và đồ thị có thể có có thể đã mở và xóa các biến đã được gán trong không gian làm việc của bạn.

Sau đó, tạo một vòng lặp for từ 1 đến 2 bằng lệnh i = [1: 2]

Sau đó, tải các hình ảnh MRA bằng cách sử dụng lệnh imread (sprintf ('filename%.filetype', i)) để đọc các hình ảnh từ các tệp được chỉ định bởi tên tệp, theo sau là số được sử dụng cho vòng lặp bằng cách sử dụng sprintf để tải và gán hàng loạt nó thành một biến.

Sau đó, để hiển thị hình ảnh trong một hình, sử dụng lệnh imshow (I).

Để gán một bản đồ màu xám, hãy sử dụng bản đồ màu lệnh (màu xám).

Để loại bỏ hoàn toàn màu sắc và chuyển đổi ma trận 3D cho hình ảnh thành 2D, hãy sử dụng lệnh rgb2gray (I) và gán nó cho một biến riêng biệt.

Sau đó tải các hình ảnh MRI bằng cách sử dụng lệnh đã nêu trước đó hoặc imread (sprintf ('filename%.filetype', i)) và gán nó cho một biến mới

Lặp lại lệnh rgb2gray với biến mới được sử dụng cho hình ảnh MRI.

Nếu cần, bạn có thể thay đổi kích thước hình ảnh bằng lệnh imresize (A, scale) và gán cho một biến riêng biệt.

Bước 3: Tăng cường cấu trúc kéo dài trong hình ảnh cường độ với tính năng lọc đa tỷ lệ

Nâng cao cấu trúc kéo dài trong hình ảnh cường độ với tính năng lọc đa tỷ lệ
Nâng cao cấu trúc kéo dài trong hình ảnh cường độ với tính năng lọc đa tỷ lệ

Sử dụng một biến mới, sử dụng lệnh fibermetric (A) để nâng cao cấu trúc hình ống trong hình ảnh

Với biến trước đó, sử dụng lệnh histeq (B) để tăng cường cân bằng biểu đồ bằng cách chuyển đổi cường độ của hình ảnh và gán nó cho một biến mới.

Hiển thị biểu đồ bằng lệnh imhist (B)

Tạo một biến mới để tạo ngưỡng cho bộ lọc. Trong trường hợp này, hãy chỉ định biến trước đó> 0,875, lọc ra cường độ pixel dưới giá trị 0,875

Sau đó, tạo một hình mới và sử dụng lệnh imshow (A) để hiển thị hình ảnh mới được lọc.

Bước 4: Chạy bộ lọc trung vị 2D

Chạy bộ lọc trung vị 2D
Chạy bộ lọc trung vị 2D

Sử dụng lệnh medfilt2 (A, [m n]), chạy bộ lọc trung vị 2D, trong đó mỗi pixel đầu ra chứa giá trị trung bình trong ranh giới mxn xung quanh pixel tương ứng trong hình ảnh đầu vào.

Tạo một hình mới và sử dụng imshow (A) để hiển thị hình ảnh đã lọc trung vị.

Bước 5: Mặt nạ hình ảnh

Mặt nạ hình ảnh
Mặt nạ hình ảnh

Sử dụng hình ảnh được lọc trung vị, hãy sử dụng lệnh [labelImage, numberOfBlots] = bwlabel (A) để đếm số lượng đốm trắng trong hình ảnh

Sau đó, sử dụng chức năng region props state = regionprops (có nhãn Hình ảnh, 'Khu vực') để tính toán diện tích của mỗi vết hoặc mạch máu

Gán tất cả các khu vực vào một biến

Sau đó, sử dụng một biến khác, đếm số khối vượt quá 50 pixel

Sau đó, sắp xếp bất kỳ đốm màu nào dưới 50 pixel theo thứ tự giảm dần bằng lệnh [sortedAreas, sortedIndicies] = sort (Các khu vực, 'xuống dưới')

Sau đó, sử dụng một biến khác, sử dụng lệnh ismember (labelImage, sortedIndicies (1: numberToExtract)) để trả về một mảng có các phần tử có nhãnImage được tìm thấy trong sortedIndicies từ số 1 đến số mạch máu để trả về logic 1 (true) hoặc một lôgic 0 (sai).

Với biến ở bước trước, hãy tìm các điểm đúng (giá trị> 0) và tạo một mảng logic để tạo ảnh nhị phân và gán nó cho một biến mới.

Tạo một hình mới và sử dụng imshow (A) hình ảnh nhị phân mới.

Sau đó, đảo ngược hình ảnh bằng lệnh imcomplement (A) và gán nó cho một biến khác.

Để tạo hình ảnh có mặt nạ, hãy sử dụng một biến mới với lệnh thay đổi kích thước. * Uint8 (hình ảnh đảo ngược)

Tạo một hình mới và sử dụng imshow (A) để hiển thị hình ảnh bị che.

Để kết thúc toàn bộ mã, hãy đảm bảo sử dụng lệnh 'end' để kết thúc toàn bộ vòng lặp for

Bước 6: Chọn quét MRA để kiểm tra thống kê

Chọn bản quét MRA để kiểm tra thống kê
Chọn bản quét MRA để kiểm tra thống kê
Chọn bản quét MRA để kiểm tra thống kê
Chọn bản quét MRA để kiểm tra thống kê
Chọn bản quét MRA để kiểm tra thống kê
Chọn bản quét MRA để kiểm tra thống kê

Để chuẩn bị cho thử nghiệm thống kê, hãy chọn các bản quét MRA sẽ được sử dụng cho thử nghiệm t mẫu độc lập. Bởi vì hai mẫu của chúng tôi sẽ là não bị ảnh hưởng bởi Moyamoya và não bình thường, hãy chọn một số lượng quét MRA phù hợp cho mỗi nhóm.

Bước 7: Tính diện tích các bình máu chuẩn bị cho kiểm tra thống kê

Tính diện tích các bình máu chuẩn bị cho kiểm tra thống kê
Tính diện tích các bình máu chuẩn bị cho kiểm tra thống kê

Kiểm tra thống kê sẽ tập trung vào chiều dài hoặc số lượng mạch máu được hiển thị trên quét MRA. Vì vậy, chúng ta phải tính toán diện tích của các mạch máu trước khi so sánh.

Bắt đầu bằng cách lọc MRA của não bình thường và tính toán số lượng mạch máu. Để làm điều này, hãy chạy một vòng lặp for. Bởi vì có ba hình ảnh, điều kiện sẽ là i = [1: 3].

Mở hình ảnh bằng lệnh imread và gán nó cho một biến.

Tiếp theo, tạo câu lệnh if / else bằng lệnh if, else. Đối với câu lệnh if, hãy sử dụng kích thước lệnh (A, 3) == 3, trong đó A là biến được sử dụng để mở cho hình ảnh, để tạo câu lệnh if khi kích thước thứ ba của mảng là 3. Sau đó chuyển đổi hình ảnh sang 2D và loại bỏ màu sắc bằng cách sử dụng lệnh rgb2gray (A) và gán nó cho một biến mới. Sử dụng lệnh imresize (A, [m n]) để thay đổi kích thước hình ảnh. Trong trường hợp này, chúng tôi đã thay đổi kích thước hình ảnh thành ma trận 1024 x 1024. Để nâng cao cấu trúc hình ống của hình ảnh, hãy sử dụng lại lệnh fibermetric và gán nó cho một biến mới.

Sau đây là cho câu lệnh else. Nếu hình ảnh không phải là ma trận 3D, chúng tôi muốn bỏ qua chuyển đổi. Thực hiện tương tự như câu lệnh if, nhưng không có lệnh rgb2gray (A).

Tạo một biến mới, đặt nó bằng với biến từ bước đo sợi quang lớn hơn 0,15. Điều này tạo ngưỡng cho hình ảnh đối với các cường độ lớn hơn 0,15.

Chúng tôi sẽ lặp lại các dòng mã từ bước 4 và 5 của chỉ dẫn từ dòng bộ lọc trung vị cho đến dòng imshow (I). Sau đó, sử dụng lệnh sum (I (:)) để cộng tất cả các pixel tạo thành mạch máu và gán nó cho một biến riêng biệt. Đặt tên biến mới là NormalBloodVessels (i) và đặt nó bằng biến từ lệnh sum (I (:)). Điều này thêm dữ liệu vào ma trận.

Kết thúc vòng lặp và lặp lại nhưng đối với MRA của bộ não bị ảnh hưởng bởi Moyamoya. Đặt tên biến cuối cùng là MoyaMoyaBloodVessels (i) để không nhầm lẫn nó với MRA của não bình thường.

Bước 8: Chạy thử nghiệm T-test mẫu độc lập

Chạy thử nghiệm T-test Mẫu độc lập
Chạy thử nghiệm T-test Mẫu độc lập

Vì có hai mẫu độc lập và một dân số nhỏ, nên chạy thử nghiệm t-test các mẫu độc lập.

Tạo và đặt tên cho một chức năng chạy thử nghiệm t-test mẫu độc lập để xác định xem số lượng mạch máu trong MRA của não bình thường có tương đương đáng kể hay không với MRA của não bị ảnh hưởng bởi Moyamoya.

Hiển thị giả thuyết được đặt ra cho phép thử bằng cách sử dụng lệnh disp ('X'). Trên dòng đầu tiên, hiển thị, "Các giả thuyết cho hai phép thử t mẫu." Trên dòng thứ hai, hiển thị, "H0 = Số lượng mạch máu của não bình thường bằng số lượng mạch máu của não bị bệnh Moyamoya," để nêu giả thuyết không. Trên dòng thứ ba, hiển thị, "HA = Số lượng mạch máu của não bình thường không bằng số lượng mạch máu của não bị bệnh Moyamoya." để nêu giả thuyết thay thế.

Sử dụng khoảng tin cậy 95% và cỡ mẫu là 3, tính điểm t bằng cách sử dụng lệnh tinv ([0,025 0,975], 2) và gán cho biến t. Sử dụng lệnh var (NormalBloodVessels) và var (MoyaMoyaBloodVessels) và gán chúng cho các biến để tính toán phương sai của cả hai tập dữ liệu.

Kiểm tra xem các phương sai có gần bằng nhau hay không. Thực hiện việc này bằng cách tạo câu lệnh if / else với lệnh if, else. Đối với điều kiện trong câu lệnh if, hãy viết A / B == [0,25: 4], trong đó A là biến tính phương sai của mạch máu bình thường và B là biến tính phương sai của mạch máu Moyamoya. 0,25 và 4 đến từ một ước lượng chung để xác định xem các phương sai có bằng nhau hay không. Sau đó, chạy thử nghiệm t hai mẫu với [h, p] = ttest2 (A, B, 0,05, 'cả hai', 'bằng nhau'), với A và B là các biến giống như đã đề cập trước đó. Đối với câu lệnh else, hãy sử dụng [h, p] = ttest2 (A, B, 0,05, 'cả hai', 'không bằng nhau') để chạy thử nghiệm t hai mẫu trong trường hợp các phương sai không bằng nhau. Kết thúc câu lệnh if / else. Điều này sẽ tính toán p.

Tạo câu lệnh if / else sẽ hiển thị kết luận dựa trên giá trị của p. Điều kiện cho câu lệnh if sẽ là p> 0,05. Vì chúng tôi thường không bác bỏ giả thuyết rỗng khi giá trị của p lớn hơn 0,05, hãy sử dụng lệnh disp ('X') để hiển thị "Vì giá trị p lớn hơn 0,05 nên chúng tôi không thể bác bỏ giả thuyết rỗng" và " Do đó, chúng tôi không thể bác bỏ rằng số lượng mạch máu của não bình thường tương đương với não bị bệnh Moyamoya. " Trong câu lệnh else, vì chúng tôi thường bác bỏ giả thuyết rỗng khi giá trị của p nhỏ hơn 0,05, hãy sử dụng lệnh disp ('X') để hiển thị "Vì giá trị p nhỏ hơn 0,05 nên chúng tôi bác bỏ giả thuyết rỗng" và " Do đó, chúng tôi không thể bác bỏ rằng số lượng mạch máu của một bộ não bình thường không bằng một bộ não bị bệnh Moyamoya. " Kết thúc câu lệnh if / else.

Đề xuất: