সুচিপত্র:

ম্যাটল্যাব ফুসফুস বিভাজন: 5 টি ধাপ
ম্যাটল্যাব ফুসফুস বিভাজন: 5 টি ধাপ

ভিডিও: ম্যাটল্যাব ফুসফুস বিভাজন: 5 টি ধাপ

ভিডিও: ম্যাটল্যাব ফুসফুস বিভাজন: 5 টি ধাপ
ভিডিও: Purana rati reawaz Ko Kew manta ha jab uska MATLAB hi Nahi pata hoya ha..... subescribe plice 2024, জুন
Anonim
ম্যাটল্যাব ফুসফুস বিভাজন
ম্যাটল্যাব ফুসফুস বিভাজন

লিখেছেন: ফুক লাম, পল ইয়াং, এরিক রিয়েস

স্বীকার করে যে ফুসফুসের বিভাজনে ত্রুটিগুলি রোগের এলাকা সনাক্তকরণ সম্পর্কিত মিথ্যা তথ্য তৈরি করবে এবং রোগ নির্ণয়ের প্রক্রিয়াকে সরাসরি প্রভাবিত করতে পারে। ফুসফুসের রোগের চ্যালেঞ্জিং আকার থাকলে আধুনিক কম্পিউটার-সহায়তা কৌশল সঠিক ফলাফল দিতে ব্যর্থ হয়। এই অস্বাভাবিক আকারগুলি ফুসফুস বিভাজন, সংহতকরণ ইত্যাদির কারণে হতে পারে, ফুসফুসের বিভাজন কৌশল প্রয়োগ করে, যার মধ্যে ফুসফুসের সীমানা চারপাশের বক্ষীয় টিস্যু থেকে বিচ্ছিন্ন হয়, আমাদের অ্যাপ সম্পূর্ণরূপে কাস্টমাইজযোগ্য মতামত দিতে ব্যবহারকারীর ইনপুট থ্রেশহোল্ডের সাথে সীমানা চিহ্নিত করতে পারে ফুসফুসের আকারের, এই ম্যাটল্যাব প্রকল্পের উদ্দেশ্য হল ফুসফুসের এক্স-রে ছবির প্যাথলজিক অবস্থা শনাক্ত করার জন্য ব্যবহারকারী বান্ধব ইন্টারেক্টিভ ফুসফুস বিভাজন অ্যাপ তৈরি করা। আমাদের লক্ষ্য হল ফুসফুসের অস্বাভাবিক চিত্র এবং চিহ্নিত করার জন্য আরও কার্যকর উপায় তৈরি করা যাতে ডাক্তার এবং রেডিওলজিস্টদের ফুসফুসের রোগ নির্ণয়ের আরও নির্ভরযোগ্য উপায় দেওয়া যায়। ম্যাটল্যাবে অ্যাপ ডিজাইনার টুল ব্যবহার করে, প্রোগ্রামটি বিশেষভাবে বুকের এক্স-রে এবং কম্পিউটেড টমোগ্রাফি (সিটি) স্ক্যানের সাথে কাজ করার জন্য ডিজাইন করা হয়েছে, তবে এটি এমআরআই স্ক্যানের সাথে কাজ করার জন্যও পরীক্ষা করা হয়।

নীচের নির্দেশাবলীতে আমাদের নয়েজ ফিল্টারিং টেকনিক (লো-পাস উইনার ফিল্টার) রয়েছে সেইসাথে ইমেজ থ্রেশহোল্ড (গ্রেস্কেল ইমেজের তীব্রতা হিস্টোগ্রাম ব্যবহার করে) এবং একটি রূপগত গ্রেডিয়েন্ট ব্যবহার করে (বিস্তার এবং একটি ছবির ক্ষয়ের মধ্যে পার্থক্য) আগ্রহের অঞ্চল চিহ্নিত করুন। নির্দেশনাটি ব্যাখ্যা করবে কিভাবে আমরা গ্রাফিক ইউজার ইন্টারফেসে (GUI) সমস্ত উপাদানগুলিকে সংহত করি।

বিঃদ্রঃ:

1)। এই প্রকল্পটি একটি গবেষণাপত্র দ্বারা অনুপ্রাণিত: "সিটি এ অস্বাভাবিক ফুসফুসের বিভাজন এবং চিত্র বিশ্লেষণ: বর্তমান পদ্ধতি, চ্যালেঞ্জ এবং ভবিষ্যতের প্রবণতা"। যা এখানে পাওয়া যাবে

2)। আমরা NIH: ক্লিনিক্যাল সেন্টার থেকে এক্স-রে ইমেজ ব্যবহার করছি। লিঙ্ক পাওয়া যাবে এখানে

3)। অ্যাপ ডিজাইনারের সাহায্য এখানে পাওয়া যাবে

4)। কোডটি চালানোর আগে: আপনাকে আপনার ফাইল ডিরেক্টরিতে দির পাথ (34 লাইনে) পরিবর্তন করতে হবে এবং ছবির ধরন (লাইন 35) (আমরা বিশ্লেষণ করছি *.png)।

ধাপ 1: ধাপ 1: ছবি লোড হচ্ছে

ধাপ 1: ছবি লোড হচ্ছে
ধাপ 1: ছবি লোড হচ্ছে

এই ধাপ আপনাকে ধূসর স্কেলে মূল ছবি দেখাবে। আপনার ছবির নাম 'name_of_picture.png' পরিবর্তন করুন

পরিষ্কার; clc; সব বন্ধ করা;

%% ছবি লোড হচ্ছে

raw_x_ray = 'name_of_picture.png';

আমি = imread (raw_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: থ্রেশহোল্ড সেট করা

এই পদক্ষেপটি আপনাকে হিস্টোগ্রাম অনুযায়ী থ্রেশহোল্ড সেট করতে দেয়। morphologicalGradient লাল রঙে আগ্রহের অঞ্চলকে তুলে ধরবে, এবং ফাংশন ভিসবাউন্ডারিগুলি ফুসফুসের রূপরেখা এবং ফিল্টার করা ছবিটিকে লাল রঙে ওভারলে করে।

Regionprops ব্যবহার করে, আমরা দৃility়তার অ্যারেগুলি সঠিক করতে পারি এবং সেগুলি অবতরণ অনুসারে সাজাতে পারি। পরবর্তীতে আমি ধূসর স্কেলের ইমেজকে দ্বিবিভাজন করি এবং আগ্রহের অঞ্চল (ROI) হাইলাইট করতে মরফ্লজিকাল গ্রেডিয়েন্ট পদ্ধতি এবং এম লোরেন শুরাস্কিং প্রয়োগ করি। পরবর্তী ধাপ হল ছবিটি উল্টানো যাতে ফুসফুসের ROI কালো পটভূমিতে সাদা হয়। আমি 2 মাস্ক প্রদর্শন করতে showMaskAsOverlay ফাংশনটি ব্যবহার করি। দ্রষ্টব্য: কোডটি লরেন শুর, লিঙ্ক থেকে অনুপ্রাণিত।

লাসলি, আমি bwbwboundaries ব্যবহার করে এবং ফিল্টার ইমেজ এবং সীমানাগুলি মাস্ক করে লাল রূপরেখা তৈরি করি।

a_thresh = I> = 172; % এই থ্রেশহোল্ড সেট করুন

[labelImage, numberOfBlobs] = bwlabel (a_thresh);

props = regionprops (a_thresh, 'all');

sortedSolidity = sort ([props. Solidity], 'descend');

এসবি = সাজানো সলিডিটি (1);

যদি SB == 1 % SB শুধুমাত্র দৃ solid়তা গ্রহণ করে == 1 হাড়গুলি ফিল্টার করে

binaryImage = imbinarize (I); চিত্র (103);

imshow (binaryImage); কালারম্যাপ (ধূসর);

SE = strel ('বর্গ', 3);

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

মুখোশ = অন্তর্নিহিত (morphologicalGradient, 0.03);

SE = strel ('বর্গ', 2);

মুখোশ = imclose (মুখোশ, SE);

মুখোশ = 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 = bwboundaries (new_image); % মাত্র 2 মাত্রা গ্রহণ করতে পারে

চিত্র (104);

imshow (new_image);

অপেক্ষা কর

ভিসবাউন্ডারি (বি);

শেষ

ধাপ 4: GUI তৈরি করা

এখন, আমরা একটি MATLAB অ্যাপে পূর্ববর্তী কোড সংহত করি। MATLAB (নতুন> অ্যাপ) এ অ্যাপ ডিজাইনার খুলুন। প্রথমে, আমরা ইন্টারফেসটি ক্লিক-হোল্ড-এবং তিনটি অক্ষের মধ্যে টেনে কেন্দ্রের কর্মক্ষেত্রে নিয়ে আসি। এরপরে, আমরা দুটি বোতাম, একটি সম্পাদনা ক্ষেত্র (পাঠ্য), একটি সম্পাদনা ক্ষেত্র (সংখ্যাসূচক), একটি স্লাইডার এবং একটি ড্রপ-ডাউন মেনুতে ক্লিক-হোল্ড-ড্র্যাগ করুন। দুটি অক্ষ প্রতিটি প্রিভিউ প্রদর্শন করবে এবং ইমেজ বিশ্লেষণ করবে, এবং তৃতীয় অক্ষগুলি প্রিভিউ "নির্বাচিত" ছবির জন্য পিক্সেলের হিস্টোগ্রাম প্রদর্শন করবে। সম্পাদনা ক্ষেত্র (পাঠ্য) বাক্স নির্বাচিত চিত্রের ফাইল পথ প্রদর্শন করবে, এবং সম্পাদনা ক্ষেত্র (সংখ্যাসূচক) ফুসফুসের সনাক্তকৃত পিক্সেল এলাকা প্রদর্শন করবে।

এখন অ্যাপ ডিজাইনারে ডিজাইন ভিউ থেকে কোড ভিউতে স্যুইচ করুন। কোডটিতে প্রপার্টিস এর জন্য কোড লিখুন যাতে তার দ্বারা একটি প্লাস চিহ্ন সহ লাল "প্রোপার্টি" বাটনে ক্লিক করুন। নীচে প্রদত্ত কোডের মতো I, থ্রেশহোল্ড এবং অঞ্চলসমূহ ToExtract প্রপার্টিগুলি শুরু করুন। পরবর্তী, ওয়ার্কস্পেসের উপরের ডান পাশে একটি বোতামে ডান ক্লিক করুন (কম্পোনেন্ট ব্রাউজার) এবং কলব্যাক থেকে যান> কলব্যাক এ যান। "ফাংশন SelectImageButtonPushed (অ্যাপ, ইভেন্ট)" এর জন্য কোড যোগ করুন। এই কোডটি আপনাকে uigetfile ব্যবহার করে আপনার কম্পিউটার থেকে বিশ্লেষণ করার জন্য একটি ছবি নির্বাচন করতে দেয়। একটি ছবি নির্বাচন করার পর, একটি পূর্বরূপ চিত্র একটি হিস্টোগ্রাম সহ অক্ষের নীচে উপস্থিত হবে। তারপরে, অন্য বোতামে ডান ক্লিক করুন এবং কলব্যাক ফাংশন তৈরি করতে একই পদ্ধতি পুনরাবৃত্তি করুন।

"ফাংশন অ্যানালাইজ ইমেজবটনপশড (অ্যাপ, ইভেন্ট)" এর নীচে কোডটি যোগ করুন। এই কোডটি বিশ্লেষণ ইমেজ বাটনে প্রিভিউ ইমেজে পিক্সেল গণনা এবং ব্লব সনাক্তকরণ সম্পাদন করবে (এই কোডটির জন্য আপনি যেটি ডান ক্লিক করেছেন)। বোতামগুলি প্রোগ্রাম করার পরে, আমরা এখন স্লাইডার এবং ড্রপ-ডাউন মেনু প্রোগ্রাম করব। স্লাইডারে ডান-ক্লিক করুন, একটি কলব্যাক ফাংশন তৈরি করুন এবং শেষ পর্যন্ত "ফাংশন ফিল্টারথ্রেশোল্ডস্লাইডারভ্যালু চেঞ্জড (অ্যাপ, ইভেন্ট)" এর নীচে কোড যোগ করুন। এটি স্লাইডারকে ধূসর-তীব্রতার থ্রেশহোল্ড সামঞ্জস্য করতে দেয়।

ড্রপ ডাউন মেনুর জন্য একটি কলব্যাক ফাংশন তৈরি করুন, এবং "ফাংশন AreastoExtractDropDownValueChanged (অ্যাপ, ইভেন্ট)" এর নীচের কোডটি যোগ করুন যাতে ড্রপ ডাউন মেনু বিশ্লেষণকৃত চিত্র অক্ষগুলিতে প্রদর্শিত ব্লবের সংখ্যা পরিবর্তন করতে পারে। এখন, কম্পোনেন্ট ব্রাউজারে প্রতিটি সত্তা ক্লিক করুন এবং তাদের বৈশিষ্ট্যগুলি আপনার পছন্দ অনুযায়ী পরিবর্তন করুন, যেমন সত্তার নাম পরিবর্তন করা, অক্ষ সরানো এবং স্কেলিং পরিবর্তন করা। ডিজাইন ভিউতে কম্পোনেন্ট ব্রাউজারের সত্তাগুলিকে একটি কার্যকরী এবং সহজে বোঝার বিন্যাসে টেনে আনুন। আপনার এখন ম্যাটল্যাবে একটি অ্যাপ আছে যা পিক্সেল এলাকার জন্য ফুসফুসের ছবি বিশ্লেষণ করতে পারে!

বৈশিষ্ট্য (অ্যাক্সেস = ব্যক্তিগত) আমি = ; % ইমেজ ফাইল

থ্রেশহোল্ড = 257; বাইনারাইজিং ধূসর তীব্রতার জন্য %থ্রেশহোল্ড

RegionToExtract = 2;

শেষ

ফাংশন SelectImageButtonPushed (অ্যাপ, ইভেন্ট)

clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %সংজ্ঞায়িত ফাইল "উপসর্গ"

[imageExt, path] = uigetfile ('*। png'); %ছবির নামের পরিবর্তনশীল অংশটি ধরুন

imageName = [Dir filesep imageExt]; %concatenate invariate এবং পরিবর্তনশীল straings

app. I = imread (imageName); %ছবিটি পড়েছেন

imshow (app. I, 'parent', 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], 'descend');

এসবি = সাজানো সলিডিটি (1);

যদি SB == 1 % SB শুধুমাত্র দৃ solid়তা গ্রহণ করে == 1 হাড়গুলি ফিল্টার করে

SE = strel ('বর্গ', 3);

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

মুখোশ = অন্তর্নিহিত (morphologicalGradient, 0.03);

SE = strel ('বর্গ', 2);

মুখোশ = imclose (মুখোশ, SE);

মুখোশ = imfill (মুখোশ, 'গর্ত');

মাস্ক = bwareafilt (মাস্ক, app.regionsToExtract);

এলাকা দেখানোর % নিয়ন্ত্রণ সংখ্যা

notMask = ~ মুখোশ;

মাস্ক = মুখোশ | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);

BW2 = imfill (labelImage, 'hole');

new_image = BW2;

new_image (~ মাস্ক) = 0;

B = bwboundaries (new_image); % শুধুমাত্র 2 মাত্রা imshow গ্রহণ করতে পারে (new_image, 'parent', app. UIAxes2);

ধরে রাখুন (app. UIAxes2, 'on');

visboundaries (B);

সেট (gca, 'YDir', 'বিপরীত');

lungArea = bwarea (new_image);

app. PixelAreaEditField. Value = lungArea;

শেষ

শেষ

FilterThresholdSliderValueChanged ফাংশন (অ্যাপ, ইভেন্ট)

app.threshold = app. FilterThresholdSlider. Value;

শেষ

ফাংশন AreastoExtractDropDownValueChanged (app, event) stringNumber = app. AreastoExtractDropDown. Value;

app.regionsToExtract = str2double (stringNumber);

শেষ

শেষ

প্রস্তাবিত: