پردازش تصویر توسط Matlab
پردازش تصویر یکی از توانایی هایی است که در MATLAB گنجانده شده است، در این مقاله می توانید به سادگی با آن آشنا شوید.
اگر حوصلة موضوعات ابتدایی کار ندارید میتوانید از شمارة ۴ شروع به خواندن کنید. اما توصیه عملی این است که از اول شروع کنید چون این نوشته یک راهنمای قدم به قدم است. پس بهتر است پله ها را ۴ تا یکی نکنیم.
گام اول – آشنایی با Matlab و Image Processing Toolbox
همه با Matlab آشنا هستیم و حداقل میدانیم که چیز بدردخوری است. پس از صحبت دربارة این میگذریم. اما Image Processing Toolbox از امکانات جنبی این برنامه است. برای اینکه مطمئن شوید که این Toolbox روی Matlab شما نصب شده است؛ دستور ver را اجرا کنید. این دستور لیست هرچه که از Matlab روی رایانه شما نصب شده است را ارائه میدهد. بین Matlab 5.x و Matlab 6 برای کار پردازش تصویر تفاوت چندانی وجود ندارد اما مثل همیشه نسخة جدیدتر امکانات بیشتری دارد که البته فعلا با آنها کاری نداریم.
دستورهای معرفی شده: ver
گام دوم – چگونه یک فایل تصویر را در Matlab باز کنیم
Matlab میتواند فایلهای گرافیکی با فرمتهای JPEG, TIFF, GIF, BMP, PNG, HDF, PCX, XWD, ICO, CUR را به عنوان فایل گرافیکی بخواند. مثلاً برای وارد کردن تصویری به نام cameraman.tif به فضای Matlab کافی است از دستور imread استفاده کنیم:
MyImage=imread(‘cameraman.tif’,'tif’);
توجه داشته باشید که فایلی که دستور خواندنش را میدهید باید برای برنامه قابل دسترس باشد. یعنی یا باید در مسیر (Path) Matlab باشد یا اینکه در پروندهای (folder) قرار داشته باشد که در حال حاضر برنامه به آن دسترسی دارد. برای اینکه بدانید که Matlab برای پیدا کردن فایلی که دستورش را دادید کجا را خواهد گشت اینکارها را بکنید: از دستور path برای اینکه بدانید کدام پروندهها جزء مسیر پیشفرض Matlab است و از دستور dir برای اینکه بدانید که Current Directory چیست؛ استفاده کنید.
خب تا اینجا یک فایل تصویر را در محیط Matlab وارد کردهایم. همانطور که میدانیم یک تصویر دیجیتال بر روی کامپیوتر در قالب یک ماتریس ذخیره میشود. پس MyImage مثل همه متغیرهای Matlab یک ماتریس است. برای اینکه بدانیم فایل خوانده شده از چه فرمتی است(سیاه سفید، یا Gray Scale یا رنگی ) مینویسیم:
imfinfo(‘cameraman.tif’)
این دستور را اجرا کنید و ببینید چه مینویسد… اما اگر بخواهید بدانید که ماتریس ذخیره شدة MyImage از چه نوعی است کافی است بنویسد: whos و لیست متغییرهای مقیم شده در حافظه و نوع و اندازه آنها را ببینید.
دستورهای معرفی شده: imread, imfinfo, whos, path, dir
گام سوم – چطور تصویر را ببینیم؟
خب حالا میخواهیم تصویر را که در یک ماتریس ذخیره شده است را ببنیم. بنویسید:
imshow(MyImage)
جالب است نه؟ فکر میکنید اگر بخواهیم دوتا تصویر را با هم ببنیم باید چکار کنیم؟ این را امتحان کنید:
YourImage=imread(‘tire.tif’,'tif’);
figure
subplot(1,2,1), imshow(MyImage), title(‘MyImage’)
subplot(1,2,2), imshow(YourImage), title(‘YourImage’)
با اجرای این دستورات به آن چیزی که اتفاق افتاد توجه کنید؛ حتما متوجه میشود که هرکدام از این دستورات چکار میکنند.
دستورهای معرفی شده: imshow, subplot, title, figure
گام چهارم – تصویر را خواندیم حالا چکار کنیم؟
کمی نویز دستوپا میکنیم و به تصویر اضافه میکنیم که بعداً راهی پیدا کنیم حذفش کنیم:
imagen=imnoise(MyImage,’salt & pepper’);imshow(imagen)
دستور imnoise نویزهای مختلفی را در اختیار ما میگذارد که به تصویر اضافه کنیم. افزودن نویز برای شبیه سازی اشکالاتی است که ممکن است به هر سیستم پردازش تصویر وارد شود. اینجا فرض کردهایم که نویز «نمک و فلفل» به تصویر اضافه شده است! اسمش عجیب غریب است؟ این نویز را روی تصویر تلویزیونتان اگر آنتن درست تنظیم نباشد حتما دیدهاید. میدانیم که وقتی نویز داریم با یک فیلتر حذفش میکنیم. فیلتری که انتخاب میکنیم باید مناسب نویزی باشید که روی تصویر سوار شده است. بهترین فیلتر برای نویز «نمک و فلفل» فیلتر میانه است که در Matlab با دستور Medfilt2 قابل استفاده است:
figureimagefilt=medfilt2(imagen);
imshow(imagefilt)
برای دستگرمی هم که شده سعی کنید تصویر نویز و تصویر فیلتر شده را در یک صفحة واحد نمایش دهید.
دوباره به تصویر MyImage نگاه کنید. فرض کنید میخواهیم مارک دوربین درون عکس را از روی شکل آن تشخیص دهیم. بازهم فرض کنید به روشی که بعدا بیشتر راجع بهش صحبت میکنیم فهمیدیم که دوربین درون این مختصات از تصویر قرار دارد. بین سطر ۵۹ تا ۸۴ و ستون ۱۳۱ تا ۱۷۰٫ پس از همین مختصات تصویر را با دستور imcrop میبریم.
imagecrop=Imcrop(MyImage,[ 131 59 39 25]);
در این دستور مختصات برش را اینطور مینویسم ] ارتفاع ,پهنا ,حداقل y ,حداقل x [. این قسمت بریده شده را نمایش بدهید و ببینید. در مرحله بعد سیستم تشخیصدهندة نوع دوربین احتیاج دارد که اندازه تصویر مقدار خاصی مثلاً ۱۲۰x100 باشد. پس باید اندازه تصویر برش داده شده را تغییر دهیم:
imagesz=imresize(imagecrop,[120 100]);
تصویر جدید را نگاه کنید. میبینید که به اندازه جدید در آمده است.
دستورهای معرفی شده: imnoise, medfilt2, imcrop, imresize

