محاسبه ی تصاویر در پردازش تصویر

چاپ

در این مقاله، با موارد زیر آشنا خواهید شد:

  1. مقدمه ای بر توابع بکار رفته در محاسبات تصاویر
  2. بررسی قواعد اشباع در محاسبات تصاویر
  3. فراخوانی تودرتو در توابع محاسبات تصاویر

مقدمه ای بر توابع بکار رفته در محاسبات تصاویر

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

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


بررسی قواعد اشباع در محاسبات تصاویر

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

بعنوان مثال، بیشترین مقداری که می توانید در نوع داده ی uint8 ذخیره کنید برابر است با 255. اما ممکن است در محاسبات، مقادیر کسری نیز به وجود آیند. ولی این مقادیر کسری نمی توانند در ماتریس ها با اعداد صحیح قرار گیرند. 

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

  1. مقادیری که از محدوده ی، نوع مورد نظر اعداد صحیح تجاوز کنند، در آن محدوده اشباع می شوند. 
  2. مقادیر کسری گرد می شوند. 

بعنوان مثال، اگر نوع داده ی ما uint8 باشد، مقادیر بزرگتر از 255، همان 255 درنظر گرفته می شوند(سرریز می شوند). در جدول زیر، چند مثال دیگر را مشاهده می کنید.

 

عدد مورد نظر نوع داده(کلاس) مقدار سرریز شده
300 uint8 255
45- uint8 0
10.5 uint8 11

 


فراخوانی تودرتوی توابع در محاسبات تصاویر

 شما می توانید توابع محاسبات تصویر را با یکدیگر ترکیب کنید تا بتوانید یک سری از عملیات را انجام دهید. بعنوان مثال، برای محاسبه ی میانگین دو عکس، یعنی \(C=\frac { A+B }{ 2 } \)، می توانید از دستورات زیر استفاده کنید:

I = imread('rice.png');
I2 = imread('cameraman.tif');
K = imdivide(imadd(I,I2), 2);

 

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

$$K = imlincomb(.5,I,.5,I2);$$