نوشته‌ها

سفید کردن (whitening)

سفید کردن (whitening)

تبدیل whitening یا بیضی کردن یک تبدیل خطی است که یک بردار با متغیرهای تصادفی با ماتریس کواریانس شناخته شده به مجموعه متغیرهای جدید تبدیل می کند که ماتریس کواریانس داده جدید ماتریس همانی است، به این معنی که داده جدید غیرهمبسته(uncorrelated) هست.
ویژگی های یک داده ممکن است به هم وابسته باشند یا به اصطلاح دیگر داده افزونگی داشته باشد که باعث کاهش دقت شناسایی در مسائل کلاسبندی می شود. با استفاده از تبدیل whitening داده را می توان uncorrelated کرد.

اصطلاح whitening به این خاطر گفته می شود که داده را به داده ای با نویز سفید تبدیل می کند.

  • نویز سفید چیست؟ 

    در حوزه پردازش سیگنال، نویز سفید یک متغیر تصادفی است که در فرکانسهای مختلف چگالی یکسانی دارد و این باعث می‌شود که چگالی توان طیفی ثابتی داشته باشد.

 

 

پیاده سازی در متلب

 

 

 

نتایج

                                                                          تصویر با نویز گوسی سفید

                                                                                 سیگنال با نویز گوسی سفید

 

نتیجه ی سفید کردن داده های دوبعدی قبل و بعد از سفیدکردن

 

                                                       داده دو بعدی قبل از whitening

 

                                                     داده دو بعدی بعد از whitening

 

 

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

لینک کانال

 

 

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

 

 

 

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

 تبدیل تصویر خاکستری به باینری با استفاده از روش
ترکیب توابع مورفولوژی با تابع 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

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

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

موفق باشید…

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


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

 لینک کانال  

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