ماتریس تصویر چگونه در حافظه ذخیره می شود

در مطلب، ساختار Mat برای ذخیره سازی تصویر، توضیح دادیم که در OpenC از یک ساختار ماتریسی برای ذخیره سازی و توصیف تصویر استفاده می شود. همچنین توضیح دادیم که اندازه این ماتریس، وابسته به این است که چه سیستم رنگی استفاده شده است.عامل دیگر که بر اندازه ماتریس تاثیر دارد، این است که چه تعداد کانال استفاده شده است.

تصاویر خاکستری (Grayscale) که به صورت تک کانالی هستند، ماتریس آنها شبیه شکل زیر (شکل ۱) است. همانطور که می بینید درایه هر ماتریس به صورت i,j است که i اشاره به سطر i ام و j اشاره به ستون j ام دارد.

تصاویر رنگی که به صورت چند کانالی هستند (مثلا سه کانال برای سیستم RGB)،  مطابق شکل زیر (شکل ۲) هر ستون شامل زیر ستون هایی است. به طور مثال در شکل زیر، چون تصویر سه کانالی است، پس هر ستون دارای سه زیر ستون است و برای همین است که به طور مثال از نوع برداری Vec3b برای ذخیره سازی هر درایه استفاده می شود. بنابراین در کدهای زیر به ترتیب به زیر ستون اول، دوم و سوم سطر i ام و ستون j ام دسترسی پیدا می کنیم.

در کدهای زیر چون هر درایه از ماتریس تصویر رنگی سه کانالی RGB به صورت یک بردار (Vector) سه تایی است، پس نوع هر درایه از نوع Vec3b است. البته به یاد داشته باشید که درOpenCV سیستم RGB به صورت معکوس، یعنی به صوت BGR ذخیره می شود. همانطور که در شکل بالا می بینید، ابتدا رنگ آبی، بعد سبز و سپس قرمز ذخیره می شود.

بنابراین در کدهای بالا و مطابق با شکل ۲، اندیس اول (شماره صفر) از هر درایه به رنگ آبی، اندیس دوم (شماره ۱) به رنگ سبز و اندیس سوم (شماره ۲) به رنگ قرمز اشاره دارد. در مطلب پویش (Scan) پیکسل های تصویر در OpenCV بیشتر صحبت کرده ایم.

به این دلیل که فضای حافظه اصلی (RAM) امروزه بسیار زیاد و کافی است، می توان به سادگی سطرها را به طور پیوسته ذخیره کرد به گونه ای که یک سطر از ماتریس پس از سطر دیگر باشد و یا اینکه می توانیم یک سطر تکی (Single Row) را ایجاد کنیم. بنابراین چون همه چیز در یک تک فضا ذخیره شده است، پس می توانیم به راحتی و با سرعت بالا فرایند پویش (Scanning) تصویر را انجام دهیم.

خلاصه و جمع بندی

۱تصاویر خاکستری به صورت تک کانالی هستند و مقدار آنها از عدد صفر تا ۲۵۵ است. در واقع طیف رنگ از سیاه (عدد سفید) تا رنگ سفید (عدد ۲۵۵) است.

۲هر درایه در ماتریس تصویر خاکستری به صورت یک تک عدد از عدد صفر تا ۲۵۵ است.

۳تصاویر رنگی به صورت سه کانالی هستند که برای هر رنگ قرمز، سبز و آبی، یک کانال وجود دارد. مقدار هر کانال شدت رنگ آن کانال را نشان می دهد.

۴رنگ نهایی مربوط به ترکیب مقدار عددی از هر سه کانال خواهد بود.

۵هر درایه در ماتریس تصویر رنگی به صورت یک بردار (Vector) است.