در بخش های اول و دوم از مبحث پردازش تصویر در متلب ، با تعدادی از توابع و دستورات کار با تصاویر در این نرم افزار آشنا شدیم . در ادامه این مبحث می خواهیم با توابع پیشرفته تری آشنا شویم و جنبه های مختلف آن ها را با هم بررسی نماییم :
برای تشخیص و جداسازی پس زمینه یک تصویر در متلب ، از عملگر مورفولوژی باز کردن ، برای حذف عناصر موجود در یک تصویر استفاده می کنیم . برای روشن شدن موضوع به تصویر زیر نگاه کنید :
ما می خواهیم عناصر سفید رنگ را از تصویر جدا سازی نماییم تا تنها پس زمینه باقی بماند . برای این منظور از دستور زیر استفاده می کنیم :
>> b= imread ('elements.png'); >> background = imopen(b,strel('disk',35)); >> imshow(background)
اما تفسیر کدهای بالا :
در ابتدا یک تصویر را از دایرکتوری خواندیم و در متغیر b ذخیره کردیم . که نحوه خواندن و ذخیره سازی تصاویر را با جزئیات در قسمت های قبلی توضیح دادیم .
در خط بعدی از دستور imopen استفاده کردیم که آرگومان اول همان b است و آرگومان دوم با استفاده از دستور strel یک ماسک به شکل دایره ای (disk) می سازد که قطر آن 35 پیکسل است . هر عنصر از شکل که این ماسک روی آن قرار می گیرد ، اگر کل ماسک دایره ای را نپوشاند (یعنی کمتر از مقدار 35 پیکسل باشد) از تصویر حذف خواهد شد . به این ترتیب تمام عناصر سفیدی که در تصویر اصلی مشاهده کردیم با تقریب خوبی از بین می روند . میتوانید کد بالا را با ابعاد ماسک مختلف (در اینجا 35) و بر روی تصاویر مشابه دیگر آزمایش کنید و خروجی ها را مشاهده نمایید . اما خروجی کد بالا :
حال با استفاده از کدی که در قسمت قبلی فرا گرفتیم میتوانیم پس زمینه را از تصویر اصلی تفریق نماییم تا پس زمینه حذف شود .
در قسمت قبلی گفتیم که یکی از اقسام تصویر در نرم افزار متلب ، حالت باینری است که در حالت به هر یک از پیکسل های صفحه، فقط 1 یا 0 اختصاص میگیرد ( به جای کد RGB) برای تبدیل یک تصویر از استاندارد خاکستری به باینری باید از کد im2bw استفاده نماییم. در واقع این تابع یک مقدار آستانه برای روشنایی هر پیکسل از ما دریافت می کند اگر روشنایی پیکسل از مقدار آستانه کمتر بود آن را با عدد 0 یا رنگ سیاه نشان می دهد و اگر از مقدار آستانه بیشتر بود آن پیکسل را با عدد سفید یا یک نشان می دهد . برای اینکه مقدار آستانه مناسبی را هم بتوانیم انتخاب نماییم ، متلب تابع graythresh را به ما معرفی کرده و در اختیار ما قرار داده است . به مثال زیر توجه نمایید :
>> threshold = graythresh(b); >> binery = im2bw (b,threshold); >> imshow (binery)
خروجی به صورت زیر است :
از مزایای استفاده از تصویر باینری ، افزایش سرعت پردازش است .
یک تکنیک ساده برای حذف نویز از تصویر، استفاده از همان ماسک ایجاد شده با دستور strel است که در مثال قبلی از آن استفاده کردیم . در واقع نویز، نقاطی هسند که ابعاد بسیار ریزی دارند ، پس کافیست ابعاد دایره ماسک مورد نطر را بسیار کوچک تر از مثال قبلی در نظر بگیریم به مثال زیر و نتیجه آن دقت کنید :
>> background = imopen(b,strel('disk',5)); >> imshow(background) >> figure,imshow(b)
تصویر سمت چپ ، حالت از بین رفتن نویز را نشان می دهد که می بینیم قسمت های نویزی با اعمال این کد بر روی عکس تا حد زیادی از بین رفته اند.
در این قسمت از آموزش نیز با بخشی از توابع پردازش تصویر در متلب آشنا شدیم .