نوشته‌ها

ناحیه بندی تصاویر با استفاده از ماشین بردار پشتیبان (svm)

در این ویدیو آموزش میدهیم که به چه صورت میتوان  از svm برای ناحیه بندی تصاویر استفاده کرد.

 

  • کد و فایل pdf مربوط به این بخش در کانال تلگراممون قرار داده شده است، میتوانید به صورت رایگان از کانال دانلود کنید.
  • دوستان علاقه مند به برنامه نویسی متلب، پردازش تصویر، پردازش سیگنال، شبکه های عصبی، شناسایی آماری الگو (پترن ) به کانال تلگراممون مراجعه کنند.
  •  تمامی ویدیوها در کانال به صورت رایگان قرار داده می شوند و هدف اشتراک اطلاعات برای دوستانی است که فرصت شرکت در دوره های مهندسی پزشکی را ندارند.

 


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

 لینک کانال  

سوالات و دیدگاه خود را درباره ی این پست با ما درمیان بگذارید

 بهبود تصویر با روش های پایه

 تبدیل تصویر خاکستری به باینری با استفاده از روش
ترکیب توابع مورفولوژی با تابع imadjust و im2bw

 

 

مسئله: درتصویر زیر هدف این است که دانه های برنج را از پس زمینه جدا کنیم. (در واقع قصد داریم تصویر را به باینری تبدیل کنیم)

1

 

استراتژی اول:

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

لذابرای برای تصویر فوق می توانیم از این تابع استفاده کنیم.

 

BW=im2bw(img,level);

Img: تصویر ورودی

Level: سطح آستانه

BW: تصویر خروجی باینری

برای تبدیل تصویر به باینری نیاز است که یک آستانه ای(level) تعریف کنیم تا تابع  im2bw، سطوح شدت روشنایی­ بیشتر از آستانه را به سفید و سطوح شدت روشنایی­ کمتر از آستانه را به سیاه تبدیل کند.

لذا تعیین سطح آستانه نقش تعیین کننده ای در نتیجه تبدیل خواهد داشت!

راه حل: برای تعیین سطح آستانه کلی، در متلب تابعی به نام graythresh است که با استفاده از روش اتسو یک آستانه global برای تصویر تعیین می کند.

level = graythresh(I);

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

کد متلب:

ابتدا تصویر را با استفاده از imread  می خوانیم.

و سپس به تصویر باینری تبدیل می کنیم.

clc,

clear,

close all,

I = imread(‘rice.png’);

imshow(I)

level = graythresh(I);

bw = im2bw(I,level);

figure

imshow(bw)

 

تصویر باینری حاصل:

1

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

توجه کنید که در قسمتهای بالا و مرکز تصویر تبدیل به خوبی انجام شده است ولی در قسمتهای پایین تابع تبدیل خوب عمل نکرده است!

اگر به تصویر اصلی نگاه کنیم متوجه می شویم که پس زمنیه تصویر در قسمتهای بالایی و مرکز تصویر روشن تر از سمت پایینی است!!

 

استراتژی ۲:

قبل از تبدیل تصویر، باید پیش پردازشی روی تصویر انجام دهیم تا تصویر شدت روشنایی مطلوبی برای تبدیل به باینری را داشته باشد.

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

یادمان باشد که ما از آستانه کلی استفاده کرده ایم و این آستانه در همه جا یکسان عمل می کند و این باعث می شود که قسمتهای پایینی به شکل مطلوبی به باینری تبدیل نشوند!

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

از روشهای دیگه می توان تعیین سطح آستانه بصورت محلی(local) را ذکر کرد. اگر تبدیلات بصورت محلی انجام شوند، تصویر به خوبی به باینری تبدیل خواهد شد.

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

کد متلب:

ابتدا پس زمینه تصویر را با استفاده از توابع مورفولوژی تقریب می زنیم و سپس از تصویر اصلی کم می کنیم.

str=strel(‘disk’,15);

background=imerode(I,str);

1

I2 = I – background;

imshow(I2)

تصویر خروجی:

1

با اینکه پس زمینه تصویر یکنواخت شد ولی تصویر شدت روشنایی مناسبی ندارد.

لذا با استفاده از تابع imadjust شدت روشنایی تصویر را بهبود می دهیم.

  • قبلا نحوه استفاده از این تابع توضیح داده شده است.

کد متلب برا بهبود تصویر:

I3 = imadjust(I2);

figure

imshow(I3);

تصویر خروجی:

1

حال تابع im2bw را به تصویر اعمال می کنیم.

تصویر خروجی:

1

تصویر به خوبی به باینری تبدیل شده است.

ولی اگر دقت کنید یک دو تا نقطه سفید کوچک نیز در تصویر مشاهده می شود!

باید این نقاط حذف شوند تا در پردازش های بعدی در نیتجه تاثیری نداشته باشند>

در تولباکس توابع مورفولوژی متلب، تابعی به نام bwareaopen  برای حذف objectهای کوچک باینری وجود دارد.

نحوه استفاده :

BW2 = bwareaopen(BW,P);

Bw: تصویر باینری ورودی

BW2: تصویر باینری خروجی

P: تعداد پیکسل

این تابع تمام objectهایی که تعداد پیکسل کمتری از p داشته باشند را حذف می کند.

P را ما ۱۰ در نظر می گیریم.

کد متلب:

bw = bwareaopen(bw, 10);

figure

imshow(bw)

تصویر باینری نهایی:

1

همانطور که ملاحظه می کنید نقاط کوچک در تصویر قبلی حذف شدند.

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

موفق باشید…

محمد نوری زاده چرلو


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

 لینک کانال  

سوالات و دیدگاه خود را درباره ی این پست با ما درمیان بگذارید