Përmbajtje:
- Hapi 1: Hapi 1: Ngarkimi i imazhit
- Hapi 2: Hapi 2: Filtrimi i zhurmës dhe Histogrami
- Hapi 3: Hapi 3: Vendosja e Pragëve
- Hapi 4: Krijimi i GUI
- Hapi 5: Demo video
Video: Segmentimi i mushkërive MatLab: 5 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:10
Nga: Phuc Lam, Paul Yeung, Eric Reyes
Duke pranuar se gabimet në segmentimin e mushkërive do të prodhojnë informacion të rremë në lidhje me identifikimin e një zone të sëmundjes dhe mund të ndikojnë drejtpërdrejt në procesin e diagnostikimit. Teknikat moderne të ndihmës kompjuterike nuk arritën të japin rezultate të sakta kur sëmundjet e mushkërive kanë forma sfiduese. Këto forma jonormale mund të shkaktohen nga efuzionet pleurale, konsolidimet, etj. Duke aplikuar teknikën e segmentimit të mushkërive, në të cilën kufijtë e mushkërive janë të izoluar nga indi torakal përreth, aplikacioni ynë mund të identifikojë kufijtë me pragjet hyrëse të përdoruesit për të dhënë pamje plotësisht të personalizueshme të formave të mushkërive, Qëllimi i këtij projekti MatLab është krijimi i një aplikacioni për ndarjen e mushkërive miqësore për përdoruesit për të zbuluar kushtet patologjike të imazheve me rreze X të mushkërive. Qëllimi ynë është të krijojmë një mënyrë më efektive për të ilustruar dhe identifikuar mushkëritë anormale në mënyrë që t'u japim mjekëve dhe radiologëve një mënyrë më të besueshme për të diagnostikuar sëmundjet e mushkërive. Duke përdorur mjetin e projektuesit të aplikacioneve në MatLab, programi është krijuar për të punuar posaçërisht me skanime të rrezeve të gjoksit dhe tomografi kompjuterike (CT), por gjithashtu është testuar për të punuar me skanimet MRI.
Udhëzimet më poshtë përmbajnë teknikën tonë të filtrimit të zhurmës (filtri Wiener me kalim të ulët) si dhe pragun e imazhit (duke përdorur histogramin e intensitetit të imazhit të ngjyrës gri) dhe duke përdorur një gradient morfologjik (ndryshimi midis zgjerimit dhe erozionit të një imazhi) identifikoni një zonë me interes. Udhëzimi do të shpjegojë më pas se si i integrojmë të gjithë elementët në ndërfaqen grafike të përdoruesit (GUI).
Shënim:
1) Ky projekt është frymëzuar nga një punim kërkimor: "Segmentimi dhe analiza e imazhit të mushkërive jonormale në CT: Qasjet aktuale, sfidat dhe tendencat e ardhshme". Të cilat mund të gjenden këtu
2). Ne po përdorim imazhe me rreze X nga NIH: Qendra Klinike. Linkun mund ta gjeni këtu
3). Ndihma e projektuesit të aplikacioneve mund të gjendet këtu
4). Para se të ekzekutoni kodin: duhet të ndryshoni shtegun Dir (në rreshtin 34) në drejtorinë e skedarit tuaj dhe llojin e imazhit (rreshti 35) (ne po analizojmë *.png).
Hapi 1: Hapi 1: Ngarkimi i imazhit
Ky hap do t'ju tregojë foton origjinale në shkallë gri. Ndryshoni 'name_of_picture.png' në emrin e imazhit tuaj
qartë; clc; mbyll të gjitha;
%% Po ngarkon imazhe
raw_x_ray = 'name_of_picture.png';
I = i palexuar (papërpunuar_x_ray);
figura (101);
imshow (I);
kolore (gri);
titulli ('X-Ray' i shkallës së gri ');
Hapi 2: Hapi 2: Filtrimi i zhurmës dhe Histogrami
Në mënyrë që të gjejmë pragun për imazhin e shkallës gri, ne shikojmë histogramin për të parë nëse një mënyrë e veçantë funksionon. Lexoni më shumë këtu
I = wiener2 (I, [5 5]);
figura (102);
nënplot (2, 1, 1);
imshow (I);
nënplot (2, 1, 2);
imhist (I, 256);
Hapi 3: Hapi 3: Vendosja e Pragëve
Ky hap ju lejon të vendosni pragun sipas histogramit. morfologjikeGradient do të nxjerrë në pah rajonin me interes në të kuqe, dhe funksioni visboundaries mbulon imazhin e përshkruar dhe të filtruar të mushkërive me të kuqe.
Duke përdorur rajonprops, ne mund të përcaktojmë vargjet e ngurtësisë dhe t'i rendisim ato në zbritje. Tjetra unë binarizoj imazhin gri të sklave dhe aplikoj metodën e gradientit morfologjik dhe mLoren Shurasking për të nxjerrë në pah rajonin e interesit (ROI). Hapi tjetër është përmbysja e imazhit në mënyrë që ROI i mushkërive të jetë i bardhë në sfond të zi. Unë përdor funksionin showMaskAsOverlay për të shfaqur 2 maska. Shënim: kodi është frymëzuar nga Loren Shure, lidhja.
Lasly, unë krijoj një skicë të kuqe duke përdorur kufijtë bwbwb duke maskuar imazhin e filtrit dhe kufijtë.
a_thresh = I> = 172; % e caktoi këtë prag
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
props = regionprops (a_thresh, 'all');
sortedSolidity = renditje ([props. Solidity], 'zbritje');
SB = renditurSoliditeti (1);
nëse SB == 1 % SB pranon vetëm ngurtësinë == 1 filtro kockat
binaryImage = imbinarizoj (I); figura (103);
imshow (binareImage); kolore (gri);
SE = strel ('katror', 3);
morfologjikeGradient = nuk zbres (imdilate (binareImage, SE), imerode (binareImage, SE));
maskë = imbinarizoj (morfologjikeGradient, 0.03);
SE = strel ('katror', 2);
maskë = mbyll (maskë, SE);
maskë = mbush (maskë, 'vrima');
maskë = bwareafilt (maskë, 2); % e numrit të kontrollit të shfaqjes së zonës
notMask = ~ maskë;
maskë = maskë | bwpropfilt (joMaska, 'Zona', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0.5, maskë, 'r'); % ju duhet të shkarkoni aplikacionin/funksionin showMaskAsOverlay
BW2 = mbushje (binareImage, 'vrima');
imazh i ri = BW2;
imazh i ri (~ maskë) = 0; % përmbys sfondin dhe vrimat
B = kufijtë (imazhi i ri); % mund të pranojë vetëm 2 dimensione
figura (104);
imshow (imazhi i ri);
prit
visboundaries (B);
fund
Hapi 4: Krijimi i GUI
Tani, ne integrojmë kodin paraprak në një aplikacion MATLAB. Hapni Projektuesin e Aplikacioneve në MATLAB (E Re> Aplikacioni). Së pari, ne hartojmë ndërfaqen duke mbajtur-mbajtur dhe klikuar në tre akse në hapësirën qendrore të punës. Tjetra, ne klikojmë-mbajmë-tërhiqim dy butona, një fushë redaktimi (tekst), një fushë redaktimi (numerike), një rrëshqitës dhe një menu zbritëse. Dy akse do të shfaqin secilën pamje paraprake dhe analizojnë imazhin, dhe akset e treta do të shfaqin një histogram pikselësh për imazhin e parë të "zgjedhur". Kutia e fushës së redaktimit (tekstit) do të shfaqë rrugën e skedarit të figurës së zgjedhur dhe fusha e redaktimit (numerike) do të shfaqë zonën e pikselëve të zbuluar të mushkërive.
Tani kaloni nga pamja e projektimit në pamjen e kodit në Projektuesi i Aplikacioneve. Vendosni në kod kodin për pronat duke klikuar butonin e kuq "Properties" me një shenjë plus nga ai. Iniconi vetitë I, pragu dhe rajoneToExtract si në kodin e dhënë më poshtë. Tjetra, klikoni me të djathtën mbi një buton në anën e sipërme të djathtë të hapësirës së punës (Shfletuesi i Komponentit) dhe shkoni nga Thirrjet> Shko te … Kthimi i thirrjes. Shtoni kodin për "funksionin SelectImageButtonPushed (aplikacion, ngjarje)". Ky kod ju lejon të zgjidhni një imazh për ta analizuar nga kompjuteri juaj duke përdorur uigetfile. Pas zgjedhjes së një imazhi, një imazh paraprak do të shfaqet nën akset e shoqëruar me një histogram. Pastaj, kliko me të djathtën në butonin tjetër dhe përsërit të njëjtën procedurë për të krijuar një funksion të kthimit të thirrjes.
Shtoni kodin nën "funksionin AnalyzeImageButtonPushed (aplikacion, ngjarje)". Ky kod do të kryejë numërimin e pikselëve dhe zbulimin e pikave në imazhin e shikimit paraprakisht mbi butonin e imazhit të analizuar (cilindo që keni klikuar me të djathtën për këtë kod). Pas programimit të butonave, tani do të programojmë rrëshqitësin dhe menunë zbritëse. Klikoni me të djathtën në rrëshqitësin, krijoni një funksion të thirrjes dhe shtoni kodin nën "funksionin FilterThresholdSliderValueChanged (aplikacion, ngjarje)" deri në fund. Kjo lejon që rrëshqitësi të rregullojë pragun e intensitetit gri.
Krijoni një funksion thirrje për menunë zbritëse dhe shtoni kodin nën "funksionin AreastoExtractDropDownValueChanged (aplikacion, ngjarje)" për të lejuar menunë zbritëse të modifikojë numrin e pikave të shfaqura në akset e imazhit të analizuar. Tani, klikoni çdo entitet në Shfletuesin Komponent dhe ndryshoni vetitë e tyre sipas dëshirës tuaj, të tilla si ndryshimi i emrave të entiteteve, heqja e akseve dhe ndryshimi i shkallëzimit. Zvarritni dhe lëshoni njësitë e Shfletuesit të Komponentit në Pamjen e Dizajnit në një paraqitje funksionale dhe të kuptueshme. Tani keni një aplikacion në MATLAB që mund të analizojë imazhet e mushkërive për zonën e pikselëve!
vetitë (Qasja = private) I = ; % skedar imazhi
pragu = 257; %pragu për binarizimin e intensitetit gri
rajoneToExtract = 2;
fund
funksioni SelectImageButtonPushed (aplikacion, ngjarje)
clc; Dir = 'C: / Users / danie / Shkarkime / images_004 / images'; %define skedarin e pandryshueshëm "parashtesë"
[imageExt, shtegu] = uigetfile ('*. png'); %kap pjesën e ndryshueshme të emrit të figurës
emri i imazhit = [Dir filesep imageExt]; %të lidhura vargjet e pandryshueshme dhe të ndryshueshme
app. I = imread (Emri i imazhit); %lexoni imazhin
imshow (aplikacioni I., 'prindi', aplikacioni. UIAxes); %shfaq imazhin
app. FilePathEditField. Value = shteg; %shfaq rrugën e skedarit se nga ka ardhur imazhi origjinal
fund
funksioni AnalyzeImageButtonPushed (aplikacion, ngjarje)
origjinalImage = app. I;
originalImage = wiener2 (app. I, [5 5]); %filtër për heqjen e pikave
histogram (app. AxesHistogram, app. I, 256); %shfaqja e histogramit të figurës
a_thresh = Imazhi origjinal> = app.th pragu; % e caktoi këtë prag
labelImage = bwlabel (a_thresh);
props = regionprops (a_thresh, 'all');
sortedSolidity = renditje ([props. Solidity], 'zbritje');
SB = renditurSoliditeti (1);
nëse SB == 1 % SB pranon vetëm ngurtësinë == 1 filtro kockat
SE = strel ('katror', 3);
morfologjikeGradient = nuk zbres (imdilate (labelImage, SE), imerode (labelImage, SE));
maskë = imbinarizoj (morfologjikeGradient, 0.03);
SE = strel ('katror', 2);
maskë = mbyll (maskë, SE);
maskë = mbush (maskë, 'vrima');
maskë = bwareafilt (maskë, app.regionsToExtract);
% e numrit të kontrollit të shfaqjes së zonës
notMask = ~ maskë;
maskë = maskë | bwpropfilt (joMaska, 'Zona', [-Inf, 5000 - eps (5000)]);
BW2 = mbushje (labelImage, 'vrima');
imazh i ri = BW2;
imazh i ri (~ maskë) = 0;
B = kufijtë (imazhi i ri); % mund të pranojë vetëm 2 dimensione imshow (new_image, 'prind', app. UIAxes2);
mbaj (app. UIAxes2, 'on');
visboundaries (B);
vendosur (gca, 'YDir', 'anasjelltas');
lungArea = bwarea (imazh i ri);
app. PixelAreaEditField. Value = lungArea;
fund
fund
funksioni FilterThresholdSliderValueChanged (aplikacion, ngjarje)
app.threshold = app. FilterThresholdSlider. Value;
fund
funksioni AreastoExtractDropDownValueChanged (aplikacion, ngjarje) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
fund
fund
Recommended:
Zbulimi i lehtë i fytyrës MATLAB: 4 hapa
MATLAB Easy Face Detection: Qëllimi kryesor i këtij udhëzuesi është të tregojë se sa e lehtë do të jetë përpunimi i imazhit, Me ndihmën e MATLABFetimi dhe gjurmimi i fytyrës ka qenë një fushë kërkimore e rëndësishme dhe aktive, prandaj do të shpjegoj si mund të bëhet me zgjuarsi
Si të Kodoni dhe Publikoni Matlab 2016b në Word (Udhëzues për fillestarët): 4 hapa
Si të Kodoni dhe Publikoni Matlab 2016b në Word (Fillestar Guide): Matlab është një program gjuhësor me performancë të lartë që përdoret për të llogaritur rezultatet teknike. Ka aftësinë për të integruar pamjet, llogaritjet dhe programimin në një mënyrë miqësore për përdoruesit. Me këtë program, përdoruesi mund të publikojë probleme dhe zgjidhje
Kontrolli i Raspberry Pi duke përdorur Matlab: 5 hapa
Kontrolli i Raspberry Pi duke përdorur Matlab: Hej, ky tutorial ka të bëjë me kontrollin e mjedrës pi pa kokë duke përdorur matlab. Ju mund të keni nevojë të instaloni matlab në versionin e fundit për mbështetje në bordin më të ri të mjedrës pi
Kontrolluesi Robotik ROS me bazë Matlab: 9 hapa
Kontrolluesi Robotik ROS me bazë Matlab: Që kur kam qenë fëmijë, kam ëndërruar gjithmonë të jem Iron Man dhe ende e bëj këtë. Iron Man është një nga ata personazhe që është realisht i mundshëm dhe thjesht them që aspiroj të bëhem Iron Man një ditë edhe nëse njerëzit qeshin me mua ose thonë se është e pamundur
Përmirësimet e Programimit të Trenit në MATLAB: 6 hapa
Përmirësimet e Programimit të Trenit në MATLAB: Objektivi: Qëllimi i këtij sistemi të programuar është të shikojë në një shkallë të vogël Arduino dhe të aplikojë kodimin në një shkallë më të madhe për të rritur potencialisht karakteristika të caktuara të sigurisë të sistemeve të Hekurudhave Amtrak. Për ta bërë këtë, ne kemi shtuar një sen lagështie të tokës