MMS-HW4-Spring2015.pdf

‫بسمه تعالی‬
‫سیستمهای چندرسانهای (‪)44-243‬‬
‫تمرین ‪ :4‬پردازش ویدیو‬
‫دانشکده مهندسی کامپیوتر‬
‫دانشگاه صنعتی شریف‬
‫دکتر حمیدرضا ربیعی‬
‫اردیبهشت ‪49‬‬
‫مقدمه‬
‫در این تمرین ابتدا مبانی ویدیو را فرا میگیرید سپس نحوهی فشردهسازی ویدیو را در ادامه بررسی خواهید کرد‪.‬‬
‫آنچه که بایستی تحویل داده شود شامل پاسخ سواالت مطرح شده در صورت تمرینها )در قالب یك گزارش با فرمت ‪، PDF‬‬
‫نمودارها و شكلهای خروجی ‪ m‬فایلها و خود ‪ m‬فایلها) هستند‪ .‬لطفا تمامی فایلها را به صورت یك فایل فشرده‪ ،‬که نام آن‬
‫در قالب ‪ MM_HW4_StudentID‬باشد که در آن به جای ‪ StudentID‬شماره دانشجویی شما قرار میگیرد‪ ،‬به آدرس‬
‫‪ [email protected]‬بفرستید‪ .‬لطفا عنوان ایمیل ارسالی را نیز مانند نام قالب فوق قرار دهید‪ .‬مهلت‬
‫تحویل خروجیها ساعت ‪ ۹۵:۳۲‬تاریخ ‪ ۲۴/۸۵/۸۰‬است‪.‬‬
‫‪ .1‬آشنایی با امکانات متلب‬
‫‪ .1.1‬چند دستور رایجی که برای کار با ویدیو در نرمافزار متلب استفاده میشود‪ ،‬در جدول زیر آمده است‪ .‬با جستوجو و کار‬
‫با این دستورات ضمن آشنایی با آنها برای بخشهای آتی این تمرین‪ ،‬به تكمیل جدول زیر بپردازید‪:‬‬
‫نام دستور‬
‫‪aviread‬‬
‫‪mmreader‬‬
‫‪avifile‬‬
‫‪frame2im‬‬
‫‪im2frame‬‬
‫‪addframe‬‬
‫‪movie2avi‬‬
‫توضیح عملكرد تابع‬
‫ذکر مثال از کاربرد‬
‫‪ .1.1‬فایل ویدیو شمارهی ‪ 1‬ضمیمهی تمرین را در متلب بخوانید و اطالعات جدول زیر را از آن استخراج نمایید‪ ،‬برای هر‬
‫مورد‪ ،‬دستور متلب ای که اطالعات را از آن استخراج نمودهاید و خروجی را قرار دهید‪ .‬دستورات متلب نوشته شده و‬
‫تكمیلشدهی جدول زیر‪ ،‬خروجی این بخش هستند‪.‬‬
‫ویژگی‬
‫مقدار به همراه واحد و نحوهی استخراج آن‬
‫تعداد فریمهای ویدیو‬
‫نرخ فریمها‬
‫نوع فشردهسازی‬
‫تعداد بیت در هر پیكسل‬
‫فرمت ویدیو (در مورد این فرمت تحقیق کنید و در حد یك‬
‫پاراگراف توضیح دهید)‬
‫طول و عرض‬
‫‪ .2‬فشردهسازی ویدیو‬
‫‪ .1.1‬فایل ویدیوی شمارهی ‪ 1‬را در متلب بخوانید و برای سواالت زیر برنامهی مربوط را نوشته و به آنها پاسخ دهید‪:‬‬
‫الف) با استفاده از دستور ”‪ “movie‬فیلم را در متلب مشاهده نمایید‪.‬‬
‫ب) فریم اول آن را با دستور ‪ imshow‬نمایش دهید‪ .‬هر فریم دارای یك دادهساختاری است که دو فیلد را نگهداری‬
‫میکند‪ .‬در مورد آن تحقیق و ذکر کنید هر فیلد چیست و چه اطالعاتی دربر دارد‪ .‬دستور ‪ imshow‬را برای هر یك از‬
‫فیلدها اجرا و نتیجه را بررسی نمایید‪ .‬تصاویر را در فایل مستند خود قرار دهید‪.‬‬
‫ج) برای کاهش نویز و جزییات ویدیو میتوان ‪ Gaussian filter‬را بر روی ویدیو اجرا نمود‪ .‬در مورد این فیلتر در حد دو‬
‫پاراگراف توضیح دهید‪ .‬سپس برنامهای بنویسید که روی فریمهای ضریب ‪ ۳‬این ویدیو‪ ( ،‬منظور فریم ‪ ۳‬ام‪ 1۸ ،‬ام‪ 1۳ ،‬ام‬
‫و‪ )...‬فیلتر مذکور را با توابع متلب اعمال نماید و سپس آن را در ویدیوی جدیدی ذخیره کنید‪.‬‬
‫د) یكی از روشهای فشردهسازی ویدیو حذف فریمهایی از آن است‪ ،‬بهطوری که خدشهای به روند پشروی فیلم وارد‬
‫نشود و تماشاگر متوجه این اتفاق نشود‪ .‬ویدیوی موردنظر را با این روش فشرده نمایید‪ .‬روش خود را شرح دهید و برنامه‬
‫و ویدیوی خروجی را نیز ضمیمه نمایید‪.‬‬
‫* راهنمایی‪ :‬فریمهایی باید از ویدیو حذف شوند که اختالف آن با فریم قبل و بعد خود کم باشد‪ .‬در این بین به انواع فریمها‬
‫(‪ I , P‬و ‪ )..‬توجه داشته باشید‪ .‬کدام یك از این فریمها را میتوان حذف کرد؟ معیار شما برای این تشخیص چیست؟ کلیهی‬
‫موارد را که درنظر میگیرد در فایل توضیحات ذکر نمایید‪.‬‬
‫ه) راه دیگر برای فشردهسازی ویدیو‪ ،‬کاهش اندازهی فریمهاست‪ .‬برنامهای بنویسید که اندازهی فریمهای ویدیو را‬
‫نصف نماید‪ .‬شرح روش خود را ذکر نمایید‪.‬‬
‫و) کاهش کیفیت ویدیو‪ ،‬راهکار دیگری برای فشردهسازی آن است‪ .‬برای این منظور برنامهای بنویسید که پس از‬
‫خواندن فریمهای ویدیو ابتدا با نرخ ‪ down sample ،۹‬نماید و سپس با همان نرخ ‪ up sample‬کند‪ .‬ویدیوی‬
‫تولیدی از فریمهای جدید را با ویدیوی اولیه مقایسه کنید‪ .‬تفاوت کیفیت خروجی با فیلم اصلی را شرح دهید‪ .‬حجم‬
‫و ویژگیهای ویدیو چه تغییری داشته است؟‬
‫‪.1.1‬‬
‫دو تصویر ‪ ۴‬و ‪ ۳‬دو فریم از یك ویدیو هستند‪ .‬هدف ما در این بخش به دست آمدن بردار حرکت برای این دو فریم و‬
‫تخمین فریمها با استفاده از آنهاست‪ .‬مراحل گام به گام را زیر برای رسیدن به این هدف انجام دهید و در مستند خود‬
‫خروجی هر مرحله را ذکر نمایید و برنامههای متلب را ضمیمهی تمرین قرار دهید‪.‬‬
‫الف) دو فریم را در متلب بخوانید و به فضای رنگ ‪ grayscale‬تبدیل کنید‪ .‬علت نیاز به این تغییر فضا برای گام‪-‬‬
‫های آتی چیست؟‬
‫ب) اختالف دو تصویر را حساب کرده و با دستور ‪ imshow‬نمایش دهید‪.‬‬
‫ج) در تمامی سطح دو تصویر جستجوی کامل انجام دهید‪ .‬برای این منظور از ماکروبالک ‪ 11  11‬استفاده نماید و‬
‫تفاوت دو تصویر را با استفاده از ‪ motion compensation‬حساب کرده و آن را نمایش دهید‪.‬‬
‫د) یك جستجوی سه مرحلهای ‪ motion estimation‬پیادهسازی کنید و ‪ motion vector‬ماکروبالک واقع شده‬
‫در سطر ‪ 1۸‬و ستون ‪ 1۸‬را پیدا کنید‪.‬‬
‫ه) خروجی به دست آمده از گامهای گذشته را باهم مقایسه کنید‪ .‬کدام یك بیشتر فشرده است؟‬
‫* راهنمایی‪ :‬آنتروپی خروجیها را باهم مقایسه کنید‪ .‬برای این منظور میتوان از دستور )(‪ entropy‬در متلب‬
‫استفاده کرد‪.‬‬
‫و) با اجرای تابع قسمت "د" برای تمامی ماکروبالکها‪ ،‬از روی فریم اول (تصویر شمارهی ‪ )۴‬فریم تخمینی بعدی را‬
‫به دست آورید و آن را ذخیره نمایید و با فریم دوم (تصویر شمارهی ‪ )۳‬مقایسه کنید‪ .‬میدان حرکت را با کمك‬
‫دستور ‪ quiver‬در متلب رسم کنید‪.‬‬
‫‪.1.2‬‬
‫جستجوی ‪ 2D Logarithmic‬را برای ‪ motion vector‬های شكل زیر به کار بگیرید‪ .‬فریم کنونی و هدف در اینجا‬
‫از نوع ‪ p-farme‬هستند‪ .‬سایز ماکروبالک ‪ ۴  ۴‬است‪ MV(x, y) Motion vector .‬که در آن ]‪ x[p, p‬و‬
‫]‪ y[p, p‬که ‪ p  ۳‬است‪ .‬ماکروبالک در فریم هدف مختصات نقطهی سمت چپ باالی ماکروبالک ) ‪ (xt , yt‬است‬
‫که ‪ ۲‬پیكسل پررنگ ماکروبالک دارای مقدار شدت ‪ 1۸‬است و ‪ 7‬پیكسل دیگر آن دارای مقدار شدت ‪ 1۸۸‬هستند‪ .‬در‬
‫فریم مرجع‪ ۰ ،‬پیكسل پررنگ با شدت ‪ 1۸۸‬موجود است‪.‬‬
‫الف) بهترین مقدار ‪ x‬و ‪ y‬و ‪ )Mean Absolute Error( MAE‬برای این ماکروبالک را محاسبه کنید‪.‬‬
‫ب) مرحله به مرحلهی روش جستجوی ‪ 2D Logarithmic‬را بر روی شكل نشان دهید‪ .‬در هر مرحله مكان و مسیر‬
‫جستجو و مقادیر بخش الف را نشان دهید‪.‬‬
‫‪ .1.2‬شكل و توضیحات زیر برگرفته از صفحهی ‪ ،۹۲7‬کتاب درسی است که در آن در مورد نحوهی کدینگ فریم ‪ I‬یك ویدیو‬
‫توضیح داده شده است‪ .‬پس از مطالعهی آن‪ ،‬آزمایش زیر را بر روی ویدیوی شمارهی ‪ ،۹‬انجام دهید‪.‬‬
‫الف) یك فریم ‪ I‬از این ویدیو انتخاب کنید‪ .‬چگونه این کار رو انجام میدهید؟ روش شما برای تشخیص فریم ‪I‬‬
‫چیست؟‬
‫ب) در اولین گام این کدینگ‪ ،‬بر روی فریم انتخابی سه مولفهی (‪ )Y, Cr, Cb‬را جدا کنید‪.‬‬
‫* برای اجرای سایر بخشها‪ ،‬جهت راهنمایی‪ ،‬نمونهی کدها نوشته شده است‪ .‬آنها را بر روی خروجی گام دوم خود اعمال‬
‫کنید و نتایج را بررسی نمایید‪.‬‬
‫ج) بر روی بالکهای ‪ ۰  ۰‬هر یك از مولفهها‪ ،‬تبدیل ‪ DCT‬اعمال کنید‪.‬‬
‫;)'‪A_DCT = blkproc (A,[8 8],'dct2‬‬
‫د) بر روی خروجی هر یك از مولفههای قسمت قبل‪ ،‬کوانتایز انجام دهید‪.‬‬
‫;)'‪A_Q = blkproc(A_DCT,[8 8],'mask2‬‬
‫ه) برنامهای بنویسید که با اسكن زیگزاگ بر روی ماتریسهای گام قبل‪ ،‬رشتهی ‪ Entropy coding‬آن را به دست‬
‫آورید و در سه فایل ‪ notepad‬با نامهای ‪ Cb_Entropy.txt ،Y_Entropy.txt‬و ‪ Cr_Entropy.txt‬ضمیمهی‬
‫تمرین خود قرار دهید‪.‬‬
‫* تابع‪ mask2‬استفاده شده در کدهای فوق به شرح زیر است‪:‬‬
‫;)‪function [y]=mask2(x‬‬
‫‪% Normally c=1‬‬
‫;‪c=1‬‬
‫;‪mask=[16 11 10 16 24 40 51 61‬‬
‫;‪12 12 14 19 26 58 60 55‬‬
‫;‪14 13 16 24 40 57 69 56‬‬
‫;‪14 17 22 29 51 87 80 62‬‬
‫;‪18 22 37 56 68 109 103 77‬‬
‫;‪24 35 55 64 81 104 113 92‬‬
‫;‪49 64 78 87 103 121 120 101‬‬
‫;]‪72 92 95 56 112 100 103 99‬‬
‫;‪mask=c*mask‬‬
‫;)‪y=round(x./mask‬‬
‫پایان‬