Πίνακας περιεχομένων:
- Βήμα 1: Βήμα 1: Φόρτωση εικόνας
- Βήμα 2: Βήμα 2: Φιλτράρισμα θορύβου και ιστόγραμμα
- Βήμα 3: Βήμα 3: Ρύθμιση ορίων
- Βήμα 4: Δημιουργία GUI
- Βήμα 5: Επίδειξη βίντεο
Βίντεο: Κατάτμηση πνευμόνων MatLab: 5 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:32
Από: Phuc Lam, Paul Yeung, Eric Reyes
Αναγνωρίζοντας ότι τα λάθη στην κατάτμηση των πνευμόνων θα παράγουν ψευδείς πληροφορίες σχετικά με τον εντοπισμό μιας περιοχής ασθένειας και μπορούν να επηρεάσουν άμεσα τη διαδικασία διάγνωσης. Οι σύγχρονες τεχνικές βοήθειας υπολογιστών απέτυχαν να δώσουν ακριβή αποτελέσματα όταν οι πνευμονικές παθήσεις έχουν προκλητικά σχήματα. Αυτά τα ανώμαλα σχήματα μπορεί να προκληθούν από υπεζωκοτικές συλλογές, ενοποιήσεις κ.λπ. Εφαρμόζοντας την τεχνική κατάτμησης των πνευμόνων, στην οποία τα όρια του πνεύμονα απομονώνονται από τον περιβάλλοντα θωρακικό ιστό, η εφαρμογή μας μπορεί να προσδιορίσει τα όρια με τα κατώφλια εισόδου του χρήστη για να δώσει πλήρως προσαρμόσιμες προβολές των σχημάτων των πνευμόνων, Ο σκοπός αυτού του έργου MatLab είναι να δημιουργήσει μια φιλική προς τον χρήστη διαδραστική εφαρμογή τμηματοποίησης των πνευμόνων για τον εντοπισμό παθολογικών καταστάσεων των ακτίνων Χ των πνευμόνων. Στόχος μας είναι να δημιουργήσουμε έναν πιο αποτελεσματικό τρόπο για την απεικόνιση και τον εντοπισμό των ανώμαλων πνευμόνων, προκειμένου να δώσουμε στους γιατρούς και τους ακτινολόγους έναν πιο αξιόπιστο τρόπο διάγνωσης των πνευμονικών παθήσεων. Χρησιμοποιώντας το εργαλείο σχεδιασμού εφαρμογών στο MatLab, το πρόγραμμα έχει σχεδιαστεί για να λειτουργεί ειδικά με ακτινογραφίες θώρακος και αξονική τομογραφία (CT), αλλά έχει επίσης δοκιμαστεί για εργασία με μαγνητικές τομογραφίες.
Οι παρακάτω οδηγίες περιέχουν την τεχνική φιλτραρίσματος θορύβου (φίλτρο Wiener χαμηλής διέλευσης) καθώς και το κατώφλι εικόνας (χρησιμοποιώντας ιστόγραμμα έντασης της εικόνας κλίμακας του γκρι) και χρησιμοποιώντας μορφολογική κλίση (η διαφορά μεταξύ της διαστολής και της διάβρωσης μιας εικόνας) προσδιορίζουν μια περιοχή ενδιαφέροντος. Στη συνέχεια, η οδηγία θα εξηγήσει πώς ενσωματώνουμε όλα τα στοιχεία στη γραφική διεπαφή χρήστη (GUI).
Σημείωση:
1). Αυτό το έργο είναι εμπνευσμένο από μια ερευνητική εργασία: "Segmentation and Image Analysis of Abnormal Lungs at CT: Current Approaches, Challenges, and Future Trends". Το οποίο μπορείτε να βρείτε εδώ
2). Χρησιμοποιούμε εικόνες ακτίνων Χ από το NIH: Clinical Center. Ο σύνδεσμος μπορεί να βρεθεί εδώ
3). Βοήθεια για σχεδιαστές εφαρμογών μπορείτε να βρείτε εδώ
4). Πριν από την εκτέλεση του κώδικα: πρέπει να αλλάξετε τη διαδρομή Dir (στη γραμμή 34) στον κατάλογο αρχείων και τον τύπο της εικόνας (γραμμή 35) (αναλύουμε *.png).
Βήμα 1: Βήμα 1: Φόρτωση εικόνας
Αυτό το βήμα θα σας δείξει την αρχική εικόνα σε γκρι κλίμακα. Αλλάξτε το 'name_of_picture.png' στο όνομα της εικόνας σας
Σαφή; clc? κλείσ'τα όλα;
%% Φόρτωση εικόνων
raw_x_ray = 'name_of_picture.png';
I = imread (raw_x_ray);
σχήμα (101);
imshow (I)?
χρωματικός χάρτης (γκρι)?
τίτλος («Ακτινογραφία κλίμακας του γκρι»)
Βήμα 2: Βήμα 2: Φιλτράρισμα θορύβου και ιστόγραμμα
Προκειμένου να βρούμε το κατώφλι για την εικόνα της γκρίζας κλίμακας, κοιτάμε το ιστόγραμμα για να δούμε αν υπάρχει διακριτός τρόπος λειτουργίας. Διαβάστε περισσότερα εδώ
I = wiener2 (I, [5 5]);
σχήμα (102);
δευτερεύον οικόπεδο (2, 1, 1).
imshow (I)?
δευτερεύον οικόπεδο (2, 1, 2).
imhist (I, 256);
Βήμα 3: Βήμα 3: Ρύθμιση ορίων
Αυτό το βήμα σάς επιτρέπει να ορίσετε το κατώφλι σύμφωνα με το ιστόγραμμα. morphologicalGradient θα επισημάνει την περιοχή που μας ενδιαφέρει με κόκκινο χρώμα και η συνάρτηση visboundaries επικαλύπτει την περιγραμμένη και φιλτραρισμένη εικόνα του πνεύμονα με κόκκινο χρώμα.
Χρησιμοποιώντας τα τοπικά εργαλεία, μπορούμε να προσδιορίσουμε τις συστοιχίες στερεότητας και να τις ταξινομήσουμε σε φθίνουσα σειρά. Στη συνέχεια, υπογραμμίζω τη γκρι εικόνα του sclae και εφαρμόζω τη μέθοδο μορφολογικής κλίσης και το mLoren Shurasking για να τονίσω την περιοχή ενδιαφέροντος (ROI). Το επόμενο βήμα είναι η αντιστροφή της εικόνας, έτσι ώστε η απόδοση επένδυσης των πνευμόνων να είναι λευκή σε μαύρο φόντο. Χρησιμοποιώ τη λειτουργία showMaskAsOverlay για να εμφανίσω 2 μάσκες. Σημείωση: ο κώδικας είναι εμπνευσμένος από τον σύνδεσμο Loren Shure.
Lasly, δημιουργώ κόκκινο περίγραμμα χρησιμοποιώντας τα bwbwbounds και καλύπτοντας την εικόνα φίλτρου και τα όρια.
a_thresh = I> = 172; % ορίστε αυτό το όριο
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
props = regionprops (a_thresh, 'all');
sortedSolidity = sort ([props. Solidity], 'κατέβασμα');
SB = sortedSolidity (1);
εάν SB == 1 % SB δέχεται μόνο σταθερότητα == 1 φιλτράρετε τα οστά
binaryImage = απενεργοποίηση (I); σχήμα (103)?
imshow (binaryImage); χρωματικός χάρτης (γκρι)?
SE = strel ("τετράγωνο", 3);
morphologicalGradient = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
μάσκα = απενεργοποίηση (morphologicalGradient, 0,03);
SE = strel ("τετράγωνο", 2);
μάσκα = κλείνω (μάσκα, ΝΑ)
μάσκα = imfill (μάσκα, «τρύπες»);
μάσκα = bwareafilt (μάσκα, 2); % ελέγχου αριθμός εμφάνισης περιοχής
notMask = ~ μάσκα;
μάσκα = μάσκα | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0,5, μάσκα, 'r'); % πρέπει να κατεβάσετε την εφαρμογή/λειτουργία showMaskAsOverlay
BW2 = imfill (binaryImage, 'hole');
new_image = BW2;
new_image (~ μάσκα) = 0; % αντιστροφή φόντου και οπών
B = bwboundsaries (new_image); % μπορεί να δεχτεί μόνο 2 διαστάσεις
σχήμα (104);
απεικόνιση (new_image);
περίμενε
visboundaries (Β);
τέλος
Βήμα 4: Δημιουργία GUI
Τώρα, ενσωματώνουμε τον προηγούμενο κώδικα σε μια εφαρμογή MATLAB. Ανοίξτε το App Designer στο MATLAB (Νέο> App). Αρχικά, σχεδιάζουμε τη διεπαφή κάνοντας κλικ-κράτημα-και σύροντας σε τρεις άξονες στον κεντρικό χώρο εργασίας. Στη συνέχεια, κάνουμε κλικ-κράτημα-σύρετε δύο κουμπιά, ένα πεδίο επεξεργασίας (κείμενο), ένα πεδίο επεξεργασίας (αριθμητικό), ένα ρυθμιστικό και ένα αναπτυσσόμενο μενού. Δύο άξονες θα εμφανίζουν ο καθένας την προεπισκόπηση και την ανάλυση της εικόνας και ο τρίτος άξονας θα εμφανίζει ένα ιστόγραμμα εικονοστοιχείων για την προεπιλεγμένη "επιλεγμένη" εικόνα. Το πλαίσιο πεδίου επεξεργασίας (κείμενο) θα εμφανίσει τη διαδρομή αρχείου της επιλεγμένης εικόνας και το πεδίο επεξεργασίας (αριθμητικό) θα εμφανίσει την εντοπισμένη περιοχή εικονοστοιχείων των πνευμόνων.
Τώρα μεταβείτε από την προβολή σχεδίασης σε προβολή κώδικα στο App Designer. Εισαγάγετε στον κωδικό τον κωδικό των ιδιοτήτων κάνοντας κλικ στο κόκκινο κουμπί "Ιδιότητες" με ένα σύμβολο συν από αυτό. Αρχικοποιήστε τις ιδιότητες I, κατώτατο όριο και περιοχέςToExtract όπως στον παρακάτω κώδικα. Στη συνέχεια, κάντε δεξί κλικ σε ένα κουμπί στην επάνω δεξιά πλευρά του χώρου εργασίας (το Πρόγραμμα περιήγησης στοιχείων) και μεταβείτε από τις Επιστροφές κλήσεων> Μετάβαση στην… επανάκληση. Προσθέστε τον κωδικό για "λειτουργία SelectImageButtonPushed (εφαρμογή, συμβάν)". Αυτός ο κώδικας σάς επιτρέπει να επιλέξετε μια εικόνα για ανάλυση από τον υπολογιστή σας χρησιμοποιώντας το uigetfile. Μετά την επιλογή μιας εικόνας, μια εικόνα προεπισκόπησης θα εμφανιστεί κάτω από τους άξονες συνοδευόμενη από ένα ιστόγραμμα. Στη συνέχεια, κάντε δεξί κλικ στο άλλο κουμπί και επαναλάβετε την ίδια διαδικασία για να δημιουργήσετε μια λειτουργία επανάκλησης.
Προσθέστε τον κώδικα κάτω από τη "λειτουργία AnalyzeImageButtonPushed (εφαρμογή, συμβάν)". Αυτός ο κώδικας θα εκτελέσει την καταμέτρηση των εικονοστοιχείων και την ανίχνευση σταγονιδίων στην εικόνα προεπισκόπησης στο κουμπί ανάλυσης εικόνας (όποιο έχετε κάνει δεξί κλικ για αυτόν τον κώδικα). Αφού προγραμματίσουμε τα κουμπιά, θα προγραμματίσουμε τώρα το ρυθμιστικό και το αναπτυσσόμενο μενού. Κάντε δεξί κλικ στο ρυθμιστικό, δημιουργήστε μια λειτουργία επανάκλησης και προσθέστε τον κώδικα κάτω από τη "λειτουργία FilterThresholdSliderValueChanged (εφαρμογή, συμβάν)" μέχρι το τέλος. Αυτό επιτρέπει στο ρυθμιστικό να ρυθμίζει το κατώφλι γκρι έντασης.
Δημιουργήστε μια λειτουργία επανάκλησης για το αναπτυσσόμενο μενού και προσθέστε τον κώδικα κάτω από τη "λειτουργία AreastoExtractDropDownValueChanged (εφαρμογή, συμβάν)" για να επιτρέψετε στο αναπτυσσόμενο μενού να τροποποιήσει τον αριθμό των σταυρών που εμφανίζονται στους αναλυμένους άξονες εικόνας. Τώρα, κάντε κλικ σε κάθε οντότητα στο πρόγραμμα περιήγησης Component και αλλάξτε τις ιδιότητες της αρεσκείας σας, όπως αλλαγή ονομάτων των οντοτήτων, κατάργηση αξόνων και αλλαγή κλίμακας. Μεταφέρετε και αποθέστε τις οντότητες του προγράμματος περιήγησης στοιχείων στο Design View σε μια λειτουργική και κατανοητή διάταξη. Τώρα έχετε μια εφαρμογή στο MATLAB που μπορεί να αναλύσει εικόνες πνευμόνων για την περιοχή pixel!
ιδιότητες (Πρόσβαση = ιδιωτικό) I = ; % αρχείο εικόνας
κατώφλι = 257; %κατώτατο όριο για δυαδικότητα γκρίζας έντασης
περιοχέςToExtract = 2;
τέλος
λειτουργία SelectImageButtonPushed (εφαρμογή, συμβάν)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %define invariate file "prefix"
[imageExt, path] = uigetfile ('*. png'); %πιάστε το μεταβλητό μέρος του ονόματος της εικόνας
imageName = [Dir filesep imageExt]; %concatenate αμετάβλητες και μεταβλητές χορδές
app. I = imread (imageName); %διαβάζει την εικόνα
imshow (app. I, «γονέας», app. UIAxes) %εμφανίζει την εικόνα
app. FilePathEditField. Value = διαδρομή; %εμφάνιση διαδρομής αρχείου από πού προήλθε η αρχική εικόνα
τέλος
λειτουργία AnalyzeImageButtonPushed (εφαρμογή, συμβάν)
originalImage = app. I;
originalImage = wiener2 (app. I, [5 5]); φίλτρο %αφαίρεσης κουκκίδων
ιστόγραμμα (app. AxesHistogram, app. I, 256). %εμφάνιση ιστόγραμμα εικόνας
a_thresh = originalImage> = app.threshold; % ορίστε αυτό το όριο
labelImage = bwlabel (a_thresh);
props = regionprops (a_thresh, 'all');
sortedSolidity = sort ([props. Solidity], 'κατέβασμα');
SB = sortedSolidity (1);
εάν SB == 1 % SB δέχεται μόνο σταθερότητα == 1 φιλτράρετε τα οστά
SE = strel ("τετράγωνο", 3);
morphologicalGradient = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
μάσκα = απενεργοποίηση (morphologicalGradient, 0,03);
SE = strel ("τετράγωνο", 2);
μάσκα = κλείνω (μάσκα, ΝΑ);
μάσκα = imfill (μάσκα, «τρύπες»);
μάσκα = bwareafilt (μάσκα, app.regionsToExtract);
% ελέγχου αριθμός εμφάνισης περιοχής
notMask = ~ μάσκα;
μάσκα = μάσκα | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'hole');
new_image = BW2;
new_image (~ μάσκα) = 0;
B = bwboundsaries (new_image); % μπορεί να αποδεχτεί μόνο 2 διαστάσεις imshow (new_image, "γονέας", app. UIAxes2);
κρατήστε πατημένο (app. UIAxes2, 'on');
visboundaries (Β);
σύνολο (gca, 'YDir', 'reverse');
lungArea = bwarea (new_image);
app. PixelAreaEditField. Value = lungArea;
τέλος
τέλος
λειτουργία FilterThresholdSliderValueChanged (εφαρμογή, συμβάν)
app.threshold = app. FilterThresholdSlider. Value;
τέλος
λειτουργία AreastoExtractDropDownValueChanged (εφαρμογή, συμβάν) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
τέλος
τέλος
Συνιστάται:
MATLAB Εύκολη ανίχνευση προσώπου: 4 βήματα
MATLAB Easy Face Detection: Ο κύριος στόχος αυτών των οδηγιών είναι να δείξει πόσο εύκολη θα είναι η επεξεργασία της εικόνας. Με τη βοήθεια του MATLAB Η ανίχνευση και η παρακολούθηση προσώπου ήταν ένα σημαντικό και ενεργό πεδίο έρευνας, γι 'αυτό θα εξηγήσω πώς μπορεί να γίνει με
Πώς να κωδικοποιήσετε και να δημοσιεύσετε το Matlab 2016b σε Word (Οδηγός για αρχάριους): 4 βήματα
Πώς να κωδικοποιήσετε και να δημοσιεύσετε το Matlab 2016b σε Word (Οδηγός για αρχάριους): Το Matlab είναι ένα γλωσσικό πρόγραμμα υψηλής απόδοσης που χρησιμοποιείται για τον υπολογισμό τεχνικών αποτελεσμάτων. Έχει τη δυνατότητα να ενσωματώνει οπτικά, υπολογισμούς και προγραμματισμό με τρόπο φιλικό προς τον χρήστη. Με αυτό το πρόγραμμα, ο χρήστης μπορεί να δημοσιεύσει προβλήματα και λύσεις
Έλεγχος του Raspberry Pi χρησιμοποιώντας το Matlab: 5 βήματα
Έλεγχος του Raspberry Pi χρησιμοποιώντας το Matlab: Γεια, αυτό το σεμινάριο αφορά τον έλεγχο του ακέφαλου raspberry pi σας χρησιμοποιώντας το matlab. Mayσως χρειαστεί να εγκαταστήσετε το matlab στην πιο πρόσφατη έκδοση για υποστήριξη στον νεότερο πίνακα raspberry pi
Ρομποτικός ελεγκτής ROS με βάση Matlab: 9 βήματα
Ρομποτικός ελεγκτής ROS με βάση Matlab: Από τότε που ήμουν παιδί, πάντα ονειρευόμουν να γίνω Iron Man και το κάνω ακόμα. Ο Iron Man είναι ένας από αυτούς τους χαρακτήρες που είναι ρεαλιστικά εφικτός και με απλά λόγια φιλοδοξώ να γίνω Iron Man κάποια μέρα ακόμα κι αν οι άνθρωποι με γελούν ή λένε ότι είναι αδύνατο
Βελτιώσεις προγραμματισμού τρένων στο MATLAB: 6 βήματα
Βελτιώσεις προγραμματισμού τρένων στο MATLAB: Στόχος: Ο στόχος αυτού του προγραμματισμένου συστήματος είναι να εξετάσει το Arduino μικρής κλίμακας και να εφαρμόσει την κωδικοποίηση σε μεγαλύτερη κλίμακα για να ενισχύσει ενδεχομένως ορισμένα χαρακτηριστικά ασφαλείας των συστημάτων Amtrak Railroad. Για να το κάνουμε αυτό, προσθέσαμε ένα αισθητήριο υγρασίας εδάφους