Assignment 1- Loss-Less Compression
Assignment 1- Loss-Less Compression
سیستمهای چندرسانهای
Multimedia Systems
مدرس :میثم روستائی
مقدمه
یک تصویر دیجیتال بدست آمده از یک عکس معمولی ،فضای ذخیره سازی زیادی نیاز دارد .به عنوان مثال یک تصویر رنگی
٥12*٥12كه رنگ هر پیکسل را با 24بیت نشان میدهد ٧٦٨ ،كیلوبایت از حجم یک دیسک را اشغال میكند .برای انتقال چنین
تصویری سادهای با یک مودم به زمان زیادی نیاز است .هدف از فشرده سازی تصویر كاهش میزان دادههای مورد نیاز برای نشان دادن
تصاویر دیجیتال و بنابراین كاهش هزینه انتقال و ذخیره سازی میباشد.
فشردهسازی تصویر نقش كلیدی در بسیاری از كاربردها دارد .این كاربردها شامل پایگاه داده تصویر ،مخابره تصویر ،استفاده از تصاویر
ماهواره ای برای كاربردهای آب و هوا ،تصویربرداری اسناد ،تصویر برداری پزشکی ،انتقال توسط دورنگار ،كنترل وسایل نقلیه نظامی و
فضایی از راه دور كاربرد دارد .به طور خالصه ،كاربردهای روزافزون پردازش تصویر ،به دستکاری ،ذخیره سازی و انتقال تصاویر دودویی،
سیاه سفید یا رنگی به شکلی كارا و مؤثر بستگی دارد.
الگوریتم کدگذاری
به طور كلی ،روش های كدینگ می توانند به دو دسته بدون تلفات ( )LossLessو با تلفات ( )Lossyتقسیمبندی شوند .در كدینگ
بدون تلفات ،مقادیر نمونههای اصلی دوباره دقیقا ً به دست میآیند .در كدینگ با تلفات ،سیگنال اصلی تا حدودی تغییر میكند ولی
به نرخ فشردهسازی باالتری دست مییابیم .در تمرین اول بر روی پیاده سازی الگوریتم كدگذاری بدون تلفات LZWتمركز میكنیم
و خروجی بدست آمده را با نرخ بهینه ( )Entropyمورد مقایسه قرار میدهیم.
كدینگ LZWالگوریتم مورد استفاده در بسیاری از نرمافزارهای عمومی فشرده سازی اطالعات مانند gzipو pkzipبوده است.
یکی از مشهورترین فرمتهای فایلهای گرافیکی GIFهم از طرح كدینگ LZWاستفاده میكند .این رویکرد یک از روشهای
تطبیقی ( )Adaptiveمبتنی بر لغتنامه است كه به دنبال آمادهسازی لیستی از الگوهای پرتکرار و استفاده از آن برای كدگذاری
است .این الگوریتم با یک لغتنامه از نمادهای پایهای شروع میكند.
آزمایش
در این تمرین به دنبال فشرده سازی یک تصویر تصادفی gray scaleهستیم .نمادها در این حالت شماره رنگها میباشد كه
میتواند در بازه 0تا 255تغییر كند.
الگوریتم مورد استفاده LZWمیباشد و لغتنامه اولیه شامل سه عنصر } {0: 1, 155:2, 255:3میباشد و این لغتنامه حداكثر
میتواند شامل 512عنصر شود (پس هر عنصر ارسالی به 9بیت نیاز دارد در حالی كه در ارسال عادی هر نماد ارسالی به 8بیت نیاز
دارد .احتماال به این فکر میكنید پس چرا فشردهسازی را انجام میدهیم؟! واقعا چرا؟) .دقت كنید با تنظیمات در نظر گرفته شده،
زمانی كه لغتنامه تکمیل شود ،لغتنامه دوباره به حالت اولیه برگشت میكند.
جهت راهنمایی ،توجه داشته باشید كه نمادهای پشت سر هم میتواند به شکل یک لیست در دیکشنری به عنوان keyذخیره شوند
(به عنوان مثال ،كلید مربوط به دو پیکسل پشت سر هم با مقادیر 0و 255میتواند به صورت ] [0,255به دیکشنری اضافه شود)
و یا میتوانید از توابع پردازش رشتهها استفاده كنید (به عنوان مثال كلید مربوط به دو پیکسل متوالی با مقادیر رنگ 0و 255را به
صورت " "0, 255ذخیره كنید.
بخش اول :برنامه اصلی به عنوان ورودی یک تصویر gray scaleرا دریافت كرده و تابع LZW_Encoderرا فراخوانی -
میكند تا آن را كدگذاری كند و به عنوان خروجی برگرداند.
بخش دوم :برنامه اصلی خروجی تابع Encoderرا دریافت كرده و تابع LZW_Decoderرا فراخوانی میكند تا رمزگشایی -
انجام شود و ماتریس تصویر را به عنوان خروجی برگرداند.
بخش سوم :برنامه اصلی ،تصویر ورودی و تصویر رمزگشایی شده پس از مرحله دوم را در خروجی نمایش میدهد و همچنین -
میزان كارایی الگوریتم LZWپیاده سازی شده را در مقایسه با كدگذاری هر یک از نمادها به صورت مجزا (ارسال تک نماد) و
در مقایسه با مقدار Entropyمورد بررسی قرار میدهد.
گزارش
برای پیادهسازی میتوانید از هر زبان برنامهنویسی دلخواه استفاده كنید .در برخی از زبانها تابع LZWوجود دارد .از این تابع
نمیتوانید استفاده كنید و الگوریتم آن را میبایست خودتان پیادهسازی كنید (در مورد نحوه كار این الگوریتم در Lecture 5به
طور كامل توضیح داده شده است).
انجام تمرین در قالب گروههای حداكثر دو نفره امکانپذیر است .پاسخ تمرین را تا تاریخ مشخص شده در سامانه آپلود بفرمایید .فایل
فشرده ارسالی می بایست شامل كد برنامه و یک فایل گزارش حاوی نحوه پیادهسازی ،كامپایل و اجرای برنامه ،شیوه پیادهسازی هر
بخش ،و خروجی آن با توجه به ورودی داده شده است .ارائه فایل گزارش بسیار مهم میباشد.
ضمنا تاریخی برای تحویل تمرین مشخص خواهد شد كه در آن هر گروه موظف به كامپایل برنامه خود ،اجرا و پاسخ به سواالت در
مورد نحوه كد نویسی و عملکرد هر بخش میباشد .از هر دو عضو سگروه سواالتی پرسیده خواهد شد.