بازدید: 2149 بازدید

دستورات مورد نیاز برای سگمنتیشن در متلب

فهرست مطالب

مقدمه:

سگمنتیشن یکی از مهمترین مراحل پردازش تصویر است که در آن تصویر به بخش‌های مختلف یا اشیاء مختلف تقسیم می‌شود. این فرایند برای تشخیص و تفکیک اشیاء در تصویر بسیار مهم است و در بسیاری از برنامه‌های کاربردی مانند پزشکی، بینایی ماشین، رباتیک و غیره استفاده می‌شود. در این مقاله، به بررسی دستورات مورد نیاز برای سگمنتیشن در متلب می‌پردازیم و نحوه استفاده از آن‌ها برای تقسیم‌بندی تصاویر و تشخیص اشیاء را بررسی می‌کنیم.

دستورات مورد نیاز برای تقسیم‌بندی تصاویر در متلب:

یکی از دستورات اساسی برای سگمنتیشن تصاویر در متلب، دستور `imsegkmeans` است که برای تقسیم تصویر به بخش‌های مختلف بر اساس رنگ‌ها و ویژگی‌های دیگر استفاده می‌شود. این دستور به صورت خودکار تعداد بخش‌های مورد نیاز را تعیین می‌کند و تصویر را به این بخش‌ها تقسیم می‌کند.

استفاده از دستورات سگمنتیشن برای تشخیص اشیاء در تصاویر:

برای تشخیص اشیاء خاص در تصاویر، می‌توان از دستورات سگمنتیشن پیشرفته‌تری مانند `imsegnet` استفاده کرد. این دستورات از شبکه‌های عصبی عمیق برای تشخیص اشیاء در تصاویر استفاده می‌کنند و قادرند اشیاء مختلف را با دقت بالا تشخیص دهند.

نحوه استفاده از دستورات متلب برای انجام عملیات پیشرفته سگمنتیشن:

برای انجام عملیات پیشرفته سگمنتیشن می‌توان از دستورات متلب برای پیش‌پردازش تصاویر، اعمال فیلترهای مختلف، تنظیم پارامترهای شبکه‌های عصبی و غیره استفاده کرد. همچنین، می‌توان از دستورات برای ارزیابی دقت و عملکرد مدل‌های سگمنتیشن استفاده کرد تا بهبود‌های لازم را اعمال کرد.

با استفاده از دستورات مورد نیاز برای سگمنتیشن در متلب، می‌توان به تقسیم‌بندی دقیق تصاویر و تشخیص اشیاء با دقت بالا دست یافت. این دستورات ابزارهای قدرتمندی هستند که در بسیاری از حوزه‌های کاربردی مورد استفاده قرار می‌گیرند و امکانات گسترده‌ای برای پردازش تصاویر فراهم می‌کنند.

دستورات مورد نیاز سگمنتیشن segmentation در متلب:

در متلب، برای انجام عملیات سگمنتیشن یا تقسیم تصویر به قطعات مختلف، می‌توانید از بستهٔ پردازش تصویر MATLAB که شامل توابع و دستورات مفید برای انجام عملیات تصویری است، استفاده کنید. 

در زیر دستورات پرکاربرد برای انجام عملیات سگمنتیشن در متلب آورده شده است:

دستور combine:

در MATLAB، دستور combine برای ادغام دو یا چند آرایه (ماتریس) به صورت متفرقه و یا مشترک استفاده می‌شود. این دستور امکان ادغام آرایه‌های با ابعاد مختلف را فراهم می‌کند.

مزایای استفاده از دستور combine عبارتند از:

– ادغام داده‌های مختلف به صورت متفرقه یا مشترک برای ایجاد داده‌های جدید
– افزودن داده‌های جدید به داده‌های موجود
– امکان ایجاد داده‌های پیچیده‌تر با ترکیب داده‌های مختلف

در زیر یک نمونه کد MATLAB برای نشان دادن استفاده از دستور combine برای ادغام دو آرایه نمونه آمده است:

				
					% تعریف دو آرایه مثالی
array1 = [1 2 3; 4 5 6];
array2 = [7 8 9; 10 11 12];

% ادغام دو آرایه با استفاده از دستور combine
combinedArray = combine(array1, array2);

disp('آرایه ترکیبی:');
disp(combinedArray);


				
			

در این مثال، دو آرایه به نام‌های array1 و array2 تعریف شده‌اند و سپس با استفاده از دستور combine این دو آرایه با هم ادغام شده و در متغیر combinedArray ذخیره شده‌اند. سپس آرایه ترکیبی نمایش داده می‌شود.

لطفا توجه داشته باشید که در MATLAB، دستور combine به صورت پیش‌فرض وجود ندارد و بمعنای مخصوصی نیست. برای ادغام آرایه‌ها می‌توان از دستورات دیگری مانند cat، vertcat یا horzcat استفاده کرد.

دستور countEachLabel:

در متلب، دستور countEachLabel برای شمارش تعداد نمونه های هر بجلسه یا خروجی متفاوت به کار می‌رود. این دستور به شما کمک می‌کند تا تعداد نمونه های مربوط به هر برچسب را در داده های موجود خود بدست آورید.

این دستور معمولا برای تحلیل داده های تصویری یا داده هایی که فرمت برچسب دارند مورد استفاده قرار می‌گیرد. با استفاده از این دستور، می‌توانید برای هر برچسب (label) در داده خود تعداد نمونه ها را بشمارید.

برای مثال، یک کد ساده به شکل زیر می‌تواند نحوه استفاده از دستور countEachLabel را نشان دهد:

				
					% ساخت یک آرایه تست مثالی با برچسب های مختلف
labels = [1; 2; 1; 3; 2; 1; 2; 3; 1; 3]; % برچسب ها
values = [10; 20; 15; 25; 18; 12; 22; 27; 14; 30]; % مقادیر

% شمارش تعداد نمونه های هر برچسب
countMap = countEachLabel(labels);

% چاپ نتایج
disp(countMap);


				
			

این کد، تعداد نمونه های دارای هر بقلسه را برای آرایه labels محاسبه کرده و نتایج را می‌نماید.

در این کد، دستور countEachLabel اقدام به شمارش تعداد نمونه های هر برچسب متفاوت از 1 تا 3 می‌کند و نتایج را به صورت یک نقشه (map) نمایش می‌دهد.

دستور groundTruth:

دستور groundTruth در محیط نرم‌افزار MATLAB برای ایجاد و مدیریت داده‌های ground truth یا حقیقت زمینه در زمان برچسب‌زنی یا ایجاد داده‌ها برای آموزش مدل‌های یادگیری ماشین استفاده می‌شود. Ground truth به داده‌های واقعی یا واقعیت‌های زمینه اشاره دارد که به عنوان مقایسه برای ارزیابی دقت مدل‌های یادگیری ماشین استفاده می‌شوند.

برخی از کارایی‌های دستور groundTruth عبارت‌اند از:

۱. ایجاد داده‌های ground truth برای یادگیری ماشین.

۲. برچسب‌زنی داده‌ها با استفاده از ابزارهای مختلف مانند ناحیه‌بندی، تشخیص شیء و جایابی موقعیت شیء.

۳. مدیریت و بارگذاری داده‌های ground truth برای استفاده در کدهای یادگیری ماشین.

در زیر یک نمونه ساده از استفاده از دستور groundTruth در MATLAB آمده است:

				
					% ایجاد یک داده ground truth
data = imread('example.jpg'); % خواندن تصویر ورودی

% ایجاد ماتریس برچسب‌ها
groundTruthLabels = zeros(size(data, 1), size(data, 2)); % ماتریس صفر برای برچسب‌ها

% تنظیم برچسبی برای یک منطقه خاص
groundTruthLabels(100:200, 150:250) = 1; % برچسب 1 برای منطقه‌ای خاص

% نمایش تصویر اصلی و ground truth
figure;
subplot(1, 2, 1);
imshow(data);
title('تصویر اصلی');
subplot(1, 2, 2);
imshow(groundTruthLabels, []); % نمایش ماتریس برچسب‌ها
title('Ground Truth');

% ذخیره داده ground truth
save('groundTruthData.mat', 'groundTruthLabels');


				
			

در این کد، یک تصویر ورودی خوانده شده و سپس یک ماتریس برچسب ground truth ایجاد می‌شود که یک منطقه خاص در تصویر با برچسب 1 مشخص شده است. سپس تصویر اصلی و ground truth در کنار هم نمایش داده شده و داده ground truth در یک فایل به نام ‘groundTruthData.mat’ ذخیره می‌شود.

دستور pixelLabelImageDatastore:

دستور pixelLabelImageDatastore در محیط نرم‌افزار متلب برای ایجاد یک دسته‌بندی از داده‌های تصویری استفاده می‌شود. این دستور به شما این امکان را می‌دهد که تصاویر را به همراه اطلاعات برچسب‌گذاری شده‌ی پیکسل به صورت یک مجموعه داده در متلب بارگذاری کنید. این دستور به عنوان ورودی تصاویر و فایل‌های برچسب‌گذاری شده را می‌پذیرد و می‌تواند برای آموزش و ارزیابی مدل‌های شبکه‌های عصبی عمیق کاربرد داشته باشد.
به عنوان یک نمونه کد، می‌توانید از pixelLabelImageDatastore برای ساخت یک مجموعه داده برچسب‌گذاری شده استفاده کنید. به طور مثال، فرض کنید که شما دارید تصاویر و برچسب‌های آن‌ها را داشته و می‌خواهید این داده‌ها را برای آموزش یک مدل استفاده کنید.

 در ادامه یک کد ساده نمونه از استفاده از این دستور آورده شده است:

				
					% مسیرهای داده‌های تصویر و برچسب‌ها
imageDir = 'path_to_image_folder';
labelDir = 'path_to_label_folder';

% ایجاد pixelLabelImageDatastore
pxds = pixelLabelDatastore(imageDir, labelDir);

% نمایش تصویر و برچسب متناظر با هر تصویر
while hasdata(pxds)
    data = read(pxds);
    
    figure
    imshow(data{1})
    title('Image')
    
    figure
    imshow(data{2})
    title('Pixel Label Data')
end


				
			

در این کد، ابتدا مسیر دایرکتوری‌های حاوی تصاویر و برچسب‌ها را مشخص کرده و سپس با استفاده از pixelLabelDatastore یک pixelLabelImageDatastore ایجاد می‌شود. سپس با استفاده از یک حلقه، تصاویر و برچسب‌های متناظر آن‌ها به صورت ترتیبی نمایش داده می‌شوند.

توجه داشته باشید که تصاویر و برچسب‌ها باید به همان تعداد و با همان نام‌ها در دایرکتوری‌ها ذخیره شده باشند تا بتوانید از این دستور به درستی استفاده کنید.

دستور pixelLabelDatastore:

دستور pixelLabelDatastore در محیط نرم افزار متلب برای ایجاد یک دیتاست از تصاویری که دارای برچسب های پیکسل به صورت یک کارت ارقام هستند استفاده می‌شود. این دیتاست برای آموزش و اعتبارسنجی مدل‌های شبکه عصبی با استفاده از تصاویر و برچسب‌های مربوط به هر پیکسل ایجاد می‌شود.

برای استفاده از pixelLabelDatastore شما نیاز به تعیین مسیر به فولدر حاوی تصاویر و فایل‌های برچسب دارید. مثلاً اگر تصاویر شما در فولدر images و برچسب‌ها در فولدر labels ذخیره شده باشند، می‌توانید به صورت زیر از این دستور استفاده کنید:

				
					imds = imageDatastore('images');
pxds = pixelLabelDatastore('labels', classNames, labelIDs);


				
			

در اینجا classNames نام کلاس‌ها و labelIDs شماره‌های اختصاص داده شده به هر کلاس در برچسب‌ها هستند. به جای classNames و labelIDs باید یک سلسله مراتبی از نام کلاس‌ها و شماره‌های متناظر آن‌ها را ارائه دهید.

این دستور کارایی بالایی برای بارگذاری و مدیریت دیتاهای تصویری با برچسب‌های پیکسلی دارد که بسیار مفید است زیرا می‌توانید اطلاعات لازم برای آموزش مدل‌های عمیق را به راحتی از آن استخراج کنید.

دستور pixelLabelTrainingData:

دستور pixelLabelTrainingData در محیط نرم‌افزار متلب به منظور تولید داده‌های آموزشی برای شبکه‌های عصبی که از نوع شبکه‌های عصبی عمیق برای تشخیص راهنمایی پیکسل‌به‌پیکسل (Pixel-wise) استفاده می‌شود. این دستور از تصاویر مرجع با برچسب‌های پیکسلی برای آموزش و اعتبارسنجی شبکه‌های عصبی استفاده می‌کند.

برای استفاده از دستور pixelLabelTrainingData، ابتدا باید دو مجموعه از تصاویر (تصاویر ورودی و برچسب‌های پیکسلی مربوط به آن‌ها) را ایجاد کرده و سپس از این دو مجموعه برای آموزش و ارزیابی شبکه‌های عصبی استفاده کرد.

در زیر یک مثال ساده از استفاده از دستور pixelLabelTrainingData در متلب آمده است:

				
					% ایجاد یک متغیر imageDatastore برای تصاویر ورودی
imds = imageDatastore('path_to_images_folder');

% ایجاد یک متغیر pixelLabelDatastore برای برچسب‌های پیکسلی متناظر
pxds = pixelLabelDatastore('path_to_pixel_labels_folder');

% تولید داده‌های آموزشی
trainingData = pixelLabelTrainingData(imds,pxds);


				
			

در این مثال، ابتدا یک imageDatastore (imds) برای تصاویر ورودی و یک pixelLabelDatastore (pxds) برای برچسب‌های پیکسلی تعریف شده است. سپس با استفاده از دستور pixelLabelTrainingData، داده‌های آموزشی برای شبکه عصبی تولید می‌شود.

استفاده از این دستور به شما کمک می‌کند تا به راحتی داده‌های آموزشی لازم برای آموزش شبکه‌های عصبی برای وظایف تشخیص راهنمایی پیکسل به پیکسل ایجاد کنید.

دستور balancePixelLabels:

balancePixelLabels یک دستور در MATLAB است که برای تعیین تعادل بین تمام کلاس‌های یک تصویر دیجیتال استفاده می‌شود. این دستور از الگوریتم‌های مختلفی برای تعیین تعادل مناسب بین تراکم کلاس‌ها در تصویر استفاده می‌کند.

به طور کلی، این دستور به شما کمک می‌کند تا تعادل مطلوب بین کلاس‌های تصویر خود را تحلیل کرده و حفظ کنید.

در زیر یک نمونه کد MATLAB آورده شده است که از دستور balancePixelLabels برای تعادل بین کلاس‌ها استفاده می‌کند:

				
					% تعریف تصویر و دسته بندی‌ها
img = imread('input_image.png');
labels = imread('labels.png');

% تعادل بین کلاس‌های تصویر را انجام دهید
balanced_labels = balancePixelLabels(img, labels);

% نمایش تصویر اصلی و تصویر با تعادل بین کلاس‌ها
subplot(1, 2, 1);
imshow(labels, []);
title('Original Labels');

subplot(1, 2, 2);
imshow(balanced_labels, []);
title('Balanced Labels');


				
			

در این کد، ابتدا تصویر و برچسب‌های مربوط به تصویر خوانده می‌شوند، سپس با استفاده از balancePixelLabels تعادل بین کلاس‌ها برای برچسب‌ها محاسبه می‌شود و در نهایت تصاویر اصلی و با تعادل بین کلاس‌ها نمایش داده می‌شوند.

دستور imwarp:

دستور imwarp در نرم افزار متلب برای تبدیل هندسی تصاویر استفاده می شود. این دستور به شما امکان می دهد تصاویر را به روش هندسی مانند تغییر اندازه، چرخش، معکوس و جابه‌جایی (translation) تغییر دهید.

ویژگی‌های اصلی دستور imwarp عبارتند از:

۱. انعطاف پذیری: قابلیت تغییر اندازه، چرخش، اسکیل، معکوس و جابه‌جایی تصویر.

۲. محافظت از داده: از دست دادن اطلاعات تصویر به هنگام تغییر مکان و شکل جلوگیری می کند.

نمونه کد زیر را مشاهده کنید که ابتدا یک تصویر ورودی را به روش چرخش به چپ 90 درجه تغییر اندازه می دهد و سپس تصویر نهایی را نمایش می دهد:

				
					% خواندن تصویر ورودی
img = imread('peppers.png');

% تعریف ماتریس تبدیل چرخش به چپ 90 درجه
tform = affine2d([0 -1 0; 1 0 0; 0 0 1]);

% تبدیل تصویر ورودی با استفاده از ماتریس تبدیل
output_img = imwarp(img, tform);

% نمایش تصویر تبدیل شده
imshow(output_img);


				
			

این کد یک تصویر ورودی را چرخش به چپ 90 درجه می‌دهد و تصویر تبدیل شده را نمایش می‌دهد. از این استفاده می‌تواند به شما کمک کند تا تمام قابلیت‌های دستور imwarp را بفهمیدید و کاربردهای مختلف آن را اجرا کنید.

دستور imcrop:

دستور imcrop در MATLAB برای برش یا قطع یک بخش از یک تصویر (تصویری که در صورت آرایه ای از پیکسل ها ذخیره شده است) استفاده می‌شود. این دستور به شما امکان می‌دهد تا یک بخش مشخص از یک تصویر را به عنوان تصویر جدید ببرید.

 مثال استفاده از دستور imcrop:

در این مثال، ما یک تصویر به نام img داریم و می‌خواهیم یک بخش مشخص از آن را ببریم.

				
					% خواندن تصویر
img = imread('peppers.png');

% نمایش تصویر اصلی
imshow(img);
title('تصویر اصلی');

% انتخاب مستطیل برای برش تصویر
rect = getrect;
x = round(rect(1));
y = round(rect(2));
width = round(rect(3));
height = round(rect(4));

% برش تصویر
croppedImg = imcrop(img, [x, y, width, height]);

% نمایش تصویر برش خورده
figure;
imshow(croppedImg);
title('تصویر برش خورده');


				
			

توضیحات کد:

1. ابتدا تصویر peppers.png را خوانده و در متغیر img ذخیره می‌کنیم.
2. تصویر اصلی را نمایش می‌دهیم.
3. از کاربر می‌خواهیم تا یک مستطیل برای برش تصویر انتخاب کند.
4. مختصات مستطیل را محاسبه کرده و با استفاده از imcrop، بخش انتخابی تصویر را بریده و در croppedImg ذخیره می‌کنیم.
5. تصویر برش خورده را نمایش می‌دهیم.

 

 نکته:

مهم است که مختصات مستطیل انتخابی به صورت [x, y, width, height] داده شود.

دستور imresize:

دستور imresize در متلب برای تغییر اندازه تصویر (resize) مورد استفاده قرار می‌گیرد. این دستور به شما امکان می‌دهد اندازه تصویر را تغییر دهید و سایز تصویر را تنظیم کنید، به صورت تکنیکال تصویر را بزرگتر یا کوچک‌تر نمایید.

برای استفاده از imresize در متلب، باید تصویر موردنظر خود را با استفاده از imread بخوانید و سپس با استفاده از imresize اندازه مورد نظر را تعیین کنید.

در زیر یک نمونه کد از استفاده از imresize در متلب آمده است:

				
					% خواندن تصویر
img = imread('sample_image.jpg');

% تغییر اندازه تصویر به اندازه جدید
resized_img = imresize(img, [200, 300]);

% نمایش تصویر اصلی
subplot(1, 2, 1);
imshow(img);
title('Original Image');

% نمایش تصویر تغییر اندازه یافته
subplot(1, 2, 2);
imshow(resized_img);
title('Resized Image');

%ذخیره تصویر تغییر اندازه یافته
imwrite(resized_img, 'resized_image.jpg');


				
			

در این کد، ابتدا تصویر sample_image.jpg خوانده شده و سپس با استفاده از imresize اندازه تصویر به [200, 300] تغییر داده شده است. سپس تصاویر اصلی و تغییر اندازه یافته نمایش داده و تصویر تغییر اندازه‌داده شده با فرمت jpg ذخیره شده است.

دستور transform:

دستور transform در MATLAB برای تغییر شکل و تبدیل داده‌ها به صورت ماتریسی و انجام عملیات نقل و انتقالات ریاضی بر روی داده‌ها استفاده می‌شود. این دستور از توابع پرکاربردی است که در پردازش سیگنال‌ها و تحلیل فوریه مورد استفاده قرار می‌گیرد. 

در زیر یک مثال ساده از استفاده از دستور transform برای تبدیل داده‌ها به فضای فوریه در MATLAB آمده:

				
					% ایجاد یک سیگنال تصادفی
signal = randn(1, 100);

% تبدیل فوریه سیگنال
ft_signal = fft(signal);

% نمایش سیگنال اصلی و نمایی از آن در فضای فوریه
figure;
subplot(2, 1, 1);
plot(signal);
title('سیگنال اصلی');

subplot(2, 1, 2);
plot(abs(ft_signal));
title('مدول تبدیل فوریه سیگنال');


				
			

در این مثال، ابتدا یک سیگنال تصادفی ایجاد شده و سپس با استفاده از دستور transform به فضای فوریه تبدیل شده است. در نهایت، سیگنال اصلی و مدول تبدیل فوریه آن رسم شده‌اند.

دستور transform به صورت گسترده‌تر نیز در مطالعه و پردازش سیگنال‌ها، تصویر، سیگنال‌های بایوالکتریک و غیره استفاده می‌شود و نقش مهمی در تجزیه و تحلیل داده‌ها دارد.

دستور deeplabv3plusLayers:

دستور deeplabv3plusLayers در محیط برنامه نویسی متلب متعلق به افزونه Deep Learning Toolbox است و برای ایجاد لایه‌های مدل عمیق DeepLabv3+، که یک روش پیشرفته برای سمتی کاری تصویر (semantic segmentation) استفاده می‌شود، مورد استفاده قرار می‌گیرد. این دستور لایه‌های این معماری پیچیده را ایجاد می‌کند که بر اساس شبکه عصبی عمیق Convolutional Neural Network (CNN) ساخته شده است و به دقت بالا در تشخیص اجسام در تصاویر می‌پردازد.

برای استفاده از deeplabv3plusLayers برای ایجاد یک مدل DeepLabv3+ در متلب، می‌توانید از کد زیر به عنوان نمونه استفاده کنید:

				
					% ایجاد لایه‌های DeepLabv3+
inputSize = [224 224 3];
numClasses = 21; % تعداد کلاس‌ها
lgraph = deeplabv3plusLayers(inputSize, numClasses);

% نمایش نمودار معماری مدل
plot(lgraph);
title('DeepLabv3+ Architecture');


				
			

این کد ابتدا یک مدل DeepLabv3+ با ورودی‌هایی به ابعاد 224x224x3 (یک ورودی RGB با ابعاد 224×224) و 21 کلاس مختلف برای تشخیص انجام می‌دهد. سپس معماری این مدل را نمایش می‌دهد.

از این لایه‌ها برای ایجاد و آموزش مدل شبکه عصبی عمیق DeepLabv3+ و استفاده از ویژگی‌های پیچیده و پر‌کاربرد مانند اعمال مخصوص در تصویربرداری و بازشناسی اجسام در تصاویر استفاده می‌شود.

دستور randomAffine2d:

در متلب، دستور randomAffine2d به شما این امکان را می‌دهد که یک تبدیل تصادفی affine ۲D (دوبعدی) بسازید. این تبدیل شامل عملیاتی نظیر توسیع، چرخش، تغییر اندازه و جابجایی تصویر است. این دستور بسیار کارآمد است زیرا به شما این امکان را می‌دهد تا تصاویر را به صورت تصادفی تغییر دهید و در پردازش تصویر و یادگیری عمیق بسیار مفید است.

در ادامه یک نمونه کد Matlab برای استفاده از این دستور به شما نشان داده می‌شود:

				
					% ساخت یک تصویر تصادفی
image = rand(100); % تصویر یک صفحه 100x100 با مقادیر تصادفی

% اعمال یک تبدیل تصادفی affine ۲D بر روی تصویر
tform = randomAffine2d('Scale',[0.5 2],'Rotation',[-30 30],'XTranslation',[-20 20],'YTranslation',[-20 20]);
output_image = imwarp(image, tform);

% نمایش تصاویر ابتدایی و پس از اعمال تبدیل
subplot(1,2,1), imshow(image), title('تصویر اولیه');
subplot(1,2,2), imshow(output_image), title('تصویر پس از اعمال تبدیل');


				
			

در این کد، یک تصویر تصادفی ایجاد شده و سپس با استفاده از randomAffine2d یک تبدیل تصادفی بر روی آن اعمال می‌شود. سرانجام، تصویر ابتدایی و پس از اعمال تبدیل به همراه تیتر مناسب نمایش داده می‌شود.

دستور randomWindow2d:

دستور randomWindow2d در محیط نرم‌افزار متلب یک تابع است که برای ایجاد یک ویندو دو بعدی تصادفی یا یک ماتریس تصادفی مربوط به یک پنجره دو بعدی بر روی یک ماتریس داده شده، استفاده می‌شود. این دستور معمولا برای تولید نمونه‌های تصادفی از یک تصویر یا ماتریس تصویری مورد استفاده قرار می‌گیرد.

نمونه کد زیر را می‌توانید برای استفاده از دستور randomWindow2d در متلب استفاده کنید:

				
					% تعریف ماتریس داده
data = rand(100); % تولید یک ماتریس ۱۰۰x۱۰۰ با اعداد تصادفی

% تولید یک پنجره ۱۰x۱۰ تصادفی بر روی ماتریس داده
window_size = [10, 10];
window = randomWindow2d(data, window_size);

% نمایش ماتریس پنجره تصادفی
imshow(window, []);



				
			

این کد ابتدا یک ماتریس data به ابعاد ۱۰۰x۱۰۰ با اعداد تصادفی ایجاد می‌کند. سپس یک پنجره ۱۰x۱۰ تصادفی از این ماتریس تولید شده و در window ذخیره می‌شود. در نهایت، با استفاده از imshow، این پنجره تصادفی نمایش داده می‌شود.

استفاده از این دستور می‌تواند برای تولید نمونه‌های تصادفی برای بررسی الگوریتم‌های پردازش تصویر، آموزش شبکه‌های عصبی و یا تحلیل داده‌های تصویری مفید باشد.

دستور centerCropWindow2d:

دستور centerCropWindow2d در محیط برنامه‌نویسی متلب به منظور برش دادن یک پنجره از یک تصویر وسط تصویر با اندازه دلخواه استفاده می‌شود. این عمل به عنوان یک تکنیک پردازش تصویر برای بیشترین بهره‌وری اطلاعات از نقاط مرکزی یک تصویر مفید است.

این دستور به شما این امکان را می‌دهد که یک پنجره مرکزی از تصویرتان را با اندازه مشخص دلخواه ببرید و در تصویر کاهش یافته شده جایگزین کنید. این کار باعث می‌شود تا مرکز تصویر و اطلاعات مهم آن حفظ شده و از اطراف تصویر کمترین داده‌ها را از دست ندهید.

در زیر یک نمونه کد ساده به منظور نمایش استفاده از دستور centerCropWindow2d در محیط برنامه‌نویسی متلب آمده است:

				
					% تعریف یک تصویر ابتدایی
image = imread('example.jpg');

% اندازه مطلوب برش
desiredSize = [100, 100];

% برش یک پنجره وسط تصویر
centerCroppedImage = centerCropWindow2d(image, desiredSize);

% نمایش تصویر انتخاب شده
imshow(centerCroppedImage);

				
			

این کد مثال، یک تصویر به نام ‘example.jpg’ را بارگذاری می‌کند، یک پنجره مرکزی به ابعاد [100, 100] از تصویر برمی‌دارد و در نهایت تصویر برش خورده را نمایش می‌دهد. این نمونه کد به عنوان یک راهنمای مقدماتی برای استفاده از دستور centerCropWindow2d در متلب می‌باشد.

دستور dicePixelClassificationLayer:

دستور dicePixelClassificationLayer در متلب برای استفاده در شبکه‌های عصبی عمیق (DNNs) برای مسائل دسته‌بندی تصویر به کار می‌رود. این لایه به طور خاص برای استفاده در وظایف دسته‌بندی نواحی یا پیکسل‌های تصویر (به عنوان تسکی از یادگیری عمیق شناسایی نشده‌ها) طراحی شده است. اصلی‌ترین ویژگی این لایه این است که از معیار DICE (که یک معیار اندازه‌گیری شباهت بین دو تصویر است) برای محاسبه دقت و دقت همپوشانی ناحیه مورد علاقه با نتیجه پیش‌بینی شده توسط شبکه عصبی استفاده می‌کند.

برای استفاده از dicePixelClassificationLayer در یک کد متلب می‌توانید به صورت زیر عمل کنید:

				
					% ایجاد یک شبکه عصبی عمیق
layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(3, 16, 'Padding', 'same')
    reluLayer
    maxPooling2dLayer(2, 'Stride', 2)
    convolution2dLayer(3, 32, 'Padding', 'same')
    reluLayer
    maxPooling2dLayer(2, 'Stride', 2)
    convolution2dLayer(3, 64, 'Padding', 'same')
    reluLayer
    convolution2dLayer(3, 64, 'Padding', 'same')
    reluLayer
    transposedConv2dLayer(4, 32, 'Stride', 2, 'Cropping', 1)
    reluLayer
    transposedConv2dLayer(4, 16, 'Stride', 2, 'Cropping', 1)
    reluLayer
    convolution2dLayer(1, 2)
    dicePixelClassificationLayer
    softmaxLayer
    pixelClassificationLayer
];

% تعریف تنظیمات آموزش
options = trainingOptions('adam', ...
    'MaxEpochs', 10, ...
    'MiniBatchSize', 128, ...
    'Shuffle', 'every-epoch', ...
    'InitialLearnRate', 1e-3, ...
    'Verbose', true);

% آموزش شبکه
net = trainNetwork(trainingData, layers, options);


				
			

در این کد، dicePixelClassificationLayer بعد از convolution2dLayer(1, 2) قرار داده شده است، که این لایه از معیار DICE برای محاسبه دقت و دقت همپوشانی نواحی یا پیکسل‌ها در تصویر برای مسائل دسته‌بندی استفاده می‌کند.

دستور fcnLayers:

 

دستور fcnLayers در محیط نرم‌افزاری MATLAB برای ایجاد یک شبکه عصبی کاملاً پیچشی (Fully Convolutional Neural Network) استفاده می‌شود. این دستور به شما این امکان را می‌دهد تا یک شبکه عصبی پیچشی با لایه‌های پیچشی و لایه‌های تراکنشی ایجاد کنید که بیشتر برای وظایف پردازش تصویر مناسب هستند.

 

برای ایجاد یک شبکه عصبی کاملاً پیچشی با استفاده از fcnLayers، می‌توانید مراحل زیر را دنبال کنید:

 

1. تعیین تعداد کلاس‌های خروجی که می‌خواهید شبکه برای تشخیص آن‌ها آموزش ببیند.

2. تنظیمات دیگر مانند اندازه ورودی تصاویر و تنظیمات آموزش.

 

در ادامه، یک نمونه کد MATLAB برای ایجاد یک شبکه عصبی کاملاً پیچشی با استفاده از fcnLayers را مشاهده می‌کنید:

				
					numClasses = 3; % تعداد کلاس‌های خروجی
imageSize = [224 224 3]; % اندازه تصاویر ورودی

layers = fcnLayers(imageSize, numClasses); % ایجاد شبکه عصبی

% تعیین تنظیمات آموزش شبکه
options = trainingOptions('sgdm', ...
    'MaxEpochs', 10, ...
    'MiniBatchSize', 32);

% آموزش شبکه
% برای این مرحله نیاز به داده‌ها و فرآیند آموزش دقیقتر است که در اینجا حذف شده است.

% برای استفاده از شبکه آموزش دیده بر روی یک تصویر، می‌توانید از دستور predict استفاده کنید.
% برای مثال:
newImage = imread('path/to/your/image.jpg');
predictedLabels = predict(layers, newImage);


				
			

در این کد، یک شبکه عصبی کاملاً پیچشی با تعداد کلاس‌های خروجی 3 و اندازه تصاویر ورودی 224x224x3 ایجاد شده است. برای آموزش شبکه، نیاز به داده‌ها و تنظیمات آموزش بیشتری است که در اینجا قرار داده نشده است. سپس برای پیش‌بینی برچسب‌ها بر روی یک تصویر جدید predict استفاده شده است.

دستور pixelClassificationLayer:

دستور pixelClassificationLayer در محیط نرم‌افزار متلب برای تعریف یک لایه (layer) در شبکه‌های عصبی برای کاربردهای دسته‌بندی بر اساس پیکسل‌ها (pixel-wise classification) استفاده می‌شود. این دستور به شما امکان می‌دهد تا یک لایه به نام “pixelClassificationLayer” ایجاد کنید که برای برچسب گذاری تصاویر و تشخیص الگوهای موجود در آن‌ها، به خصوص در وظایف تصویربرداری پزشکی یا تصویربرداری ترافیک، استفاده می‌شود.

این لایه با استفاده از الگوریتم‌های شبکه‌های عصبی پیچشی (CNN) بهترین دسته‌بندی را برای هر پیکسل تصمیم می‌دهد. بنابراین، این دستور می‌تواند به شما کمک کند تا رویکردی پیچیده‌تر برای دسته‌بندی دقیق تصاویر خود اعمال کنید.

در زیر، یک نمونه کد متلب آمده است که از دستور pixelClassificationLayer برای ایجاد یک لایه در یک شبکه عصبی کانولوشنال استفاده می‌کند:

				
					layers = [
    imageInputLayer([28 28 1]) % تعریف لایه ورودی تصویر
    convolution2dLayer(3,16,'Padding','same') % لایه کانولوشن با تعداد 16 فیلتر 3x3
    reluLayer % لایه فعال‌سازی ReLU
    dropoutLayer(0.2) % لایه dropout برای جلوگیری از برازش زیاد
    convolution2dLayer(3,32,'Padding','same') % لایه کانولوشن دوم
    reluLayer % لایه فعال‌سازی ReLU
    dropoutLayer(0.2) % لایه dropout دیگر
    fullyConnectedLayer(10) % لایه کاملاً متصل با 10 نرون برای دسته‌بندی
    pixelClassificationLayer % لایه دسته‌بندی بر اساس پیکسل
];

% ساختار کل شبکه عصبی
net = layerGraph(layers);

				
			

این کد یک ساختار شبکه عصبی با ورودی تصویری 28×28 و یک لایه pixelClassificationLayer برای دسته‌بندی بر اساس پیکسل‌های تصویر ایجاد می‌کند. این یک مثال ساده است و شما می‌توانید این ساختار را برای وظایف دسته‌بندی تصاویر خود تغییر دهید.

دستور segnetLayers:

دستور segnetLayers در محیط نرم‌افزار متلب برای تعریف معماری شبکه‌ی عصبی کانولوشنی به نام SegNet استفاده می‌شود. SegNet یک مدل شبکه عصبی عمیق برای مسائل تشخیص و دسته‌بندی تصاویر است که به خوبی برای تشخیص اشیاء در تصاویر با وضوح پایین، اعمال تصویری، و یا سایر کاربردهای پردازش تصویر مناسب است. این مدل از قسمت‌های کانولوشنال و دیکانولوشنال تشکیل شده است.

 

برای استفاده از دستور segnetLayers و تعریف معماری شبکه SegNet در متلب، می‌توانید از مثال زیر استفاده کنید:

				
					% تعریف معماری شبکه SegNet
layers = segnetLayers(inputSize, numClasses);

% تعریف پارامترهای آموزش شبکه
options = trainingOptions('adam', 'MaxEpochs', 20, 'MiniBatchSize', 16, 'Plots', 'training-progress');

% آموزش شبکه با داده‌های آموزشی
net = trainNetwork(trainingData, layers, options);


				
			

در این مثال، ابتدا معماری شبکه SegNet با استفاده از دستور segnetLayers تعریف شده و سپس با تعریف پارامترهای آموزش شبکه و آموزش شبکه با داده‌های آموزشی، مدل شبکه آموزش دیده می‌شود. این یک نمونه ساده برای استفاده از دستور segnetLayers در متلب می‌باشد.

دستور unetLayers:

دستور unetLayers در محیط نرم‌افزار متلب (Matlab) برای ایجاد لایه‌های شبکه عصبی از نوع U-Net به کار می‌رود. شبکه‌های U-Net به خصوص برای مسائل تصویربرداری و پردازش تصویر مانند تشخیص اشیا و تصویربرداری پزشکی کاربرد دارند. این شبکه‌ها از ساختاری خاص به نام “U” برای انجام عملیات کاهش و گسترش اندازه تصویر برای دستیابی به نتایج دقیقتر و بهتر استفاده می‌کنند.

محوریت این شبکه‌ها بر اساس دو بخش اصلی است، بخش کدگشایی (برای استخراج ویژگی‌ها) و بخش کدسازی (برای بازسازی تصویر). دستور unetLayers دقیقاً لایه‌های این دو بخش را ایجاد می‌کند و امکان ساختاردهی و آماده‌سازی یک شبکه U-Net را در متلب فراهم می‌سازد.

این دستور به صورت زیر تعریف می‌شود:

				
					layers = unetLayers(inputSize, numClasses)


				
			

مثال:

				
					inputSize = [256, 256, 3]; % اندازه تصویر ورودی
numClasses = 2; % تعداد کلاس‌ها یا لیبل‌ها
layers = unetLayers(inputSize, numClasses); % ایجاد لایه‌های شبکه U-Net


				
			

در این مثال، یک شبکه U-Net برای یک تصویر ورودی به ابعاد 256×256 پیکسل و سه کانال رنگی و برای دسته‌بندی به دو کلاس (به عنوان نمونه: تصویر ساده و تصویر پیچیده) ایجاد می‌شود.

دستور labelvolshow:

دستور labelvolshow در محیط نرم‌افزار متلب، برای نمایش ویژگی‌های ویژه‌ای از یک دادهٔ ۳بعدی استفاده می‌شود. این دستور امکان نشان دادن برچسب‌های یک منطقه خاص از داده را به کاربر می‌دهد. از این دستور به عنوان یک ابزار بصری برای تجزیه و تحلیل داده‌های سه‌بعدی برای اهداف پردازش تصویر و تجزیه‌وتحلیل سه‌بعدی استفاده می‌شود.

برای استفاده از labelvolshow باید فرمت داده ابتدایی ورودی، یک سه‌بعدی نظیر یک ماتریس باشد که ابعاد X، Y و Z داشته باشد.

در زیر یک نمونه کد متلب برای استفاده از labelvolshow آورده شده است:

				
					% تعریف یک ماتریس سه‌بعدی به عنوان ورودی
data = randi([0, 1], [10, 10, 10]); % ماتریس ۱۰x۱۰x۱۰ با مقادیر تصادفی ۰ و ۱

% تعیین برچسب برای یک منطقه مشخص از داده
labels = zeros(size(data)); % ماتریس برچسب‌ها با اندازه مشابه داده
labels(4:6, 4:6, 4:6) = 1; % تعیین برچسب مقدار ۱ برای یک محدوده خاص

% نمایش داده با برچسب‌ها
labelvolshow(data, labels);


				
			

در این کد، یک ماتریس داده سه‌بعدی تعریف شده و سپس یک ماتریس برچسب با اندازه مشابه ایجاد شده که برچسب مقدار ۱ برای یک منطقه خاص از داده دارد. سپس با استفاده از labelvolshow داده و برچسب‌ها نمایش داده می‌شود.

دستور insertObjectMask:

دستور insertObjectMask در نرم افزار MATLAB برای اضافه کردن ماسک یا قنداق یا اشیا به تصویر استفاده می‌شود. این دستور به‌عنوان یک ویژگی مهم در پردازش تصاویر و داده‌های بصری شناخته شده است. از آن برای انتخاب و شناسایی اجسام یا اشیاء مختلف در یک تصویر استفاده می‌شود.

برای استفاده از دستور insertObjectMask، ابتدا باید یک تصویر و ماسک یا قنداق مربوطه را بارگذاری کنید، سپس این دو را با استفاده از این دستور به یکدیگر اضافه می‌کنید.

نمونه کد زیر نحوه استفاده از دستور insertObjectMask را نشان می‌دهد:

				
					% بارگذاری تصویر
image = imread('example.jpg');

% ساختن ماسک یا قنداق مربوطه
objectMask = zeros(size(image, 1), size(image, 2));
objectMask(100:200, 150:250) = 1; % مثال: انتخاب یک قسمت مربعی از تصویر به عنوان ماسک

% اضافه کردن ماسک به تصویر
imageWithObject = insertObjectMask(image, objectMask, 'Color', [255, 0, 0]); % رنگ قرمز برای قابلیت تمایز

% نمایش تصویر حاوی ماسک
imshow(imageWithObject);


				
			

در این کد، ابتدا یک تصویر بارگذاری می‌شود، سپس یک ماسک به‌صورت دستی ساخته شده و در نهایت با استفاده از دستور insertObjectMask، ماسک به تصویر اضافه و تصویر نهایی نمایش داده می‌شود.

دستور evaluateSemanticSegmentation:

دستور evaluateSemanticSegmentation در محیط نرم‌افزار MATLAB به صورت پایه‌ای برای ارزیابی عملکرد مدل‌های شبکه عصبی کانولو لایه‌ای (CNN) برای وظیفه‌های تشخیص تصویر نظیر سمنتیک سگمنتیشن (semantic segmentation) کاربرد دارد. این دستور به شما امکان می‌دهد تا عملکرد شبکه خود را با یک مجموعه داده واقعی یا مصنوعی، مانند مجموعه داده‌های PASCAL VOC، MIT، Cityscapes و غیره، ارزیابی کنید. این نتایج ارزیابی شامل معیارهایی از جمله معیارهای دقت (precision)، بازخوانی (recall) و اعتبار سنجی IOU (Intersection over Union) می‌شود.

برای استفاده از این دستور، شما به مدل آموزش دیده برای تشخیص تصویر نیاز دارید و همچنین یک مجموعه داده (ground truth) که برچسب‌های صحیح برای تصاویر دارد. سپس با استفاده از این دستور، مدل خود را بر روی مجموعه داده‌ها ارزیابی کرده و میزان صحت و دقت آن را محاسبه می‌کنید.

برای نمونه، یک کد ساده برای استفاده از دستور evaluateSemanticSegmentation در MATLAB می‌تواند در قالب زیر باشد:

				
					% تعريف مدل شبکه عصبي
net = اعمال‌مدل‌شبکه‌خود

% تولید پيش‌بینی‌های مدل بر روی تصویر
predictedLabels = اعمال‌مدل‌برروی‌تصویر(تصویر_ورودی);

% تولید برچسب‌های اصلی برای تصویر
groundTruth = load('groundTruth.mat');

% ارزیابی عملکرد مدل
metrics = evaluateSemanticSegmentation(predictedLabels, groundTruth);
disp(metrics);

				
			

لطفا توجه داشته باشید که کد فوق فقط یک نمونه ساده است و برای اجرای این کد، باید مدل شبکه عصبی، تصویر‌های ورودی و برچسب‌های صحیح مجموعه داده خود را تعریف کنید.

دستور bfscore:

دستور bfscore در محیط نرم‌افزار متلب یک الگوریتم جهت محاسبه امتیاز بهینگی شبکه‌های عصبی براساس نتایج حاصل از جستجوی بهینه برگه‌های فرزند است. این امتیاز یک اندیس ارزیابی برای عملکرد شبکه‌های بیزی را ارائه می‌دهد.

برای استفاده از bfscore و محاسبه امتیاز بهینگی شبکه‌های عصبی، ابتدا باید یک شبکه عصبی بیزی (Bayesian Neural Network) را بسازید و سپس مقادیر پیش‌بینی شده توسط این شبکه را با مقادیر واقعی مقایسه کرده و امتیاز بهینگی را محاسبه کنید.

در زیر یک نمونه کد برای استفاده از bfscore در متلب آورده شده است:

				
					% ایجاد یک شبکه عصبی بیزی به عنوان مثال
inputs = rand(100,1);
targets = rand(100,1);
hiddenLayerSize = 10;
net = feedforwardnet(hiddenLayerSize);
net = train(net,inputs,targets);

% مقادیر پیش‌بینی شده توسط شبکه را بحث محاسبه امتیاز بهینگی
outputs = net(inputs);
bfscore(net, targets, outputs)


				
			

این کد ابتدا یک شبکه عصبی بیزی را آموزش داده و سپس با استفاده از دستور bfscore، امتیاز بهینگی شبکه را محاسبه می‌کند. مهم است که داده‌ها و مدل شبکه عصبی به درستی تنظیم شده باشند تا بتوان از این دستور به درستی استفاده کرد.

دستور dice:

در محیط نرم‌افزار متلب، دستور dice برای ایجاد یک ماتریس تصادفی از اعداد صحیح بین دو مقدار داده شده از شما استفاده می‌شود. این دستور بسیار مفید است برای تولید داده‌های تصادفی برای آزمون و اعتبارسنجی الگوریتم‌ها، محاسبات شبیه‌سازی، و یا هر کاربرد دیگری که نیاز به اعداد تصادفی داشته باشد.

برای استفاده از دستور dice در متلب، می‌توانید از متغیر خروجی برای ذخیره ماتریس تصادفی استفاده کنید.

 به عنوان نمونه، کد زیر یک ماتریس 3×3 از اعداد صحیح تصادفی بین 1 تا 6 ایجاد می‌کند:

				
					result = dice(3, 3, 1, 6)


				
			

این کد به شما یک ماتریس 3×3 از اعداد تصادفی بین 1 تا 6 ایجاد می‌کند و در متغیر result ذخیره می‌کند. شما می‌توانید مقادیر حداقل و حداکثر برای تولید اعداد تصادفی (در این مثال 1 و 6) را تغییر دهید تا به نیاز خود بپیوندد.

استفاده از دستور dice در متلب از استفاده‌های استاندارد و مفید برای محاسبات تصادفی و شبیه‌سازی‌هاست.

دستور segmentationConfusionMatrix:

دستور segmentationConfusionMatrix در محیط نرم‌افزار متلب به منظور ارزیابی دقت دسته‌بندی تصاویر در مسائل تقسیم بندی تصاویر و segmentation استفاده می‌شود. این دستور کمک می‌کند تا به‌وضوح مشخص شود که یک مدل یا الگوریتم چه قدر دقیقاً عملکرد می‌کند و چه تعداد نمونه به درستی تقسیم‌بندی شده و چه تعداد نمونه به اشتباه دسته‌بندی شده‌اند.

 

برای استفاده از این دستور، ابتدا باید تصاویر واقعی و تصاویر پیش‌بینی شده توسط مدل یا الگوریتم مورد ارزیابی را آماده کرده و سپس دسته‌بندی‌های صحیح و اشتباه این مدل را به segmentationConfusionMatrix وارد کرد.

 

یک نمونه کد به شکل زیر است:

				
					% ایجاد تصاویر واقعی و تصاویر پیش‌بینی شده (به عنوان مثال)
groundTruth = imread('ground_truth.png');
predicted = imread('predicted_image.png');

% استفاده از دستور segmentationConfusionMatrix
confusionMatrix = segmentationConfusionMatrix(groundTruth, predicted);

% نمایش ماتریس اشتباهات
disp('Confusion Matrix:');
disp(confusionMatrix);


				
			

این کد، ابتدا دو تصویر را به عنوان تصویر واقعی و تصویر پیش‌بینی شده وارد کرده و سپس با استفاده از دستور segmentationConfusionMatrix ماتریس اشتباهات را محاسبه کرده و آن را نمایش می‌دهد.

از ماتریس اشتباهات می‌توان معیارهایی مانند دقت، حساسیت و ویژگی‌های دیگر ارزیابی‌ای را مشتق کرد تا بهترین دسته‌بند را برای مجموعه داده مورد ارزیابی انتخاب کرد.

دستور partitionByIndex:

در متلب، دستور partitionByIndex از پکیج Statistics and Machine Learning Toolbox برای تقسیم داده‌ها به دسته‌های مختلف بر اساس اندیس‌های داده‌ها استفاده می‌شود. این دستور به شما امکان می‌دهد داده‌ها را بر اساس اندیس‌ها به دسته‌های تعیین شده تقسیم کنید.

برای توضیح بیشتر، بهتر است یک نمونه‌ی کد را ببینید:

				
					% ایجاد یک ماتریس داده
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

% تعیین اندیس‌های برای تقسیم داده‌ها
indices = [1, 3, 5, 6, 8, 10];

% استفاده از دستور partitionByIndex برای تقسیم داده‌ها بر اساس اندیس‌ها
partitioned_data = partitionByIndex(data, indices);

% نمایش داده‌های تقسیم شده
disp(partitioned_data);


				
			

در کد بالا، ابتدا یک ماتریس داده ایجاد می‌شود و سپس اندیس‌هایی که می‌خواهیم بر اساس آن‌ها داده‌ها را تقسیم کنیم، مشخص می‌شوند. در ادامه، با استفاده از دستور partitionByIndex، داده‌ها بر اساس این اندیس‌ها به دسته‌های تعیین شده تقسیم می‌شوند و نتیجه نهایی در partitioned_data ذخیره شده و نمایش داده می‌شود.

دستور shuffle:

در MATLAB دستور shuffle برای تصادفی کردن یا ترتیب دادن تصادفی عناصر یک آرایه (vector) یا ماتریس مورد استفاده قرار می‌گیرد. این دستور به صورت تصادفی اجازه می‌دهد ترتیب عناصر را تغییر دهید بدون تغییر اصلی داده‌ها.

برای استفاده از shuffle در MATLAB، ابتدا یک بردار یا ماتریس را تعیین کرده و سپس با استفاده از دستور shuffle، ترتیب عناصر را تصادفی تغییر دهید.

در زیر یک مثال ساده از استفاده از shuffle در MATLAB آمده است:

				
					% تعریف یک بردار اعداد
vector = [1, 2, 3, 4, 5];

% ترتیب تصادفی عناصر بردار
shuffled_vector = shuffle(vector);

disp(shuffled_vector);

				
			

این کد عناصر بردار را تصادفی میکس میکند و خروجی را نمایش می دهد.

استفاده از این دستور به شما کمک می کند تا به راحتی ترتیب عناصر را تصادفی کنید و برنامه‌هایی را که نیاز دارند از ترتیب تصادفی استفاده کنند، پیاده‌سازی کنید.

دستور hasdata:

دستور hasdata در محیط نرم‌افزاری متلب برای بررسی موجود بودن یا عدم وجود داده در یک کلاس (Class) متلب استفاده می‌شود. این دستور به شما این امکان را می‌دهد که بررسی کنید آیا یک کلاس داده دارای داده‌های مشخص شده است یا خیر.

برای استفاده از hasdata، شما باید یک شیء از یک کلاس متلب را ایجاد کرده و سپس با استفاده از این دستور، بررسی کنید که آیا داده‌ای در آن وجود دارد یا خیر.

در زیر یک نمونه کد در متلب آورده شده است که از دستور hasdata برای بررسی وجود داده در یک کلاس استفاده می‌کند:

				
					% تعریف یک کلاس از نوع table
T = table([1; 2; 3], {'A'; 'B'; 'C'}, 'VariableNames', {'Var1', 'Var2'});

% بررسی وجود داده در کلاس T با استفاده از دستور hasdata
if hasdata(T)
    disp('داده در کلاس T وجود دارد.');
else
    disp('داده در کلاس T وجود ندارد.');
end


				
			

در این مثال، ابتدا یک جدول (table) به نام T با دو ستون و سه ردیف ایجاد می‌شود. سپس، با استفاده از hasdata بررسی می‌شود که آیا داده‌ای در T وجود دارد یا خیر. در نهایت پیام مناسب چاپ می‌شود.

دستور imread:

دستور imread در محیط نرم‌افزار متلب برای خواندن تصاویر از فایل‌ها به کار می‌رود. این دستور به شما امکان می‌دهد تا تصاویر را از فرمت‌های مختلف مانند JPEG، PNG، BMP و… بخوانید و آن‌ها را به عنوان آرایه‌ای از پیکسل‌ها ورودی کنید.

امکانات این دستور شامل موارد زیر می‌شود:

– خواندن تصویر با فرمت‌های مختلف.

– مدیریت داده تصویر به صورت آرایه‌های عددی.

– امکان پردازش و تحلیل تصاویر.

به عنوان مثال، یک کد ساده برای خواندن تصویر با استفاده از دستور imread را می‌توان به شکل زیر نمایش داد:

				
					image = imread('example.jpg');
imshow(image);
title('Loaded Image');


				
			

در این کد، تصویر با نام ‘example.jpg’ از فایل‌های ذخیره شده در مسیر کنونی متلب خوانده می‌شود و با استفاده از دستور imshow نمایش داده می‌شود.

دستور readall:

در متلب، دستور readall برای خواندن محتوای یک فایل متنی به صورت یک رشته (string) کامل استفاده می‌شود. این دستور تمام محتوای یک فایل را به صورت یک رشته در خروجی باز می‌گرداند.

کارایی این دستور این است که به شما امکان می‌دهد تمامی محتوای یک فایل را به صورت یک رشته در متلب خوانده و در ادامه آن را برای استفاده‌های مختلف در برنامه‌ها یا تجزیه و تحلیل داده‌ها به کار ببرید.

کد زیر یک فایل متنی را می‌خواند و محتوای آن را چاپ می‌کند:

				
					fileID = fopen('sample.txt', 'r'); % باز کردن فایل برای خواندن
fileContent = fread(fileID, '*char')'; % خواندن تمام محتوای فایل به داده‌های کاراکتری
fclose(fileID); % بستن فایل

fileContent % چاپ کل محتوا به صورت یک رشته


				
			

در این کد، ابتدا فایل ‘sample.txt’ برای خواندن باز می‌شود، سپس محتوای آن به یک رشته تبدیل شده و در نهایت چاپ می‌شود. اینجا fread به جای readall استفاده شده است چرا که متلب تا سپتامبر 2021 این دستور را پشتیبانی نمی‌کرد اما کد مشخص کرده که چطور می‌توانید از قابلیت خواندن تمام محتوا استفاده کنید، و این جایگزین کاملی برای دستور readall است.

دستور preview:

در متلب، دستور preview برای نمایش اطلاعات یک سیگنال و یا یک تصویر به شما کمک می‌کند. این دستور اطلاعات اصلی، ابعاد و نوع داده‌ها را به شما نشان می‌دهد. با استفاده از preview می‌توانید به سرعت نگاهی کلی به داده‌های خود داشته باشید و از نوع داده‌ها و اندازه آن‌ها مطلع شوید.

یک نمونه کد استفاده از دستور preview برای تصویر به شکل زیر می‌باشد:

				
					% خواندن تصویر از فایل
img = imread('peppers.png');

% نمایش اطلاعات تصویر با استفاده از دستور preview
preview(img)

				
			

این کد بلافاصله اطلاعات اصلی تصویر مانند ابعاد و نوع تصویر را نمایش می‌دهد. این به شما کمک می‌کند تا به سرعت با ویژگی‌های تصویر آشنا شوید.

دستور numpartitions:

دستور numpartitions در محیط نرم‌افزاری متلب (MATLAB) برای تقسیم یک مجموعه داده به بخش‌های مشخص، برای انجام یک محاسبه موازی استفاده می‌شود. این دستور به شما اجازه می‌دهد تا تعداد بخش‌ها یا پارتیشن‌هایی که می‌خواهید برای تقسیم داده‌هایتان استفاده کنید را مشخص کنید.

یک مثال ساده از استفاده از numpartitions در MATLAB را می‌توانید در ادامه ببینید:

				
					data = rand(1, 100); % ساخت داده‌های تصادفی به طول ۱۰۰
numParts = 4; % تعداد پارتیشن‌ها ۴ قطعه
p = numpartitions(data, numParts); % تقسیم داده به مطابق تعداد داده شده
disp(p); % نمایش نتیجه تقسیم


				
			

در این مثال، داده‌ها به طول 100 تولید شده و سپس به 4 بخش تقسیم شده و نتیجه تقسیم در متغیر p ذخیره شده و در نهایت نمایش داده می‌شود. این دستور مخصوصاً برای محاسباتی که قابلیت انجام موازی دارند مفید است.

حتی اگر از اجرای موازی کد در MATLAB نیازی نداشته باشید، استفاده از numpartitions می‌تواند در بهبود عملکرد محاسبات شما موثر باشد.

دستور reset:

دستور reset در متلب برای بازنشانی محیط کاری به حالت اولیه‌اش می‌باشد. این دستور اطلاعاتی از جمله متغیرها، توابع و مسیرهای فایل را پاک می‌کند و متلب را به وضعیت شروع اجرای مجدد می‌برد. استفاده از این دستور می‌تواند برای حل مشکلاتی که مرتبط با آلودگی متغیرها یا تداخل بین نتایج محاسباتی باشد مفید باشد.

به عنوان مثال، فرض کنید که شما در متلب چندین متغیر تعریف کرده‌اید و چندین تابع نیز اجرا کرده‌اید و ممکن است تداخلی بین آنها وجود داشته باشد. در این صورت می‌توانید از دستور “reset” استفاده کرده و متلب را به وضعیت اولیه برگردانید.

یک نمونه کد متلب به شکل زیر است که ابتدا یک متغیر ایجاد می‌کند و سپس با استفاده از دستور reset، متلب را بازنشانی می‌کند:

				
					% تعریف یک متغیر
myVar = 10;

% نمایش مقدار متغیر
disp(myVar);

% بازنشانی متلب به حالت اولیه
reset

% حال بازه هیچ متغیر یا اطلاعاتی وجود ندارد
% اجرای کد زیر خطا می‌دهد زیرا myVar دیگر تعریف نشده است
% disp(myVar);


				
			

با اجرای این کد، ابتدا مقدار 10 به عنوان myVar نمایش داده می‌شود و سپس با دستور reset، متلب بازنوشانی شده و هنگام اجرای دستور disp(myVar) خطا خواهید دید زیرا دیگر myVar تعریف نشده است.

دستور pixelLabelImageSource:

دستور pixelLabelImageSource در محیط برنامه‌نویسی MATLAB برای ایجاد منبع تصاویر برچسب‌دار (PixelLabelDatastore) استفاده می‌شود. این دستور به شما کمک می‌کند تا توزیع برچسب‌های پیکسلی مختلف را در یک پوشه ورودی‌ به طور خودکار شناسایی کرده و برای استفاده در وظایف پردازش تصویر به‌صورت آماده قرار دهید.

ویژگی‌های اصلی pixelLabelImageSource شامل تشخیص خودکار برچسب‌های پیکسلی، ایجاد داده‌سرور برچسب‌دار، استفاده آسان از داده برای شبکه‌های عصبی و الگوریتم‌های بینایی ماشین، و امکان تهیه داده‌های آزمون و آموزش برای برنامه‌های مدل‌سازی تصویر است.

در یک نمونه کد MATLAB برای استفاده از pixelLabelImageSource آمده است:

				
					% تعیین مسیر پوشه حاوی تصاویر برچسب‌دار
dataFolder = fullfile(toolboxdir('vision'),'visiondata','triangleImages');

% ایجاد منبع تصاویر برچسب‌دار
dataSource = pixelLabelImageSource(dataFolder);

% نمایش تصویر و برچسب متناظر
imgInfo = read(dataSource);
imshow(imgInfo{1})
imwrite(imgInfo{1}, 'sample_image.png');
imshow(imgInfo{2})
imwrite(imgInfo{2}, 'sample_label.png');


				
			

در این کد، ابتدا مسیر پوشه حاوی تصاویر برچسب‌دار تعیین شده و سپس با استفاده از pixelLabelImageSource یک منبع تصاویر برچسب‌دار ایجاد می‌شود. در ادامه تصویر و برچسب متناظر از این منبع خوانده شده و به صورت تصویری نمایش داده و ذخیره می‌شوند.

دستورات مورد نیاز برای سیگمنتیشن در متلب

نتیجه گیری:

سگمنتیشن یک فرآیند مهم در پردازش تصویر است که به وسیله آن تصویر به بخش‌های مختلف یا اجزا (segment) که دارای ویژگی‌های مشابه هستند، تقسیم می‌شود. در متلب، برای انجام سگمنتیشن می‌توان از روش‌ها و الگوریتم‌های متعددی مانند شبکه‌های عصبی کانولوشنال (CNN)، کا-میانگین (K-means) یا روش‌های پیچیده‌تر مانند شبکه‌های عصبی عمیق (Deep Learning) استفاده کرد. انجام سیگمنتیشن در تصاویر می‌تواند به بهبود تحلیل و فهم تصاویر کمک کرده و در بسیاری از حوزه‌ها از پزشکی تا خودروسازی و رباتیک کاربرد داشته باشد.

ادامه مطلب