دستورات مهم در پردازش تصویر
فهرست مطالب
مقدمه:
پردازش تصویر یکی از حوزههای مهم در علوم کامپیوتر است که به تحلیل و تغییر تصاویر دیجیتال میپردازد. این حوزه از اهمیت بسیاری برخوردار است زیرا تصاویر دیجیتال در زندگی روزمره ما بسیار مورد استفاده قرار میگیرند، از جمله در پزشکی، روباتیک، امنیت، تشخیص چهره و غیره.
تکنیکهای پیشرفته در پردازش تصویر:
تکنیکهای پیشرفته در پردازش تصویر شامل الگوریتمهای یادگیری عمیق، شبکههای عصبی کانولوشنال و شبکههای عصبی بازگشتی میشوند. این تکنیکها برای تشخیص الگوها، تصویربرداری سه بعدی، تشخیص اشیاء و غیره استفاده میشوند.
کاربردهای پردازش تصویر:
با توجه به پیشرفتهای اخیر در حوزه پردازش تصویر، کاربردهای آن نیز گسترش یافته است. به عنوان مثال، در پزشکی، از پردازش تصویر برای تشخیص بیماریها و تصویربرداری پزشکی استفاده میشود. در روباتیک، از پردازش تصویر برای شناسایی و جستجوی اشیاء استفاده میشود.
دستورات مهم در پردازش تصویر:
یکی از دستورات مهم در پردازش تصویر، فیلترها و ماسکها هستند. این ابزارها برای بهبود کیفیت تصویر و حذف نویزهای موجود در آن استفاده میشوند. به عنوان مثال، فیلترهای میانه برای حذف نویزهای ساده و فیلترهای گوسی برای حذف نویزهای گوسی استفاده میشوند.
حال به دستورات اصلی ومهم در پردازش تصویر می پردازیم:
دستور Imadd:
output_image = imadd(image1, image2);
در اینجا image1 و image2 دو تصویری هستند که میخواهید آنها را با هم جمع کنید و output_image تصویر حاصل از جمع این دو تصویر میباشد.
شما میتوانید همچنین از ویژگیهای دیگری نیز مانند شیفت (shift) و مقیاس (scale) برای تنظیم عمل جمع در تابع imadd استفاده کنید.
دستور Imagesc:
به عنوان مثال:
% ساخت یک ماتریس تصادفی 100x100
A = rand(100);
% نمایش تصویر با imagesc
figure;
imagesc(A);
colorbar;
title('تصویر تصادفی با imagesc'); % 🖼️🔍
این دستور A را در قالب یک تصویر به اندازه همان A نشان میدهد.
دستور Imaq:
در زیر یک کد نمونه MATLAB برای نمایش تصویر گرفته شده از دوربین به همراه توضیحات آن آمده است:
% شروع نرمافزار MATLAB با فعالسازی پکیج Image Acquisition
imaqreset;
% راهاندازی دوربین با استفاده از نام مدل دوربین
vid = videoinput('winvideo', 1, 'RGB24_640x480');
% شروع پخش تصویر از دوربین
start(vid);
% گرفتن تصویر از دوربین
img = getsnapshot(vid);
% نمایش تصویر در پنجره جدید
imshow(img);
% متوقف کردن دوربین
stop(vid);
% پاک کردن دوربین از حافظه
delete(vid);
این کد شامل مراحل زیر است:
1. فعال کردن پکیج Image Acquisition در MATLAB
2. راهاندازی دوربین
3. شروع پخش تصویر از دوربین
4. گرفتن یک عکس از دوربین و ذخیره آن در متغیر img
5. نمایش تصویر گرفته شده در یک پنجره جدید
6. متوقف کردن دوربین
7. حذف دوربین از حافظه
در کد بالا، ابتدا با استفاده از imaqreset، پکیج Image Acquisition فعال شده و سپس یک دوربین ورودی فعال شده است. سپس یک تصویر از دوربین گرفته شده و در متغیر img ذخیره میشود. در نهایت، تصویر گرفته شده نمایش داده و دوربین متوقف شده و از حافظه حذف میشود.
میتوانید از این قالب کد برای تعامل با دستگاههای تصویربرداری مختلف در MATLAB استفاده کنید.
دستور get:
value = get(handle, 'PropertyName');
در اینجا:
– handle: شیء گرافیکی که خواص آن را میخواهید بخوانید.
– ‘PropertyName’: نام خاصیتی که قصد دارید از شیء گرافیکی بخوانید.
مثلا، فرض کنید یک نمودار ساده در MATLAB دارید و میخواهید مقدار قطر دایره رسم شده را دریافت کنید. دستور get را به صورت زیر میتوانید استفاده کنید:
h = plot(1:10, 'o-'); % تولید نمودار
diameter = get(h, 'MarkerSize'); % دریافت اندازه نشانگر (MarkerSize) از نمودار
disp(['قطر دایره: ', num2str(diameter)]);
ین کد ابتدا یک نمودار ساده از اعداد ۱ تا ۱۰ رسم میکند، سپس از طریق دستور get اندازه نشانگر دایرههای موجود در نمودار را به دست میآورد و در نهایت این اندازه را چاپ میکند.
استفاده از دستور get به شما کمک میکند تا اطلاعات مربوط به خواص شیء گرافیکی را برنامهنویسی کنید و آنها را به دقت کنترل کنید.
دستور set:
در زیر یک مثال ساده برای استفاده از دستور set در محیط متلب آورده شده است:
% ایجاد دادهها برای نمایش
x = 1:10;
y = x.^2;
% رسم نمودار معمولی
figure;
plot(x, y, 'o-');
xlabel('محور افقی');
ylabel('محور عمودی');
title('نمودار دادهها');
% تنظیم رنگ خط و سبک نمودار
set(gca, 'Color', 'y'); % تغییر رنگ پس زمینه
set(gca, 'XColor', 'r'); % تغییر رنگ محور افقی
set(gca, 'YColor', 'g'); % تغییر رنگ محور عمودی
set(findall(gca, 'Type', 'Line'), 'LineWidth', 2); % تغییر ضخامت خطوط
در این مثال، ابتدا دادهها ایجاد شده و یک نمودار ساده از آنها رسم شده است. سپس با استفاده از دستور set، رنگ پس زمینه نمودار به زرد، رنگ محور افقی به قرمز، رنگ محور عمودی به سبز و ضخامت خطوط به 2 تغییر داده شده است.
این نمونه یک مقدمهی ساده برای استفاده از دستور set در متلب بود. میتوانید با تغییر ویژگیهای مختلف، نمودارها و نمایش دادههای خود را به شکل دلخواه زیباتر کنید.
دستور crop:
% بارگذاری تصویر
img = imread('peppers.png');
% نمایش تصویر اصلی
figure;
imshow(img);
title('تصویر اصلی');
% Crop کردن تصویر به یک بخش خاص
cropped_img = img(50:200, 100:300, :); % شروع و پایان را میتوانید با توجه به ابعاد تصویر تغییر دهید
% نمایش تصویر Crop شده
figure;
imshow(cropped_img);
title('تصویر پس از crop کردن');
در این کد، تصویر peppers.png ابتدا بارگذاری شده و سپس یک ناحیه خاص از آن انتخاب شده و نمایش داده میشود. شما میتوانید با تغییر مقادیر شروع و پایان، ناحیههای دیگری از تصویر را نیز crop کنید.
دستور dice:
در زیر یک مثال ابتدایی از استفاده از دستور randi در MATLAB با توضیح آن آمده است:
% تعداد ناحیه
n = 1;
% حداقل عدد صحیح
min_value = 1;
% حداکثر عدد صحیح
max_value = 6;
% تولید یک عدد تصادفی بین 1 تا 6
random_number = randi([min_value, max_value], n)
disp(['عدد تصادفی تولید شده: ', num2str(random_number)]);
در این کد، عدد تصادفی یک عدد صحیح بین 1 تا 6 تولید میشود و سپس با استفاده از disp و num2str، عدد تصادفی تولید شده چاپ میشود.
اگر این کد را در MATLAB اجرا کنید، یک عدد تصادفی بین 1 تا 6 تولید میشود و نمایش داده میشود.
دستور edge:
در زیر یک مثال ساده از استفاده از دستور edge در MATLAB آورده شده است:
% خواندن یک تصویر
img = imread('cameraman.tif');
% تشخیص حواف تصویر با استفاده از دستور edge
edge_img = edge(img, 'Sobel'); % استفاده از فیلتر Sobel برای تشخیص حواف
% نمایش تصویر اصلی و تصویر حاوی حواشی
subplot(1,2,1);
imshow(img);
title('تصویر اصلی');
subplot(1,2,2);
imshow(edge_img);
title('تصویر حاوی حواشی (لبهها)');
در این مثال، ابتدا یک تصویر به نام cameraman.tif خوانده شده و سپس با استفاده از دستور edge و فیلتر Sobel، حواف تصویر تشخیص داده شده و نمایش داده میشود.
استفاده از دستور edge، بسته به پارامترها و فیلترهای مورد استفاده، میتواند نوع و دقت تشخیص حواشی را تغییر دهد. از جمله پارامترهای مهمی که در edge استفاده میشود میتوان به نوع فیلتر (مانند Sobel یا Canny) اشاره کرد که تاثیر زیادی بر روی نتیجه نهایی دارد.
دستور imread:
به طور کلی فرمت دستور imread به صورت زیر است:
imageData = imread('path/to/image/file.jpg');
در اینجا، ‘path/to/image/file.jpg’ آدرس فایل تصویر مورد نظر است که قرار است توسط imread خوانده شود. نتیجه این دستور در متغیری که در اینجا imageData نام دارد ذخیره میشود و میتوانید این تصویر را به عنوان ورودی برای توابع پردازش تصویر دیگر در متلب استفاده کنید.
به عنوان مثال، برای خواندن یک تصویر به نام ‘example.jpg’ که در پوشه ‘Images’ قرار دارد، کد زیر را میتوانید استفاده کنید:
imageData = imread('Images/example.jpg');
imshow(imageData); % نمایش تصویر خوانده شده
این کد تصویر موجود در مسیر ‘Images/example.jpg’ را میخواند و سپس با استفاده از تابع imshow، تصویر را نمایش میدهد.
دستور imshow:
دستور imshow در محیط نرمافزار متلب برای نمایش تصویر یا تصاویر دیجیتالی استفاده میشود. این دستور به شما امکان مشاهده تصاویر بصری را فراهم میکند.
در زیر یک مثال ساده از استفاده از دستور imshow در محیط متلب آورده شده است:
% تعریف یک تصویر ساده با ابعاد 100x100 پیکسل
image = rand(100, 100);
% نمایش تصویر با استفاده از دستور imshow
imshow(image);
title('تصویر تصادفی 100x100'); % افزودن عنوان به تصویر
colormap('jet'); % تنظیم نحوهی نمایش رنگها
colorbar; % نمایش نوار رنگ بر روی تصویر
توضیحات کد فوق:
– ابتدا یک تصویر ساده به صورت تصادفی با ابعاد 100×100 پیکسل ایجاد میشود.
– سپس با استفاده از دستور imshow، تصویر ایجاد شده نمایش داده میشود.
– با استفاده از title، یک عنوان به تصویر اضافه میشود.
– با فراخوانی colormap، نحوه نمایش رنگها بر روی تصویر تنظیم میشود.
– در نهایت با فراخوانی colorbar، یک نوار رنگ بر روی تصویر نمایش داده میشود.
با اجرای این کد، یک تصویر تصادفی 100×100 پیکسلی با رنگهای متنوع نمایش داده خواهد شد.
دستور title:
مثال زیر نشان میدهد چگونه از دستور title در متلب میتوانید برای تغییر حالت متن استفاده کنید:
% تعریف یک رشته متنی
text = 'hello, matlab!';
% استفاده از دستور title برای تبدیل حروف اول کلمات به حروف بزرگ
formatted_text = title(text);
disp(formatted_text);
در این مثال، ابتدا یک رشته متنی تعریف میشود و سپس با استفاده از دستور title، حروف اول کلمات این متن به حالت بزرگ تغییر میکنند. سرانجام، متن با حروف بزرگ تغییر یافته نمایش داده میشود.
دستور im2gray:
دستور im2gray در محیط نرمافزار متلب، یک تصویر RGB را به تصویر خاکستری (مشکی-سفید) تبدیل میکند. این دستور از روشهای مختلف برای تبدیل تصویر RGB به تصویر خاکستری استفاده میکند، مانند میانگینگیری از مقادیر رنگی سه کانال R، G و B یا استفاده از روشهای مبتنی بر تئوری رنگ مثل روشهای تبدیل مبدل زیبایی.
در زیر یک مثال از استفاده از دستور im2gray در متلب را برای تبدیل یک تصویر RGB به تصویر خاکستری برایتان قرار میدهم:
% خواندن تصویر RGB
rgbImage = imread('peppers.png');
% تبدیل تصویر RGB به تصویر خاکستری
grayImage = im2gray(rgbImage);
% نمایش تصویر خاکستری
imshow(grayImage);
title('تصویر خاکستری');
در این کد، ابتدا یک تصویر RGB با نام peppers.png خوانده شده و سپس با استفاده از دستور im2gray آن تصویر به حالت خاکستری تبدیل میشود. در نهایت تصویر خاکستری نمایش داده میشود.
دستور im2java:
imresize برای تغییر اندازه یک تصویر به طور جدید استفاده میشود. این دستور به شما این امکان را میدهد که ابعاد تصویر را تغییر دهید بدون تغییر در نسبت ابعاد. این کار معمولا برای انطباق ابعاد تصاویر برای پردازش های مختلف یا نمایش تصاویر در اندازه های مختلف استفاده میشود.
در زیر یک مثال ساده از استفاده از imresize در MATLAB آمده است:
% خواندن تصویر اولیه
I = imread('peppers.png');
% تغییر اندازه تصویر به اندازه جدید
I_resized = imresize(I, 0.5); % اندازه جدید نصف اندازه اولیه است
% نمایش تصویر اصلی
imshow(I);
title('تصویر اصلی');
% نمایش تصویر تغییر اندازه یافته
figure;
imshow(I_resized);
title('تصویر با اندازه کوچکتر');
در این کد، ابتدا یک تصویر به نام “peppers.png” خوانده شده و سپس از imresize برای تغییر اندازه آن به اندازهای کوچکتر (نصف اندازه اصلی) استفاده شده است. سپس دو تصویر با ابعاد مختلف نمایش داده شدهاند.
دستور imnoise:
دستور imnoise در محیط نرمافزار متلب برای افزودن نویز به تصویرها استفاده میشود. این دستور میتواند در برنامههای پردازش تصویر مفید باشد و برای شبیهسازی شرایط مختلف نویز در تصاویر نیز به کار میآید.
ویژگیهای اصلی imnoise عبارتند از:
– افزودن انواع مختلف نویز مانند نویز گوسی، نویز سو، نویز مالیده و …
– تنظیم شدت نویز قابل اعمال بر تصویر.
– امکان افزودن نویز سفید یا نویزی با مشخصههای خاص.
در ادامه یک مثال برای استفاده از imnoise در متلب به همراه توضیح آن آمده است:
% ساخت تصویر نواحی سیاه و سفید
BW = zeros(100,100);
BW(25:75,25:75) = 1;
% اعمال نویز گوسی با میانگین صفر و واریانس 0.01
J = imnoise(BW,'gaussian',0,0.01);
% نمایش تصاویر اصلی و حاصل
subplot(1,2,1), imshow(BW), title('تصویر اصلی')
subplot(1,2,2), imshow(J), title('تصویر با نویز گوسی اعمال شده')
در این مثال، ابتدا یک تصویر با ابعاد 100×100 تشکیل شده از نواحی سیاه و سفید ایجاد میشود. سپس با استفاده از دستور imnoise نویز گوسی با میانگین صفر و واریانس 0.01 به تصویر اعمال میشود. در نهایت، تصاویر اصلی و حاصل از اعمال نویز نمایش داده میشوند.
در این مثال از نویز گوسی استفاده شده است، اما میتوانید با تغییر پارامترهای ورودی imnoise، انواع دیگری از نویز را نیز اعمال کنید.
دستور imwrite:
دستور imwrite در محیط نرمافزار متلب برای ذخیره تصویر به فرمتهای مختلف مانند JPEG، PNG، BMP و غیره استفاده میشود. این دستور امکان ذخیره کردن تصویری که در متغیری مانند ماتریس تصویر (image matrix) قرار دارد را فراهم میکند.
برای استفاده از دستور imwrite، شکل زیر را داریم:
imwrite(image, 'نام_فایل.فرمت', 'خصوصیات_اختیاری');
توضیح مثال:
بیایید یک مثال ساده از استفاده از این دستور را ببینیم. ابتدا یک تصویر بسیار ساده ایجاد میکنیم و سپس آن را با استفاده از imwrite ذخیره میکنیم.
% ایجاد یک تصویر ساده
image = zeros(200, 200); % تصویر سیاه و سفید 200x200 پیکسل
% ذخیره تصویر با فرمت PNG به عنوان مثال
imwrite(image, 'my_image.png');
disp('تصویر با موفقیت ذخیره شد!');
در این مثال، تصویر سیاه و سفید 200×200 پیکسل ایجاد شده و سپس با استفاده از imwrite با فرمت PNG ذخیره میشود. پس از اجرای این کد، یک پیام “تصویر با موفقیت ذخیره شد!” نمایش داده خواهد شد.
همچنین میتوانید خصوصیاتی اضافی مانند تنظیمات فشردهسازی و غیره را نیز به دستور imwrite ارسال کنید تا تنظیمات خاصی برای ذخیره تصویر اعمال شود.
دستور contrast:
دستور contrast در محیط برنامه نویسی MATLAB برای افزایش کنتراست تصویر استفاده میشود. این دستور به شما امکان میدهد تا از تغییرات کنتراست تصویر برای بهبود وضوح و قابلیت دید تصویر استفاده کنید.
زمانی که از دستور contrast استفاده میکنید، میتوانید با تعیین پارامترهای مختلف، میزان افزایش کنتراست تصویر را تنظیم کنید. این دستور یک تابع پیشفرض به نام imadjust را فراخوانی میکند که براساس تنظیمات کنتراست دلخواه شما، تصویر را تغییر میدهد.
در زیر یک مثال از استفاده از دستور contrast در MATLAB آورده شده است:
% خواندن تصویر و نمایش آن
img = imread('peppers.png');
figure;
imshow(img);
title('Original Image');
% افزایش کنتراست تصویر و نمایش تصویر تغییر یافته
img_contrast = contrast(img, [0.2 0.8]); % بازه کنتراست مورد نظر را تعیین میکنیم
figure;
imshow(img_contrast);
title('Image with Enhanced Contrast');
در این کد، ابتدا تصویر peppers.png از فایل خوانده شده و نمایش داده میشود. سپس با استفاده از دستور contrast، کنتراست تصویر با تعیین بازه مقادیر از 0.2 تا 0.8 افزایش یافته و تصویر با کنتراست بهتر نمایش داده میشود.
این دستور به شما امکان اعمال تغییرات کنتراست به تصاویر را میدهد و میتوانید با تجربه و تست پارامترهای مختلف، بهبود زیبایی و وضوح تصاویر خود را انجام دهید.
دستور getimaget:
مثال:
% تولید تصویر ساده
I = imread('peppers.png');
figure;
imshow(I);
% ذخیره تصویر در حافظه موقت
tempvar = im2uint8(I);
% استفاده از دستور getimaget برای گرفتن تصویر از حافظه موقت
J = getimaget(tempvar);
% نمایش تصاویر
figure;
subplot(1,2,1);
imshow(I);
title('تصویر اصلی');
subplot(1,2,2);
imshow(J);
title('تصویر دریافتی با getimaget');
توضیح کد:
1. ابتدا تصویر peppers.png را بارگذاری کرده و نمایش میدهیم.
2. سپس این تصویر را به داده نوع uint8 تبدیل میکنیم و در tempvar ذخیره میکنیم.
3. با استفاده از دستور getimaget، تصویر را از حافظه موقت برمیگردانیم و آن را در متغیر J ذخیره میکنیم.
4. در نهایت، تصاویر اصلی و تصویر به دست آمده از getimaget را در کنار هم نمایش میدهیم.
با این کد، شما میتوانید عملکرد دستور getimaget در متلب را به صورت عملی تجربه کنید. این دستور معمولا برای پردازش تصاویر و کار با تصاویر در محیط متلب استفاده میشود.
دستور gray2ind:
دستور gray2ind در محیط نرمافزار متلب برای تبدیل تصاویر پیکسلشده از فضای رنگی طیفخاکستری به تصویر شاخصدار فضای رنگی استفاده میشود. این دستور بهعنوان یکی از مراحل مهم در پردازش تصاویر و بهویژه در کاربردهایی مثل فشردهسازی تصاویر مورد استفاده قرار میگیرد.
زمانی که یک تصویر در فضای رنگی طیف خاکستری قرار دارد، هر پیکسل آن از یک مقدار خاکستری تشکیل شده است که در بازهی اعداد مشخصی قرار دارد. اما در فضای رنگی شاخصدار، هر پیکسل با استفاده از یک شاخص رنگی (از جمله اعداد صحیح) نشان داده میشود.
در زیر یک مثال از استفاده از دستور gray2ind در متلب آمده است:
% تعریف یک تصویر خاکستری
grayImage = imread('cameraman.tif');
% تبدیل تصویر خاکستری به تصویر شاخصدار با ۱۶ رنگ
[indexedImage, colormap] = gray2ind(grayImage, 16);
% نمایش تصویر شاخصدار
imshow(indexedImage, colormap);
title('تصویر شاخصدار با 16 رنگ');
در این مثال، ابتدا یک تصویر خاکستری با استفاده از تابع imread بازیابی شده و سپس توسط دستور gray2ind تبدیل به یک تصویر شاخصدار با ۱۶ رنگ شده است. سپس تصویر شاخصدار همراه با نمایش آن در پنجرهای جدید به کاربر نمایش داده میشود.
دستور graydist:
دستور graydist در محیط نرمافزار متلب، یک معیار فاصله برای تصاویر بازهسیاهسفید ارائه میدهد. این معیار فاصله بر اساس تفاوت مقادیر پیکسلها در تصویر به صورت جزئی و جامع محاسبه میشود.
برای استفاده از دستور graydist در متلب، باید دو تصویر خاکستری یا بازهسیاهسفید به عنوان ورودیها به آن داده شوند. مقدار فاصله بین این دو تصویر محاسبه شده و نتیجه به عنوان خروجی برگردانده میشود.
در زیر یک مثال از استفاده از دستور graydist در متلب همراه با توضیح آن آمده است:
% ایجاد دو تصویر خاکستری تصادفی
image1 = rand(100, 100);
image2 = rand(100, 100);
% نمایش تصاویر
subplot(1, 2, 1);
imshow(image1);
title('تصویر اول');
subplot(1, 2, 2);
imshow(image2);
title('تصویر دوم');
% محاسبه فاصله بین دو تصویر با استفاده از graydist
distance = graydist(image1, image2);
% نمایش نتیجه
disp(['فاصله بیشینه بین دو تصویر: ', num2str(distance)]);
در این مثال، ابتدا دو تصویر خاکستری تصادفی ایجاد میشود و سپس از دستور graydist برای محاسبه فاصله بین این دو تصویر استفاده میشود. نتیجه نشان داده میشود که مشخص کننده فاصله بیشینه بین دو تصویر است.
دستور im2frame:
دستور im2frame در محیط نرمافزار متلب (MATLAB) وظیفه تبدیل یک تصویر (تصویر دیجیتال) به یک فریم (frame) در قالب یک ویدیو را برعهده دارد. این دستور به شما امکان میدهد تا تصویر دیجیتال خود را به یک فریم از یک ویدیو تبدیل کرده و از طریق دستورات و ابزارهای دیگر در متلب، مانند ساخت ویدیوهای ساده، به تحلیل یا پردازش تصاویر بپردازید.
در اینجا یک مثال کد سادهای برای نمایش استفاده از im2frame به همراه توضیح آن است:
% خواندن تصویر ورودی
inputImage = imread('peppers.png');
% تعریف پیکسلهای تصویر و فریم
frame = im2frame(inputImage);
% نمایش تصویر اولیه
subplot(1,2,1);
imshow(inputImage);
title('تصویر اولیه');
% نمایش فریم تبدیل شده
subplot(1,2,2);
imshow(frame.cdata);
title('فریم تبدیلشده');
% نمایش تصویر در قالب فریم در ویدیو
figure;
movie(frame,1,1);
در این کد، ابتدا یک تصویر ورودی (peppers.png) خوانده میشود و سپس توسط im2frame، این تصویر به یک فریم تبدیل میشود. سپس تصویر اولیه و فریم تبدیلشده به همراه توضیحات مربوطه نمایش داده میشوند. در نهایت، تصویر به صورت یک ویدیو با یک فریم از تصویر اولیه به صورت متوالی نمایش داده میشود.
دستور im2uint8:
دستور im2uint8 در محیط نرمافزار متلب (Matlab) به کاربر در تبدیل یک تصویر به فرمت unsigned 8-bit اعداد صحیح کمک میکند. این دستور معمولا برای تبدیل تصاویری که در قالب ماتریس دادههای اعشاری با مقادیر بین 0 تا 1 هستند، به تصاویر با فرمت داده uint8 استفاده میشود.
با استفاده از دستور im2uint8، تصویر ورودی با مقادیر اعشاری مثلا بین 0 تا 1، به تصویر با مقادیر کمترین مقدار ممکن 0 و بیشترین مقدار ممکن 255 تبدیل میشود.
در زیر مثالی از استفاده از دستور im2uint8 در متلب را خواهید یافت:
% تعریف یک تصویر با مقادیر اعشاری بین 0 تا 1
image_double = rand(100, 100);
% نمایش تصویر اولیه
imshow(image_double)
title('تصویر اعشاری')
% تبدیل تصویر به فرمت uint8
image_uint8 = im2uint8(image_double);
% نمایش تصویر تبدیل شده
figure
imshow(image_uint8)
title('تصویر تبدیل شده به uint8')
این کد ابتدا یک تصویر با مقادیر اعشاری تصادفی ایجاد میکند، سپس تصویر را با فرمت uint8 نمایش میدهد. تصویر اصلی با مقادیر اعشاری بین 0 تا 1 نشان داده شده و سپس تصویر تبدیل شده که مقادیر آن از 0 تا 255 است، نمایش داده میشود.
دستور imfilter:
دستور imfilter در محیط نرمافزار متلب برای اعمال فیلترهای مختلف بر روی تصاویر مورد استفاده قرار میگیرد. این دستور به شما امکان میدهد تا با استفاده از فیلترهای مختلف، عملیات پردازش تصویری مانند افزایش شارپنس، حذف نویز، تشخیص حواف و غیره را انجام دهید.
توضیح دقیقی از کارایی imfilter به همراه یک مثال در زیر برای شما آمده است:
کارایی imfilter:
– imfilter با دریافت تصویر و یک فیلتر (مثلا فیلتر لاپلاسین یا فیلتر گوسیان)، تصویر ورودی را با اعمال آن فیلتر تغییر داده و تصویر خروجی را ایجاد میکند.
مثال کد MATLAB:
% خواندن یک تصویر
img = imread('cameraman.tif');
% تعریف یک فیلتر لاپلاسین
h = fspecial('laplacian', 0);
% اعمال فیلتر لاپلاسین بر روی تصویر
output_img = imfilter(img, h);
% نمایش تصویر اصلی و خروجی
subplot(1,2,1), imshow(img), title('تصویر اصلی');
subplot(1,2,2), imshow(output_img), title('تصویر پس از اعمال فیلتر لاپلاسین');
توضیح مثال:
– در این مثال، ابتدا یک تصویر به نام cameraman.tif خوانده شده است.
– سپس یک فیلتر لاپلاسین تعریف شده و در متغیر h ذخیره میشود.
– سپس با استفاده از imfilter، فیلتر لاپلاسین بر روی تصویر ورودی اعمال شده و تصویر خروجی ساخته میشود.
– در نهایت، تصویر اصلی و تصویر خروجی با استفاده از دستورات نمایش داده میشود.
این کد باعث اعمال فیلتر لاپلاسین بر روی تصویر و مشاهده تغییرات ناشی از این فیلتر میشود.
دستور imresize:
دستور imresize در محیط نرمافزار متلب برای تغییر اندازه یک تصویر استفاده میشود. این دستور به شما امکان میدهد تا اندازه یک تصویر را بر اساس ابعاد دلخواهتان تغییر دهید. مثلاً میتوانید یک تصویر را بزرگتر یا کوچکتر کنید. با استفاده از این دستور، میتوانید تصویر را بصورت افقی یا عمودی تغییر اندازه دهید و یا از روشهای مختلفی برای تغییر اندازه تصویر استفاده کنید.
در زیر یک مثال ساده از استفاده از دستور imresize در متلب برای تغییر ابعاد یک تصویر آورده شده است:
% خواندن یک تصویر به عنوان ماتریس
image = imread('peppers.png');
% نمایش تصویر اصلی
imshow(image);
title('تصویر اصلی');
% تغییر اندازه تصویر به اندازه نصف ابعاد اصلی
resized_image = imresize(image, 0.5);
% نمایش تصویر تغییر اندازه یافته
figure;
imshow(resized_image);
title('تصویر با اندازه کوچکتر');
در این مثال، تصویر ‘peppers.png’ خوانده شده و نمایش داده میشود. سپس ابعاد این تصویر با استفاده از دستور imresize به نصف ابعاد اصلی تغییر داده میشود و تصویر جدید با ابعاد کوچکتر نمایش داده میشود.
با استفاده از دستور imresize میتوانید تصویر را به انواع دیگری از اندازهها تغییر دهید مانند تغییر اندازه به نسبت دلخواه یا به اندازه دقیق.
این دستور به شما کمک میکند تا اندازه تصاویر را در محیط متلب به دقت مدیریت کنید.
دستور imrotate:
دستور imrotate در محیط نرمافزار متلب برای چرخش تصویر به زوایای مختلف استفاده میشود. این دستور به شما امکان میدهد تا تصویر را در جهات مختلف چرخانده و پردازشهای چرخشی را روی تصویر اعمال کنید.
برای استفاده از این دستور، میتوانید به شکل زیر عمل کنید:
% خواندن یک تصویر از فایل
I = imread('peppers.png');
% چرخش تصویر به زاویه ۹۰ درجه
J = imrotate(I, 90, 'bilinear', 'crop');
% نمایش تصاویر اصلی و چرخیده شده
figure;
subplot(1, 2, 1);
imshow(I);
title('تصویر اصلی');
subplot(1, 2, 2);
imshow(J);
title('تصویر چرخیده ۹۰ درجه');
در این کد، تصویر اصلی peppers.png خوانده شده و سپس با استفاده از imrotate، تصویر به زاویه ۹۰ درجه چرخش داده میشود. در اینجا ‘bilinear’ و ‘crop’ به ترتیب بیان میکنند که از روش تقریب بیضریب برای تبدیل پیکسلها استفاده شود و تصویر چرخیده باید در ابعاد اصلی تصویر باقی بماند.
حالتهای مختلف و پارامترهای بیشتری برای این دستور قابل تنظیم میباشد که میتوانید با مطالعه مستندات رسمی متلب بیشتر با آنها آشنا شوید.
دستور ind2gray:
دستور ind2gray در محیط برنامه نویسی متلب یک عملیات تبدیل تصویر حالت تصادفی (indexed) به حالت پویا (grayscale) را انجام میدهد. تصاویر در حالت indexed معمولا از پیکسلها که با اعداد صحیح نمایان میشوند تشکیل شدهاند و هر پیکسل به یک رنگ خاص مرتبط است. این دستور تبدیل این اعداد نمایان کننده رنگ به اعداد متناسب با سطوح خاکستری (grayscale) انجام میدهد تا تصویر را به صورت سطوح خاکستری نمایش دهد.
برای استفاده از دستور ind2gray یک مثال سادهای را ارائه میدهم:
% ایجاد تصویر indexed ساده
indexed_img = [1 2 3; 4 5 6; 7 8 9];
% تبدیل تصویر indexed به grayscale
gray_img = ind2gray(indexed_img, jet(256));
% نمایش تصاویر اولیه و تبدیل شده
subplot(1, 2, 1);
imshow(indexed_img, jet(256));
title('تصویر Indexed اولیه');
subplot(1, 2, 2);
imshow(gray_img);
title('تصویر Grayscale تبدیل شده');
این کد یک تصویر indexed سه در سه ایجاد میکند و با استفاده از دستور ind2gray این تصویر را به حالت grayscale تبدیل میکند. سپس تصاویر اولیه و تبدیل شده را به همراه عنوان مناسب به صورت کنار هم نمایش میدهد.
دستور imrotate:
دستور imrotate در محیط نرمافزار متلب برای چرخش تصویر به زوایای مختلف استفاده میشود. این دستور به شما امکان میدهد تا تصویر را در جهات مختلف چرخانده و پردازشهای چرخشی را روی تصویر اعمال کنید.
برای استفاده از این دستور، میتوانید به شکل زیر عمل کنید:
% خواندن یک تصویر از فایل
I = imread('peppers.png');
% چرخش تصویر به زاویه ۹۰ درجه
J = imrotate(I, 90, 'bilinear', 'crop');
% نمایش تصاویر اصلی و چرخیده شده
figure;
subplot(1, 2, 1);
imshow(I);
title('تصویر اصلی');
subplot(1, 2, 2);
imshow(J);
title('تصویر چرخیده ۹۰ درجه');
در این کد، تصویر اصلی peppers.png خوانده شده و سپس با استفاده از imrotate، تصویر به زاویه ۹۰ درجه چرخش داده میشود. در اینجا ‘bilinear’ و ‘crop’ به ترتیب بیان میکنند که از روش تقریب بیضریب برای تبدیل پیکسلها استفاده شود و تصویر چرخیده باید در ابعاد اصلی تصویر باقی بماند.
حالتهای مختلف و پارامترهای بیشتری برای این دستور قابل تنظیم میباشد که میتوانید با مطالعه مستندات رسمی متلب بیشتر با آنها آشنا شوید.
دستور ind2gray:
دستور ind2gray در محیط برنامه نویسی متلب یک عملیات تبدیل تصویر حالت تصادفی (indexed) به حالت پویا (grayscale) را انجام میدهد. تصاویر در حالت indexed معمولا از پیکسلها که با اعداد صحیح نمایان میشوند تشکیل شدهاند و هر پیکسل به یک رنگ خاص مرتبط است. این دستور تبدیل این اعداد نمایان کننده رنگ به اعداد متناسب با سطوح خاکستری (grayscale) انجام میدهد تا تصویر را به صورت سطوح خاکستری نمایش دهد.
برای استفاده از دستور ind2gray یک مثال سادهای را ارائه میدهم:
% ایجاد تصویر indexed ساده
indexed_img = [1 2 3; 4 5 6; 7 8 9];
% تبدیل تصویر indexed به grayscale
gray_img = ind2gray(indexed_img, jet(256));
% نمایش تصاویر اولیه و تبدیل شده
subplot(1, 2, 1);
imshow(indexed_img, jet(256));
title('تصویر Indexed اولیه');
subplot(1, 2, 2);
imshow(gray_img);
title('تصویر Grayscale تبدیل شده');
این کد یک تصویر indexed سه در سه ایجاد میکند و با استفاده از دستور ind2gray این تصویر را به حالت grayscale تبدیل میکند. سپس تصاویر اولیه و تبدیل شده را به همراه عنوان مناسب به صورت کنار هم نمایش میدهد.
دستور rgb2gray:
دستور rgb2gray در محیط نرمافزار متلب وظیفه تبدیل یک تصویر رنگی RGB به تصویر سطح خاکستری (grayscale) را دارد. تصویر به صورت یک ماتریس نظیره سازی شده با پیکسلهای خاکستری نمایش داده میشود. تصاویر خاکستری فقط از یک کانال رنگی برای نمایش رنگها استفاده میکنند، به همین دلیل اطلاعات رنگی آنها کمتر از تصاویر RGB است.
برای استفاده از دستور rgb2gray در متلب، ابتدا باید تصویر RGB مورد نظر خود را به صورت یک ماتریس سه بعدی (با ابعاد row x col x 3) بهعنوان ورودی به دستور داده و سپس تصویر را به شکل تصویر خاکستری تبدیل کنید.
اینجا یک مثال ساده برای استفاده از rgb2gray در متلب به شرح زیر است:
% خواندن تصویر RGB
rgbImage = imread('peppers.png');
% تبدیل تصویر به حالت سطح خاکستری
grayImage = rgb2gray(rgbImage);
% نمایش تصویر خاکستری
imshow(grayImage);
title('تصویر سطح خاکستری از تصویر RGB');
این کد یک تصویر (peppers.png) را از فایل میخواند، آن را به تصویر خاکستری تبدیل میکند و نمایش میدهد.
دستور subimage:
دستور subimage در محیط متلب برای برش تصویر (image cropping) یا استخراج بخشی از تصویر به عنوان زیرتصویر (subimage) استفاده میشود. این دستور از طریق تعیین مختصات نقاط شروع و پایان برش، به کاربر این امکان را میدهد تا بخش مورد نظر خود را از تصویر اصلی برش بزند.
در زیر یک مثال از استفاده از دستور subimage در متلب آمده است:
% خواندن تصویر
I = imread('peppers.png');
% نمایش تصویر اصلی
figure;
imshow(I);
title('تصویر اصلی');
% تعیین مختصات نقاط برش برای استخراج زیرتصویر
startRow = 50;
endRow = 200;
startCol = 100;
endCol = 300;
% برش زیرتصویر از تصویر اصلی
subImg = I(startRow:endRow, startCol:endCol);
% نمایش زیرتصویر
figure;
imshow(subImg);
title('زیرتصویر استخراج شده');
% نمایش مربعی حاشیهای دور زیرتصویر برش خورده در تصویر اصلی
figure;
imshow(I);
hold on;
rectangle('Position', [startCol, startRow, endCol-startCol, endRow-startRow], 'EdgeColor', 'r', 'LineWidth', 2);
title('محدوده زیرتصویر در تصویر اصلی');
در این مثال، ابتدا تصویر peppers.png خوانده شده و در متغیر I ذخیره میشود. سپس مختصات نقاط شروع و پایان برش تعیین شده و با استفاده از دستور subimage، زیرتصویر متناظر استخراج و در متغیر subImg ذخیره میشود. در نهایت، زیرتصویر استخراج شده به همراه محدوده آن در تصویر اصلی نمایش داده میشود.
⚠️ توجه: لطفاً پیش از اجرای کد، مطمئن شوید که تصویر peppers.png یا تصویر دلخواه خود را در کاربرگ درست ذخیره کردهاید.
دستور deconvreg:
دستور deconvreg در محیط نرمافزار متلب برای حل مسائل وظیفهای کمترین مربعات با یک محدوده معین از دورههای مشتقپذیری ویژه به کار میرود. این دستور از روشی به نام روش تصحیح سنسوال (Constrained Iterative Tikhonov Regularization – CITR) برای این امر استفاده میکند.
در این روش، دستهای از دادههای حساس یا نویز در نظر گرفته شده و محدودهای از میزان مشتقپذیری (در واحد فضای تصمیم) که میتواند تابع پاسخ منظر را نامعلوم کنند، تعیین میشود.
در ادامه یک مثال کوچک از استفاده از دستور deconvreg در متلب را برای ایجاد یک سیگنال تصادفی و اعمال فیلتراسیون بر روی آن به همراه توضیح مراحل اجرا آوردهام:
% ایجاد یک سیگنال تصادفی
n = 1024;
x = 1:n;
s = chirp(x,0,100,n/4);
% ایجاد یک پاسخ سیستم از همان سیگنال تصادفی
h = randn(n,1);
y = conv(s,h);
% اعمال نویز به سیگنال حاصل
y = y + 0.5*randn(size(y));
% حل مسئله کاهش نویز و بازیابی سیگنال اصلی با فیلتراسیون
alpha = 0.01;
s_hat = deconvreg(y, h, alpha);
figure;
plot(x,s,'b',x,s_hat,'r--');
legend('سیگنال اصلی','سیگنال تخمینی');
title('کاهش نویز و بازیابی سیگنال اصلی با فیلتراسیون');
توضیحات کد فوق:
1. یک سیگنال تصادفی s ایجاد میشود و با استفاده از آن یک پاسخ سیستم h تولید میشود.
2. سیگنال مشوش شده y بوسیله اعمال نویز به سیگنال تصادفی و پاسخ سیستم تولید میشود.
3. سیگنال y با استفاده از deconvreg و با استفاده از پاسخ سیستم h و پارامتر alpha که میزان کاهش نویز را کنترل میکند، بازیابی و به دست آوردن s_hat که تخمینی از سیگنال اصلی میباشد.
4. در نهایت، سیگنال اصلی s و تخمینی s_hat از سیگنال اصلی با استفاده از فیلتراسیون رسم شده و نتیجه به صورت یک نمودار نشان داده شده است.
دستور dicomread:
دستور dicomread در محیط نرمافزار متلب برای خواندن تصاویر پزشکی در فرمت DICOM (Digital Imaging and Communications in Medicine) استفاده میشود. فرمت DICOM یک استاندارد صنعتی برای ذخیرهسازی، انتقال و مشاهده تصاویر پزشکی است.
این دستور از تصاویر DICOM استخراج میکند و به شما امکان میدهد تا اطلاعات مربوط به تصویر از جمله تصویر نمایش داده شده و اطلاعات فنی مرتبط با آن را در متلب بارگذاری کنید.
در زیر یک مثال از استفاده از دستور dicomread در متلب به همراه توضیح آن آمده است:
% خواندن تصویر DICOM
info = dicominfo('example.dcm'); % اطلاعات تصویر DICOM را بارگذاری میکند
image = dicomread('example.dcm'); % تصویر DICOM را بارگذاری میکند
% نمایش تصویر
imshow(image, []); % نمایش تصویر با استفاده از تابع imshow
title('DICOM Image'); % اضافه کردن عنوان به تصویر
در این کد، ابتدا با استفاده از dicominfo اطلاعات فنی مربوط به تصویر DICOM (مانند ابعاد، پارامترهای فنی، تاریخچه تصویر و …) بارگیری میشود. سپس با استفاده از dicomread، تصویر DICOM خوانده شده و در متغیر image ذخیره میشود. در نهایت تصویر با تابع imshow نمایش داده میشود.
همچنین میتوانید از اطلاعات بارگذاری شده با dicominfo برای دسترسی به اطلاعات فنی بیشتر استفاده کنید و از پارامترهای مختلف تصویر DICOM مانند بیتعمق و … استفاده نمایید.
دستور im2double:
دستور im2double در محیط نرمافزار متلب از فایلهای تصویری با فرمتهای مختلف (مانند JPEG، PNG و …) به تصویر با فرمت double تبدیل میکند. تصویر با فرمت double، تصویری است که مقادیر رنگی پیکسلهای آن در بازه 0 تا 1 قرار دارند که 0 برای رنگ تیره و 1 برای رنگ روشن به ازای هر کانال رنگی است.
این دستور مهم است زیرا در اغلب الگوریتمهای پردازش تصویر، نیاز به تصاویر با فرمت double برای انجام محاسبات دقیق و پرسرعت داریم.
مثال:
برای نمونه، یک تصویر با فرمت uint8 را بخوانیم، آن را به فرمت double تبدیل کنیم و این تبدیل را نمایش دهیم.
% خواندن تصویر
img_uint8 = imread('peppers.png');
% تبدیل تصویر به double
img_double = im2double(img_uint8);
% نمایش تصاویر
subplot(1, 2, 1);
imshow(img_uint8);
title('تصویر اول (uint8)');
subplot(1, 2, 2);
imshow(img_double);
title('تصویر دوم (double)');
این کد، یک تصویر با فرمت uint8 به عنوان ورودی گرفته و آن را به فرمت double تبدیل میکند. سپس دو تصویر را به کمک توابع imshow نمایش میدهد؛ یکی از تصویر اصلی با فرمت uint8 و دیگری از تصویر تبدیل شده به double.
دستور im2single:
دستور im2single در محیط نرم افزاری متلب برای تبدیل یک تصویر به یک ماتریس از نوع single که در آن هر عنصر ماتریس یک مقدار از دامنه single باشد، استفاده میشود. استفاده از این دستور میتواند در پردازش تصاویر و محاسبات عددی موثر باشد.
در زیر یک مثال ساده از استفاده از دستور im2single در متلب آمده است:
% خواندن تصویر
img = imread('peppers.png');
% تبدیل تصویر به ماتریس single
img_single = im2single(img);
% نمایش تصویر اولیه
subplot(1, 2, 1);
imshow(img);
title('تصویر اصلی');
% نمایش تصویر تبدیل شده به ماتریس single
subplot(1, 2, 2);
imshow(img_single);
title('تصویر تبدیل شده به ماتریس single');
در این کد، ابتدا یک تصویر به نام peppers.png خوانده شده و سپس با استفاده از دستور im2single تصویر به یک ماتریس single تبدیل شده و دو نمایش کنار هم از تصویر اصلی و تصویر تبدیل شده ایجاد شده است.
از آنجایی که im2single تصاویر را به ماتریس single تبدیل میکند، ممکن است رنگها یا دیتاهای تصویر تغییر کند.این موضوع باید در نظر گرفته شود زیرا ممکن است تفاوتهایی در تصویر تبدیلشده مشاهده شود.
دستور im2uint16:
دستور im2uint16 در محیط نرمافزار متلب برای تبدیل تصویر ورودی به فرمت unsigned 16-bit integer (uint16) استفاده میشود. این دستور معمولا برای تبدیل تصاویر با فرمتهای دادهای مختلف مانند تصاویر grayscale یا RGB به فرمت uint16 استفاده میشود.
برای مثال، فرض کنید میخواهید یک تصویر grayscale را به فرمت uint16 تبدیل کنید. ابتدا تصویر مورد نظر را بخوانید و سپس با استفاده از دستور “im2uint16” آن را به فرمت uint16 تبدیل کنید.
در ادامه یک کد متلب به عنوان مثال برای توضیح این موضوع آوردهام:
% خواندن تصویر ورودی به صورت grayscale
input_image = imread('input_image.png');
% تبدیل تصویر به فرمت uint16
output_image_uint16 = im2uint16(input_image);
% نمایش تصویر اول و دوم
subplot(1,2,1), imshow(input_image), title('تصویر ورودی');
subplot(1,2,2), imshow(output_image_uint16, []), title('تصویر خروجی uint16');
ین کد ابتدا تصویر grayscale ورودی را میخواند، سپس این تصویر را با استفاده از دستور “im2uint16” به فرمت uint16 تبدیل میکند و در نهایت تصاویر اصلی و تبدیلشده را به همراه عنوانهایی که بر روی آنها قرار میدهد، نمایش میدهد.
دستور imnlmfilt:
در ادامه یک مثال ساده از استفاده از دستور imnlmfilt در Matlab را برای یک تصویر به همراه توضیح آن میآورم:
% خواندن یک تصویر
img = imread('cameraman.tif');
% اعمال فیلتر میانه نویز شنوایی با دستور imnlmfilt
filtered_img = imnlmfilt(img);
% نمایش تصویر اصلی و تصویر پس از اعمال فیلتر میانه
figure;
subplot(1,2,1);
imshow(img);
title('تصویر اصلی');
subplot(1,2,2);
imshow(filtered_img);
title('تصویر پس از اعمال فیلتر میانه نویز شنوایی');
در این کد، ابتدا یک تصویر با نام ‘cameraman.tif’ خوانده میشود. سپس با استفاده از دستور imnlmfilt فیلتر میانه نویز شنوایی بر روی تصویر اعمال میشود و تصویر پس از اعمال فیلتر در متغیر filtered_img ذخیره میشود. در نهایت، تصویر اصلی و تصویر پس از اعمال فیلتر میانه به همراه عنوانهای مناسب نمایش داده میشوند.
این فیلتر غالباً برای حذف نویز در تصاویر پر استفاده است و بهبود وضوح و کیفیت تصویر را ارائه میدهد.
دستور ر grid2image:
در زیر یک مثال ساده از استفاده از دستور grid2image در MATLAB آمده است:
% تعریف دادههای شبکهای (مثلاً یک تصویر سیاه و سفید)
data = rand(100, 100); % تولید ماتریس تصادفی 100x100
% تبدیل دادههای شبکهای به تصویر
image_data = grid2image(data);
% نمایش تصویر حاصل
imshow(image_data);
title('تصویر تبدیل شده از دادههای شبکهای');
در کد بالا، ابتدا یک ماتریس تصادفی 100×100 تولید شده و سپس این ماتریس به توابع grid2image پاس داده شده است. در نهایت، تصویر حاصل از تبدیل دادههای شبکهای به تصویر با استفاده از تابع imshow نمایش داده شده است.
دستور delete:
A = [1 2 3 4 5];
A(3) = []; % حذف عنصر سوم از آرایه A
در این مثال، آرایه A شامل اعداد ۱ تا ۵ میباشد. عنصر سوم (عدد ۳) حذف میشود و آرایه به شکل زیر تغییر میکند:
A = [1 2 4 5];
همچنین میتوانید بیش از یک عنصر را هم حذف کنید. به عنوان مثال:
B = [10 20 30 40 50];
B([2 4]) = []; % حذف عناصر دوم و چهارم از آرایه B
در این مثال، عناصر با اندیس ۲ و ۴ (اعداد ۲۰ و ۴۰) از آرایه B حذف میشوند و آرایه به شکل زیر تغییر میکند:
B = [10 30 50];
در نتیجه، دستور delete در متلب برای حذف یک یا چند عنصر از یک آرایه یا ماتریس کاربرد دارد.
دستور im2col:
دستور im2col در محیط متلب برای تبدیل یک تصویر به یک ماتریس سه بعدی (یا همان tensor) کاربرد دارد. این دستور به کاربر این امکان را میدهد تا دادهها را به صورت مناسبی برای پردازشهای ماتریسی (مانند پردازشهای بینایی ماشین) آماده کند.
هدف اصلی این تبدیل از یک تصویر به ماتریس، افزایش سرعت پردازش داده در الگوریتمهای پردازش تصویر و همچنین امکان استفاده از عملیات ماتریسی بر روی دادههای ورودی تصویر به صورت موازی.
حال یک مثال کوتاه را برای شما تهیه میکنم:
% تصویر ورودی
image = rand(4, 4, 3);
% اندازه بلوک (برای تعریف اندازه بلوک، میتوانید از دستور block_size = [m, n]; استفاده کنید)
block_size = [2, 2];
% اعمال دستور im2col بر روی تصویر و اندازه بلوک
output_matrix = im2col(image, block_size, 'distinct');
% چاپ ماتریس خروجی
disp(output_matrix);
توضیح: در این کد، یک تصویر سه بعدی با ابعاد 4x4x3 ایجاد شده و سپس با استفاده از دستور im2col به یک ماتریس دو بعدی تبدیل میشود. بلوکهای 2×2 انتخاب شده و با استفاده از پارامتر ‘distinct’، بلوکهای مختلف از هم جدا و بدون همپوشانی در ماتریس خروجی قرار میگیرند.
دستور imcrop:
دستور imcrop در نرم افزار MATLAB برای برش تصویر به ابعاد دلخواه استفاده میشود. با استفاده از این دستور میتوانید قسمت مورد نظری از یک تصویر را برش داده و آن را به عنوان یک تصویر جدید ذخیره کنید.
در زیر یک مثال ساده از استفاده از دستور imcrop در MATLAB آورده شده است. در این مثال یک تصویر به نام peppers.png را بارگذاری کرده و سپس یک بخش مشخص از تصویر را برش میدهیم و آن را نمایش میدهیم:
% بارگذاری تصویر
I = imread('peppers.png');
% نمایش تصویر اصلی
subplot(1, 2, 1);
imshow(I);
title('تصویر اصلی');
% انتخاب یک مستطیل برای برش تصویر
rect = [100, 100, 200, 200]; % [x, y, width, height]
% برش تصویر براساس مستطیل مشخص شده
J = imcrop(I, rect);
% نمایش بخش بریده شده از تصویر
subplot(1, 2, 2);
imshow(J);
title('تصویر برش خورده');
در این مثال، ابتدا تصویر peppers.png بارگذاری شده و سپس مستطیلی با مختصات و اندازه مشخص شده (100، 100، 200، 200) انتخاب شده است. سپس با استفاده از دستور imcrop، بخش تصویر انتخاب شده برش داده شده و در J ذخیره میشود. در نهایت، تصویر اصلی و تصویر برش خورده نمایش داده میشوند.
دستور imfill:
دستور imfill در محیط برنامه نویسی متلب برای پرکردن سوراخها یا مناطق مرزی تصویر با رنگ یا مقدار مشخصی به کار میرود. این دستور به صورت خودکار عملیات پرکردن پیکسلهای خالی یا ناقص در تصویر را انجام میدهد و به همین دلیل برای پردازش تصاویر بسیار کاربردی است.
برای استفاده از دستور imfill، ابتدا باید تصویر مورد نظر خود را در متلب بخوانید و سپس از این دستور برای پرکردن مناطق مورد نظر استفاده کنید.
در ادامه یک مثال از استفاده از دستور imfill در متلب را برای پرکردن سوراخهای تصویر ارائه میدهم:
% خواندن تصویر
I = imread('cameraman.tif');
% تعیین منطقهای برای پرکردن
filledI = imfill(I,'holes');
% نمایش تصویر اصلی و تصویر پر شده
subplot(1,2,1), imshow(I), title('تصویر اصلی');
subplot(1,2,2), imshow(filledI), title('تصویر پر شده');
در این کد، ابتدا تصویر cameraman.tif خوانده شده و سپس با استفاده از دستور imfill با پارامتر ‘holes’، سوراخهای تصویر پر شده و نتیجه در filledI ذخیره میشود. در نهایت، تصویر اصلی و تصویر پر شده به صورت کنار هم نمایش داده میشوند.
دستور imfuse:
دستور imfuse در نرمافزار MATLAB برای ترکیب دو تصویر با استفاده از یکی از روشهای تصویری مختلف مانند ترکیب وزندار یا ترکیب نوری استفاده میشود. این دستور به شما امکان میدهد تصاویر را ترکیب کرده و نتیجه را به صورت یک تصویر جدید نشان دهید.
یک مثال ساده از استفاده از imfuse برای ترکیب دو تصویر را میتوان به صورت زیر نوشت:
% خواندن دو تصویر
img1 = imread('image1.jpg');
img2 = imread('image2.jpg');
% ترکیب دو تصویر با استفاده از imfuse
fused_img = imfuse(img1, img2, 'blend','Scaling','joint');
% نمایش تصاویر اصلی و تصویر ترکیبی
subplot(1, 3, 1); imshow(img1); title('Image 1');
subplot(1, 3, 2); imshow(img2); title('Image 2');
subplot(1, 3, 3); imshow(fused_img); title('Fused Image');
در این کد، ابتدا دو تصویر موجود با نام image1.jpg و image2.jpg خوانده شده و سپس با استفاده از imfuse، این دو تصویر ترکیب شده و تصویر ترکیبی با نام fused_img ایجاد میشود. در نهایت، سه تصویر (تصویر اول، تصویر دوم و تصویر ترکیبی) در یک figure نمایش داده میشود.
میتوانید پارامترهای مختلفی مانند نوع ترکیب (blend یا falsecolor)، روش تغییر سایز (Scaling) و نحوه ترکیب را در imfuse تغییر دهید تا نحوه ترکیب تصاویر تغییر کند.
دستور imhist:
دستور imhist در محیط نرمافزار متلب برای نمایش histogram یک تصویر استفاده میشود. Histogram یک نمودار است که توزیع فراوانی مقادیر پیکسلهای مختلف در تصویر را نمایش میدهد. این نمودار به تعداد پیکسلهایی که مقدارشان در بازههای مختلف است اشاره میکند. از این تحلیل میتوان برای درک بهتر توزیع رنگی در تصاویر استفاده کرد.
به عنوان مثال، فرض کنید میخواهید histogram تصویر grayscale زیر را تحلیل کنید:
% خواندن تصویر
img = imread('cameraman.tif');
% نمایش تصویر
imshow(img);
% رسم histogram تصویر
imhist(img);
در این کد، ابتدا تصویر grayscale به نام img خوانده شده و نمایش داده میشود. سپس با استفاده از دستور imhist(img) histogram تصویر نمایش داده میشود. این histogram نمایانگر تعداد پیکسلهایی است که مقدارشان در بازههای مختلف و کمینه تا بیشینه رنگی تصویر قرار دارد.
از این طریق میتوانید با استفاده از دستور imhist تحلیل histogram تصویرهای خود را در محیط متلب انجام دهید.
دستور imopen:
دستورimopen در محیط برنامه نویسی متلب برای اعمال عملیات بازکردن تصویر به کار میرود. این دستور برای باز کردن حواف و جزئیات کوچکتر در تصویر استفاده میشود. این عملیات به نحوی انجام میشود که در نتیجه تضحیکهای ریزتر حذف شده و تصویر نهایی از حاشیههای واقعی تشکیل شده است. این عملیات معمولاً برای بهبود شکلها و مرزهای شیءها در تصویر استفاده میشود.
برای استفاده ازimopen در متلب، میتوانید از دستور زیر استفاده کنید:
I = imread('cameraman.tif'); % تصویر ورودی
se = strel('disk', 15); % ایجاد عنصر ساختاری دیسکی با شعاع 15
J = imopen(I, se); % اعمال عمل بازکردن بر روی تصویر
figure;
subplot(1, 2, 1); imshow(I); title('تصویر ورودی');
subplot(1, 2, 2); imshow(J); title('تصویر خروجی پس از بازکردن');
در این کد، ابتدا یک تصویر ورودی با نام cameraman.tif خوانده میشود. سپس یک عنصر ساختاری دیسکی به نام se با شعاع 15 ایجاد میشود. در نهایت، دستور imopen(I, se) بر روی تصویر ورودی اعمال میشود و تصویر خروجی پس از بازکردن در J ذخیره شده و نمایش داده میشود.
این عملیات باعث انعطافپذیری و بهبود مرزهای شیءها در تصاویر شده و در بسیاری از موارد برای پیشپردازش تصاویر مفید است.

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