ዝርዝር ሁኔታ:

የማትላብ ሳንባ ክፍልፋዮች -5 ደረጃዎች
የማትላብ ሳንባ ክፍልፋዮች -5 ደረጃዎች

ቪዲዮ: የማትላብ ሳንባ ክፍልፋዮች -5 ደረጃዎች

ቪዲዮ: የማትላብ ሳንባ ክፍልፋዮች -5 ደረጃዎች
ቪዲዮ: haw to install math lab software የማትላብ ሶፍትዌር አጫጫን በቀላሉ 2024, ሰኔ
Anonim
የማትላብ ሳንባ ክፍልፍል
የማትላብ ሳንባ ክፍልፍል

በ: ፉክ ላም ፣ ፖል ዬንግ ፣ ኤሪክ ሬይስ

በሳንባ ክፍፍል ውስጥ ያሉ ስህተቶች የበሽታ አካባቢን መለየት አስመልክቶ የሐሰት መረጃን እንደሚያመነጩ እና የምርመራውን ሂደት በቀጥታ ሊጎዳ ይችላል። የሳንባ በሽታዎች ፈታኝ ቅርጾች ሲኖሯቸው ዘመናዊ የኮምፒተር-እገዛ ቴክኒኮች ትክክለኛ ውጤቶችን መስጠት አልቻሉም። እነዚህ ያልተለመዱ ቅርጾች በ pleural effusions ፣ በማጠናከሮች ፣ ወዘተ ሊከሰቱ ይችላሉ ፣ ይህም የሳንባው ወሰን ከአከባቢው የደረት ሕብረ ሕዋስ ተለይቶ በሚገኝበት የሳንባ ክፍፍል ዘዴን በመተግበር ፣ የእኛ መተግበሪያ ሙሉ በሙሉ ሊበጁ የሚችሉ ዕይታዎችን ለመስጠት በተጠቃሚው የግብዓት ገደቦች ድንበሮችን መለየት ይችላል። ከሳንባዎች ቅርጾች ፣

የዚህ የ MatLab ፕሮጀክት ዓላማ የሳንባዎቹን የኤክስሬ ምስሎች በሽታ አምጪ ሁኔታዎችን ለማወቅ ለተጠቃሚ ምቹ የሆነ መስተጋብራዊ የሳንባ ክፍልፍል መተግበሪያን መፍጠር ነው። የሳንባ በሽታዎችን ለዶክተሮች እና ለሬዲዮሎጂስቶች ይበልጥ አስተማማኝ መንገድ ለመስጠት ያልተለመዱ ሳንባዎችን ለመግለፅ እና ለመለየት የበለጠ ውጤታማ መንገድ መፍጠር ዓላማችን ነው። በ MatLab ውስጥ የመተግበሪያ ዲዛይነር መሣሪያን በመጠቀም ፣ ፕሮግራሙ በተለይ በደረት ኤክስሬይ እና በኮምፒዩተር ቲሞግራፊ (ሲቲ) ቅኝቶች ለመስራት የተነደፈ ነው ፣ ግን ከኤምአርአይ ስካን ጋር ለመስራትም ተፈትኗል።

ከዚህ በታች ያሉት መመሪያዎች የጩኸት ማጣሪያ ቴክኒዎቻችንን (ዝቅተኛ-ማለፊያ Wiener ማጣሪያ) እንዲሁም የምስል ደፍ (የግራዝ ስኬል ምስልን የጥንካሬ ሂስቶግራምን በመጠቀም) እና ሞሮሎጂያዊ ቅልጥፍናን (በምስል መስፋፋት እና በምስል መሸርሸር መካከል ያለው ልዩነት) ወደ የፍላጎት ክልል መለየት። ከዚያ መመሪያው ሁሉንም አካላት ወደ ግራፊክ የተጠቃሚ በይነገጽ (GUI) እንዴት እንደምናዋህድ ያብራራል።

ማስታወሻ:

1). ይህ ፕሮጀክት በጥናታዊ ጽሑፍ ተነሳሽነት ነው - “በሳንባ ውስጥ ያልተለመዱ የሳንባዎች ክፍልፋዮች እና የምስል ትንተና - የአሁኑ አቀራረቦች ፣ ተግዳሮቶች እና የወደፊት አዝማሚያዎች”። የትኛው እዚህ ሊገኝ ይችላል

2). እኛ ከኤንኤች ክሊኒክ ማዕከል የራጅ ምስሎችን እየተጠቀምን ነው። አገናኝ እዚህ ይገኛል

3). የመተግበሪያ ዲዛይነር እገዛ እዚህ ይገኛል

4). ኮዱን ከማካሄድዎ በፊት የ Dir ዱካውን (በመስመር 34 ውስጥ) ወደ ፋይል ማውጫዎ እና የምስል ዓይነት (መስመር 35) መለወጥ ያስፈልግዎታል (እኛ *-p.webp

ደረጃ 1: ደረጃ 1: ምስል በመጫን ላይ

ደረጃ 1: ምስል በመጫን ላይ
ደረጃ 1: ምስል በመጫን ላይ

ይህ ደረጃ የመጀመሪያውን ስዕል በግራጫ ሚዛን ያሳየዎታል። 'ስም_እስክ.ፒንግ' ን ወደ ምስልዎ ስም ይለውጡ

ግልጽ; clc; ሁሉንም ይዝጉ;

%% ምስሎችን በመጫን ላይ

raw_x_ray = 'የስም_ስዕል.ፒንግ';

እኔ = አነባለሁ (ጥሬ_x_ray);

ምስል (101);

imshow (እኔ);

የቀለም ካርታ (ግራጫ);

ርዕስ ('ግራጫማ ኤክስሬይ');

ደረጃ 2 - ደረጃ 2 - የጩኸት ማጣሪያ እና ሂስቶግራም

ደረጃ 2 - የጩኸት ማጣሪያ እና ሂስቶግራም
ደረጃ 2 - የጩኸት ማጣሪያ እና ሂስቶግራም

ለግራጫው ሚዛን ምስል ደፍ ለማግኘት ፣ የተለየ ሁነታዎች ካሉ ለማየት ሂስቶግራሙን እንመለከታለን። እዚህ የበለጠ ያንብቡ

እኔ = wiener2 (እኔ ፣ [5 5]);

ምስል (102);

ንዑስ ክፍል (2 ፣ 1 ፣ 1);

imshow (እኔ);

ንዑስ ክፍል (2 ፣ 1 ፣ 2);

ኢምሂስት (I ፣ 256);

ደረጃ 3 - ደረጃ 3 - ገደቦችን ማዘጋጀት

ደረጃ 3 - ገደቦችን ማዘጋጀት
ደረጃ 3 - ገደቦችን ማዘጋጀት
ደረጃ 3 - ገደቦችን ማዘጋጀት
ደረጃ 3 - ገደቦችን ማዘጋጀት

ይህ ደረጃ በሂስቶግራም መሠረት ደፍ እንዲያዘጋጁ ያስችልዎታል። ሞሮሎጂካል ግራድየንት በቀይ ውስጥ ያለውን የፍላጎት ክልል ያደምቃል ፣ እና የተግባር visboundaries የተዘረጋውን እና የተጣራውን የሳንባ ምስል በቀይ ይሸፍናል።

የክልል መገልገያዎችን በመጠቀም ፣ የጥንካሬን ድርድሮች በትክክል መገምገም እና ወደታች ወደታች መደርደር እንችላለን። በመቀጠልም ግራጫውን ስላይድ ምስል ሁለትዮሽ አደርጋለሁ እና የፍላጎት ክልልን (ሮአይ) ለማጉላት ሞርፎሎጂያዊ የግራዲየሽን ዘዴን እና mLoren Shurasking ን ተግባራዊ አደርጋለሁ። ቀጣዩ ደረጃ ምስሉን መገልበጥ ነው ስለዚህ የሳንባው ROI በጥቁር ዳራ ውስጥ ነጭ ነው። 2 ጭንብል ለማሳየት የተግባር ማሳያ ‹MaskAsOverlay› ን እጠቀማለሁ። ማሳሰቢያ -ኮዱ ከሎረን ሹሬ ፣ አገናኝ የተነሳ ነው።

ላሊሊ ፣ እኔ bwbwboundaries ን በመጠቀም እና የማጣሪያውን ምስል እና ድንበሮችን በመሸፈን ቀይ ንድፍ እፈጥራለሁ።

a_thresh = እኔ> = 172; % ይህንን ገደብ ያዘጋጁ

[labelImage ፣ numberOfBlobs] = bwlabel (a_thresh);

መደገፊያዎች = የክልል መገልገያዎች (a_thresh ፣ ‘all’);

sortedSolidity = sort ([props. Solidity], 'ወደታች');

SB = የተደረደረ ጥንካሬ (1);

SB == 1 % SB ጥንካሬን ብቻ የሚቀበል ከሆነ == 1 አጥንቶችን ያጣሩ

binaryImage = አለመመደብ (እኔ); ምስል (103);

imshow (የሁለትዮሽ ምስል); የቀለም ካርታ (ግራጫ);

SE = strel ('ካሬ' ፣ 3);

morphologicalGradient = imsubtract (imdilate (binaryImage, SE) ፣ imerode (binaryImage ፣ SE));

ጭምብል = አለመመጣጠን (ሞርፎሎጂካል ግራድየንት ፣ 0.03);

SE = strel ('ካሬ' ፣ 2);

ጭምብል = መዘጋት (ጭምብል ፣ SE);

ጭምብል = መሙላት (ጭምብል ፣ ‹ቀዳዳዎች›);

ጭምብል = ብሬፋፋይል (ጭምብል ፣ 2); የአከባቢ ማሳያ % ቁጥጥር ቁጥር

notMask = ~ ጭንብል;

ጭንብል = ጭንብል | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);

ShowMaskAsOverlay (0.5 ፣ ጭንብል ፣ 'r'); % መተግበሪያ/ተግባር showMaskAsOverlay ን ማውረድ አለብዎት

BW2 = imfill (binaryImage ፣ 'ቀዳዳዎች');

new_image = BW2;

new_image (~ ጭንብል) = 0; % የተገላቢጦሽ ዳራ እና ቀዳዳዎች

ቢ = ድንበሮች (አዲስ_ምስል); % 2 ልኬቶችን ብቻ ሊቀበል ይችላል

ምስል (104);

imshow (አዲስ_ምስል);

ቆይ

visboundaries (ለ);

አበቃ

ደረጃ 4 GUI መፍጠር

አሁን ፣ ቀዳሚውን ኮድ ወደ MATLAB መተግበሪያ እናዋሃዳለን። በ MATLAB (አዲስ> መተግበሪያ) ውስጥ የመተግበሪያ ዲዛይነሩን ይክፈቱ። በመጀመሪያ ፣ ጠቅታ-በመያዝ እና በሦስት መጥረቢያዎች ወደ መሃል የሥራ ቦታ በመጎተት በይነገጹን እንቀርፃለን። በመቀጠል ፣ ሁለት አዝራሮችን ፣ አንድ የአርትዕ መስክ (ጽሑፍ) ፣ አንድ የአርትዕ መስክ (ቁጥራዊ) ፣ አንድ ተንሸራታች እና አንድ ተቆልቋይ ምናሌን ጠቅ አድርገን እንይዛለን። ሁለት መጥረቢያዎች እያንዳንዳቸው ቅድመ -እይታውን ያሳዩ እና ምስሉን ይተነትኑታል ፣ እና ሦስተኛው መጥረቢያ ለቅድመ -እይታ “የተመረጠ” ምስል የፒክሰሎች ሂስቶግራም ያሳያል። የአርትዖት መስክ (ጽሑፍ) ሳጥኑ የተመረጠውን ምስል የፋይል ዱካ ያሳያል ፣ እና የአርትዕ መስክ (ቁጥራዊ) የተገኘውን የሳንባዎች የፒክሰል አካባቢ ያሳያል።

አሁን በመተግበሪያ ዲዛይነር ውስጥ ከዲዛይን እይታ ወደ ኮድ እይታ ይቀይሩ። በእሱ የመደመር ምልክት ያለው ቀይ “ባህሪዎች” ቁልፍን ጠቅ በማድረግ ለንብረቶች ኮዱን ያስገቡ። ከዚህ በታች በተገለጸው ኮድ ውስጥ እንደሚታየው I ፣ ደፍ እና ክልሎችToExtract ን ባህሪያትን ያስጀምሩ። በመቀጠል ፣ በስራ ቦታው የላይኛው ክፍል (ክፍል አሳሽ) ላይ አንድ አዝራር በቀኝ ጠቅ ያድርጉ እና ከጥሪ ማስታወሻዎች> ወደ… ጥሪ ጥሪ ይሂዱ። ለ ‹ተግባር SelectImageButtonPushed (መተግበሪያ ፣ ክስተት)› ኮዱን ያክሉ። ይህ ኮድ uigetfile ን በመጠቀም ከኮምፒዩተርዎ ለመተንተን ምስል እንዲመርጡ ያስችልዎታል። አንድ ምስል ከመረጡ በኋላ የቅድመ እይታ ምስል በሂስቶግራም ታጅቦ በመጥረቢያዎቹ ስር ይታያል። ከዚያ ፣ ሌላውን ቁልፍ በቀኝ ጠቅ ያድርጉ እና የመልሶ መደወልን ተግባር ለመፍጠር ተመሳሳይ አሰራርን ይድገሙ።

ከ “ተግባር AnalyzeImageButtonPushed (መተግበሪያ ፣ ክስተት)” ስር ባለው ኮድ ውስጥ ያክሉ። በመተንተን የምስል አዝራር ላይ (ለዚህ ኮድ በቀኝ ጠቅ ካደረጉት) ይህ ኮድ በቅድመ-እይታ ምስል ላይ የፒክሰል ቆጠራን እና የብሎግ ግኝትን ያከናውናል። አዝራሮቹን ካዘጋጁ በኋላ ፣ አሁን ተንሸራታቹን እና ተቆልቋይ ምናሌውን እናዘጋጃለን። ተንሸራታቹን በቀኝ ጠቅ ያድርጉ ፣ የመደወያ ተግባርን ይፍጠሩ እና ከ “ተግባር FilterThresholdSliderValueChanged (መተግበሪያ ፣ ክስተት)” በታች ባለው ኮድ ውስጥ ያክሉ። ይህ ተንሸራታቹ ግራጫ-ጥንካሬን ደፍ እንዲያስተካክል ያስችለዋል።

ለተቆልቋይ ምናሌው የመደወያ ተግባርን ይፍጠሩ እና ተቆልቋይ ምናሌው በተተነተኑት የምስል መጥረቢያዎች ላይ የሚታየውን የብሎብስ ብዛት ለመቀየር ከ “ተግባር AreastoExtractDropDownValueChanged (መተግበሪያ ፣ ክስተት)” በታች ባለው ኮድ ውስጥ ያክሉ። አሁን በክፍል አሳሽ ውስጥ እያንዳንዱን አካል ጠቅ ያድርጉ እና እንደ የአካሎቹን ስም መለወጥ ፣ መጥረቢያዎችን ማስወገድ እና መጠኑን መለወጥ የመሳሰሉትን ንብረቶቻቸውን ወደ እርስዎ ፍላጎት ይለውጡ። በንድፍ ዕይታ ውስጥ የተባባሪ አሳሽ አካላትን ወደ ተግባራዊ እና ለመረዳት ቀላል አቀማመጥ ይጎትቱ እና ይጣሉ። አሁን ለፒክሰል አካባቢ የሳንባዎች ምስሎችን ሊተነተን የሚችል በ MATLAB ውስጥ መተግበሪያ አለዎት!

ንብረቶች (መዳረሻ = የግል) እኔ = ; % የምስል ፋይል

ደፍ = 257; ግራጫ ጥንካሬን ሁለትዮሽ ለማድረግ %ደፍ

ክልሎችToExtract = 2;

አበቃ

ተግባር SelectImageButtonPushed (መተግበሪያ ፣ ክስተት)

clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %የማይለዋወጥ ፋይልን “ቅድመ ቅጥያ” ይግለጹ

[imageExt ፣ ዱካ] = uigetfile ('*. png'); %የምስሉን ስም ተለዋዋጭ ክፍል ይያዙ

imageName = [Dir filesep imageExt]; %የማይዛመድ እና የማይለዋወጥ ድርድር

app. I = imread (የምስል ስም); %ምስሉን ያንብቡ

imshow (app. I ፣ 'ወላጅ' ፣ app. UIAxes); %ምስሉን ያሳዩ

app. FilePathEditField. Value = መንገድ; የመጀመሪያው ምስል የመጣበትን %አሳይ ፋይል ዱካ

አበቃ

ተግባር AnalyzeImageButtonPushed (መተግበሪያ ፣ ክስተት)

originalImage = app. I;

originalImage = wiener2 (app. I ፣ [5 5]); %ነጥብ ማስወገጃ ማጣሪያ

ሂስቶግራም (መተግበሪያ አክስስ ሂስቶግራም ፣ አፕ. አይ ፣ 256); %የምስል ሂስቶግራም አሳይ

a_thresh = originalImage> = app.threshold; % ይህንን ገደብ ያዘጋጁ

labelImage = bwlabel (a_thresh);

መደገፊያዎች = የክልል መገልገያዎች (a_thresh ፣ ‘all’);

sortedSolidity = sort ([props. Solidity], 'ወደታች');

SB = የተደረደረ ጥንካሬ (1);

SB == 1 % SB ጥንካሬን ብቻ የሚቀበል ከሆነ == 1 አጥንቶችን ያጣሩ

SE = strel ('ካሬ' ፣ 3);

morphologicalGradient = imsubtract (imdilate (labelImage, SE) ፣ imerode (labelImage ፣ SE));

ጭምብል = አለመመጣጠን (ሞርፎሎጂካል ግራድየንት ፣ 0.03);

SE = strel ('ካሬ' ፣ 2);

ጭምብል = መዘጋት (ጭምብል ፣ SE);

ጭምብል = መሙላት (ጭምብል ፣ ‹ቀዳዳዎች›);

ጭንብል = ብሬፋይል (ጭምብል ፣ መተግበሪያ። ክልሎችToExtract);

የአከባቢ ማሳያ % ቁጥጥር ቁጥር

notMask = ~ ጭንብል;

ጭንብል = ጭንብል | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);

BW2 = መሙላት (መሰየሚያ ምስል ፣ ‹ቀዳዳዎች›);

new_image = BW2;

new_image (~ ጭንብል) = 0;

ቢ = ድንበሮች (አዲስ_ምስል); % 2 ልኬቶችን imshow (new_image ፣ 'ወላጅ' ፣ መተግበሪያ። 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);

አበቃ

አበቃ

የሚመከር: