آموزش بزرگ کردن تصویر در متلب — افزایش تعداد مگاپیکسل تصویر در متلب

نرم افزارهای بسیاری وجود دارند که می‌توانند بزرگ کردن تصویر را انجام دهند. در پشت صحنه تمام این برنامه‌ها، الگوریتم‌های پردازش تصویر درون‌یابی (Interpolation) بسیاری وجود دارند که امکان بزرگ کردن تصویر را تقریباً‌ به شکلی بی‌عیب و نقص فراهم می‌سازند. برخی از این الگوریتم‌ها، به صورت درون‌یابی دو خطی یا دو سویه (Bilinear)، برخی «دو مکعبی» (Bicubic) و برخی دیگر هم مثل «اسپلاین» (Spline) بسیار پیشرفته‌تر هستند. در این مقاله به آموزش بزرگ کردن تصویر در برنامه نویسی متلب یا همان تغییر اندازه تصویر در برنامه نویسی متلب با استفاده از این روش‌های مختلف پرداخته شده است.

الگوریتم های تغییر اندازه تصویر چگونه کار می‌کنند؟

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

آموزش بزرگ کردن تصویر در متلب — افزایش تعداد مگاپیکسل تصویر در متلب

آموزش بزرگ کردن تصویر در متلب

برای بزرگ کردن تصویر در متلب از جعبه ابزار پردازش تصویر متلب (Image Processing Toolbox) استفاده می‌شود. این جعبه ابزار، حاوی مجموعه بزرگی از توابعی است که با استفاده از آن‌ها می‌توان قابلیت‌های عملکردی مختلفی را در ارتباط با پردازش تصویر در متلب پیاده‌سازی کرد. عمل بزرگ کردن تصویر در متلب یا همان تغییر اندازه تصویر در متلب را هم می‌توان با استفاده از این مجموعه توابع جامع و کاربردی به خوبی  اجرا کرد. این عملیات در شاخه «گشتار در فضا» (دگرگونی فضایی | Spatial Transformation) از پردازش تصویر جای می‌گیرد. تابعی که این کار را در متلب انجام می‌دهد، «imresize» نام دارد و سینتکس آن به صورت زیر است:

x = imresize(a, scale)

در اینجا، scale یک عدد است که مقیاس بزرگنمایی یا کوچک‌سازی تصویر را تعیین می‌کند. مثلاً اگر مقدار scale برابر با ۰٫۵ باشد، آنگاه اندازه تصویر نصف می‌شود و در صورتی که مقدار آن ۴ باشد، بزرگنمایی ۴ برابری اتفاق می‌افتد. در واقع هر عددی کوچک‌تر از یک تصویر را کوچک می‌کند و هر عدد بزرگ‌تر از یک، منجر به بزرگنمایی تصویر خواهد شد. طبیعتاً اگر مقدار Scale یک باشد، اندازه تصویر تغییری نخواهد کرد.

تغییر اندازه تصویر در متلب با تنظیم تعداد پیکسل‌های سطر و ستون

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

x = imresize(A, [numrows numcols])

تغییر اندازه تصویر در متلب برای تصاویر Index‌ شده

نوعی سینتکس دیگر هم از تابع imresize برای انواع تصاویر Index شده مثل تصاویر گیف یا tif استفاده می‌شود. این سینتکس در ادامه قابل ملاحظه است:

[x newmap] = imresize(y, map, scale)

آموزش تعیین روش تغییر اندازه تصویر در متلب

می‌توان روش تغییر اندازه تصویر را هم با استفاده از تغییر مقدار برای Method در تابع imresize تعیین کرد:

[...] = imresize(..., method)

متُد پیش‌فرض به صورت دومکعبی (Bicubic) است. به طور کلی مقادیری که می‌توان برای method در تابع imresize استفاده کرد، شامل موارد زیر می‌شود:

  • nearest (نزدیک‌ترین همسایگی)
  • bilinear (دو سویه)
  • bicubic (دومکعبی)

جدای از متُدها، می‌توان برای مفسر/کامپایلر متلب مشخص کرد که قصد اِعمال یک عنصر ساختاری روی تصویر مورد نظر وجود دارد. برای انجام این کار باید نام آن ساختار مورد نظر را وارد کرد:

  • box: برای کرنل با شکل جعبه
  • triangle : برای کرنل مثلثی که تقریباً معادل شکل bilinear یا همان دو سویه است
  • cubic : کرنل مکعبی که مشابه دومکعبی یا bicubic است.
  • lanczos2 : برای کرنل Lanczos-2
  • lanczos3 : برای کرنل lanczos3 (نوعی کرنل پیشرفته)

آموزش تعیین پارامترهای تغییر اندازه تصویر در متلب

سینتکس تعیین پارامترها در تابع imresize به صورت زیر است:

[...] = imresize(..., parameter, value, ...)

در قالب نحوی فوق، پارامترهای زیر را می‌توان تعیین و استفاده کرد:

  • Antialiasing: مقدار پیش‌فرض این مورد به شیوه (متُد) درون‌یابی (Interpolation) انتخاب شده بستگی دارد. در صورتی که متد مربوطه به صورت درون‌یابی نزدیک‌ترین همسایگی (Nearest-Neighbor) یعنی همان nearest باشد، مقدار پیش‌فرض false خواهد بود و برای تمام دیگر متدهای درون‌یابی مقدار پیش‌فرض True است.
  • OutputSize: یک بردار دو عنصری به صورت [numrows numcols] است که اندازه تصویر خروجی را مشخص می‌کند.

مثالی برای تعیین پارامترهای تابع imresize

برای درک بهتر نحوه بزرگ کردن تصویر در متلب یا همان تغییر اندازه تصویر در متلب، در ادامه مثالی با استفاده از یک تصویر آماده در متلب آمده است:

i = imread('peppers.png','bilinear');
j = imresize(i, 5);
figure, imshow(i), figure, imshow(j)

در کدهای فوق، تصویر بزرگنمایی شده‌ peppers.png در متغیر j ذخیره می‌شود. این تصویر در مقیاس ۵ برابر بزرگنمایی شده است. این یعنی اگر این تصویر قبلاً یک مگاپیکسل بوده، اکنون ۵ مگاپیکسل است. حالا می‌توان این تصویر را ذخیره کرد و از نتیجه کار لذت برد. برای ذخیره‌سازی تصویر بزرگنمایی شده، باید از دستور زیر استفاده کرد:

imwrite(j,'newname.jpg','jpg');

به این ترتیب، می‌توان تصویر بزرگنمایی شده جدید را با نام «newname.jpg» یا هر نام دلخواه دیگری ذخیره کرد.

مثالی برای آموزش بزرگ کردن تصویر Index شده در متلب

حال در ادامه، مثالی برای تغییر اندازه یک تصویر Index شده ارائه شده است:

[x, map] = imread('xxx.tif');
[y, n_map] = imresize(x, map, 5);
imshow(y, n_map)

آخرین دستور از قطعه کد بالا تصویری را نمایش خواهد داد که ۵ برابر بزرگ‌تر از تصویر اصلی است. این گزینه به وسیله تبدیل دو سویه (Bilinear Transformation) اجرا می‌شود که به طور پیش‌فرض اعمال شده است، چرا که هیچ یک از روش‌های بزرگنمایی در کدهای فوق به طور صریح تعیین نشده‌اند.

مثالی برای آموزش بزرگ کردن تصویر در متلب با طول و عرض دلخواه

در ادامه مثالی برای تغییر اندازه به وسیله تعیین تعداد سطرها و ستون‌های ماتریس پیکسل‌های تصویر آمده است:

t = imread('peppers.png');
l = imresize(t, [64 64]);

تصویر خروجی کدهای فوق، یک تصویر ۶۴ در ۶۴ خواهد بود که به طبع اندازه آن به وسیله تبدیل دو سویه تغییر داده شده است.

مثالی برای مقایسه نتیجه هر سه تکنیک درون‌یابی برای بزرگ کردن تصویر در متلب

حالا در پایان می‌توان نتیجه هر سه تکنیک درون‌یابی برای تغییر اندازه تصویر در متلب را به وسیله کدهای زیر ملاحظه و هر یک را با دیگری مقایسه کرد:

i=imread('peppers.png')
i1 = imresize(i,0.5,’nearest’);
i2 = imresize(i,0.5,’bilinear’);
i3 = imresize(i,0.5,’bicubic’);
figure,
subplot(1,3,1), imshow(I_sm2), title(’Nearest-neighbor Interpolation’);
subplot(1,3,2), imshow(I_sm3), title(’Bilinear Interpolation’);
subplot(1,3,3), imshow(I_sm4), title(’Bicubic Interpolation’);

جمع‌بندی

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

اگر این مطلب مفید واقع شده است، استفاده از دوره‌های آموزشی و مطالب زیر نیز پیشنهاد می‌شوند:

منبع [+]

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *