به آموزشگاه بیاموز خوش آمدید!

سبد خرید (0)

تبدیل کلاس عکس ها در متلب

در این مقاله می آموزید:

  1. مقدمه ای بر تبدیل کلاس عکس ها 
  2. از دست دادن اطلاعات در تبدیلات عکس ها
  3. تبدیل عکس های ایندکس شده

مقدمه ای بر تبدیل کلاس عکس ها در متلب

شما می توانید با استفاده از تابع double در متلب، نوع داده های uint8 و uint16 را به نوع داده ی double تبدیل کنید. اما تبدیل این کلاس ها به یکدیگر، باعث می شود تا روش تفسیر داده ها توسط متلب تغییر کند. اگر می خواهید که ماتریس حاصل شده به درستی مورد تفسیر قرار بگیرد، نیاز دارید تا به هنگام تبدیل، داده ها را تغییر اندازه دهید یا متعادل کنید. 

برای اینکه بتوانید به سادگی کلاس ها را به یکدیگر تبدیل کنید، از توابع زیر استفاده نمایید:

  • im2uint8
  • im2uint16
  • im2int16
  • im2single
  • im2double

این توابع به طور اتوماتیک داده های عکس اصلی با هر نوع کلاسی را تغییر اندازه داده و متعادل می کنند. بعنوان مثال دستور زیر، یک عکس RGB از نوع double را که داده های آن در بازه ی \([0,1]\) قرار دارند را به یک عکس RGB از نوع uint8 تبدیل می کند به طوری که داده های آن در بازه ی \([0,255]\) قرار دارند. 

$$RGB2 = im2uint8(RGB1);$$

 


از دست دادن اطلاعات به هنگام تبدیل

هنگامی که یک کلاس را به کلاسی تبدیل می کنید که از بیت های کمتری برای نشان دادن اعداد استفاده می کند، مقداری از اطلاعات عکس شما از دست می رود. بعنوان مثال یک عکس سیاه و سفید از نوع uint16، قادر است تا حداکثر 65536 سایه ی خاکستری متمایز را ذخیره کند. اما هنگامی که یک عکس سیاه و سفید از نوع uint16 را به یک عکس سیاه و سفید از نوع uint8 تبدیل می کنید، تنها 256 سایه ی خاکستری ذخیره می شوند. هنگام تبدیل کلاس uint16 به uint8، دستور im2uint8 سایه های عکس اصلی را کوانتیزه می کند. به عبارت دیگر، در عکس اصلی، تمام مقادیر از 0 تا 127 به 0 تبدیل می شود و تمام مقادیر از 128 تا 385 به 1 تبدیل می شوند و همین طور الی آخر. 


تبدیل عکس های ایندکس شده

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

 بعنوان مثال، یک عکس ایندکس شده از نوع uint16 یا double با 300 رنگ را نمی توان به uint8 تبدیل نمود. زیرا uint8 تنها می تواند 256 مقدار مجزا را داشته باشد. اگر شما بخواهید این تبدیل را انجام دهید، ابتدا باید تعداد رنگ های درون این عکس را با استفاده از تابع imapprox کاهش دهید. این تابع عمل کوانتیزه سازی بر روی رنگ ها را در نقشه ی رنگ انجام می دهد، و باعث می شود تا تعداد رنگ های متمایز در این عکس کاهش یابد.  

دیدگاه‌ها  

+1 # mjz 1395-10-02 22:29
سلام و خسته نباشید
بخشید من میخواستم با استفاده از ویژگی centroid در دستور regionprops نقطه ی وسط تصویر رو قرمز کنم.
لطفا راهنماییم کنید.
خیلی متشکرم
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # احسان عباسی 1395-10-03 10:04
سلام ممنون از شما
با استفاده از ویژگی centroid در دستور regionprops میشه مرکز اشیاء درون یک تصویر رو پیدا کرد. برای پیدا کردن مختصات نقطه ی وسط تصویر می تونید از تابع ()size استفاده کنید و سپس دو مقدارش رو در داخل یک ماتریس قرار بدید و تقسیم بر 2 کنید و حالا با استفاده از تابع plot یا دیگر توابع این نقطه رو رسم کنید.

لینک زیر رو هم اگه مشاهده کنید تصور بهتری از دستور بالا بدست خواهید آورد:
https://www.mathworks.com/matlabcentral/answers/28996-centroid-of-an-image
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن