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

محاسبات روی ماتریس ها در OpenCV

تغییر کنتراست و روشنایی تصویر با OpenCV

ترکیب کردن دو تصویر در OpenCV

در مطلب جداسازی کانال تصویر توسط متد split در OpenCV در مورد چگونگی جداسازی کانال ها در تصویرهای رنگی و تشکیل ماتریس های مجزایی برای هر یک از کانال ها صحبت کرده ایم و همچنین در مطلب بررسی معادل بودن دو تصویر در OpenCV⁩، نیز با استفاد از متد ()subtract و متد ()split به صورت بسیار ساده، بررسی کرده ایم که آیا دو تصویر برابر و معادل یکدیگر هستند یا نه؟

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

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

در کد بالا از این دو تصویر (تصویر اول و دوم) استفاده شده است. سپس این دو تصویر هم بعد (عرض و ارتفاع) را توسط متد ()subtract از هم کم کرده ایم تا نتیجه کار ماتریس جدیدی باشد که درون متغیر diff ذخیره خواهد شد. در نهایت ماتریس diff توسط متد ()imshow نشان داده شده است (شکل زیر). همانطور که می بینید تصویر سیاه است، به جز موقعیت پیسکل هایی که با هم تفاوت دارند.

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

حال می خواهیم در کد زیر دو تصویر را با هم جمع کنیم. در کد زیر یک تصویر را با خودش جمع کرده ایم. هدف این است که بگوییم اگر دو مقدار پیکسل متناظر در دو ماتریس را از هم کم کنیم، اگر حاصل جمع بیشتر از ۲۵۵ شود، پس عدد بدست آمده از عدد ۲۵۵ کم خواهد شد. در زیر نمونه مثالی نشان داده می شود.

به طور مثال جمع عدد ۱۶۴ + ۱۶۴ برابر با ۳۲۸ می شود و اگر آنرا از عدد ۲۵۵ کم کنیم، حاصل برابر با عدد ۷۳ است. در دو خط کد بالا، ابتدا درایه 100x100 ماتریس اولیه نشان داده شده است و سپس درایه ماتریس 100x100 ماتریس خروجی نشان داده شده است. پس نتیجه می گیریم که شدت رنگ در این حالت از ۱۶۴ در تصویر اصلی به ۷۳ در تصویر نهایی کاهش یافته است.

۱ – اگر حاصل تفریق دو پیکسل در دو تصویر از ۲۵۵ کمتر باشد، عدد صفر برای آن در نظر گرفته می شود.

۲ – اگر حاصل جمع دو پیکسل در دو تصویر از ۲۵۵ بیشتر باشد، عدد از ۲۵۵ کم می شود.