تبدیل تصویر به باینری در متلب | آموزش کار با دستور im2bw

تبدیل تصویر به باینری در متلب

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

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

( در واقع قصد داریم تصویر را به باینری تبدیل کنیم )

تبدیل تصویر به باینری در متلب

استراتژی اول

در تولباکس متلب تابع 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)

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

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

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

استراتژی ۲

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

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

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

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

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

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

کد متلب:

str=strel(‘disk’,۱۵);
background=imerode(I,str);

I2 = I – background;
imshow(I2)

 

تصویر خروجی

با اینکه پس زمینه تصویر یکنواخت شد ولی تصویر شدت روشنایی مناسبی ندارد.
لذا با استفاده از تابع imadjust شدت روشنایی تصویر را بهبود می دهیم.
• قبلا نحوه استفاده از این تابع توضیح داده شده است.

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

I3 = imadjust(I2);figure
imshow(I3);


 

تصویر خروجی:

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

تصویر به خوبی به باینری تبدیل شده است.
ولی اگر دقت کنید یک دو تا نقطه سفید کوچک نیز در تصویر مشاهده می شود!
باید این نقاط حذف شوند تا در پردازش های بعدی در نیتجه تاثیری نداشته باشند
در تولباکس توابع مورفولوژی متلب، تابعی به نام bwareaopen برای حذفobjectهای کوچک باینری وجود دارد.

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

BW2 = bwareaopen(BW,P);

Bw: تصویر باینری ورودی
BW2: تصویر باینری خروجی
P: تعداد پیکسل
این تابع تمام objectهایی که تعداد پیکسل کمتری از p داشته باشند را حذف می کند.P را ما ۱۰ در نظر می گیریم.
کد متلب:

 

bw = bwareaopen(bw, 10);
figure
imshow(bw)

 

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

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

با استفاده از دستور im2bw در متلب، می توانیم یک عکس که هر پیکسل آن می تواند دارای مقادیر دلخواهی باشد را به یک عکس باینری (binary) که پیکسل های آن، تنها دارای مقدار ۰ یا ۱ هستند، تبدیل کنیم.
به مثال زیر توجه کنید :
مثال خود نرم افزار متلب :

clear all
close all
clc

load trees
BW = im2bw(X,map,0.4);
imshow(X,map)
figure
imshow(BW)


 

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

(جزء اطلاعات داخلی خود متلب) را به درون workspace آورده ایم تا پردازش های بعدی را بر روی آن انجام دهیم.

دستور imshow برای نمایش یک عکس به کار می رود.

دستور figure باعث می شود که عکس دوم، در یک پنجره جدید نمایش داده شود.
در دستور im2bw ، باید یک حد آستانه (threshold) تعیین شود تا بدانید که مقادیر عکس اولیه را چگونه در دو گروه قرار دهید (تبدیل به ۰ یا ۱).

ما مقدار ۰٫۴ را برای آن انتخاب کرده ایم. نتیجه :
عکس اولیه :

عکس باینری (پیکسل ها تنها دارای مقادیر ۰ و ۱(

اگر مقادیر عناصر موجود در ماتریس BW را بررسی کنید، مشاهده می کنید که تنها برابر ۰ یا ۱ می باشند.

تبدیل تصویر به باینری در متلب

منبع

نظر خود را اینجا بنویسید!

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