آشنایی با کدک های تصویر (Video Codecs) - بخش سوم


در این قسمت از شرح کدک divx، به طرح تعدادی گزینه ها که بعنوان ابزارهای mpeg4 شناخته می شوند، می پردازیم. از جمله آنها طریقه کد شدن هر فریم است که می تواند یکی از سه نوع intra frame, predicted frame, bi directional frame باشد که به ترتیب I, P, B farme شناخته می شوند. در کدک divx سه طریقه انتخاب مختلف وجود دارد که در اینکه هر فربم به کدام شکل از سه نوع I, P ,B کد شود تاثیر می گذارد. همچنین در اینجا دو انتخاب دیگر که برای استفاده از Quarter pixel و GMC است، وجود دارد.

کد کردن به صورت Bidirectional

تمام بلاک های فربم های I به صورت کامل کد می شوند، بنابراین دارای بیشترین کیفیت هستند ولی حجم زیادی را اشغال می کنند. در فربم های P بعضی از بلاکها که نسبت به فربم های قبلی تغییر کرده اند به صورت بلاکهای اولیه به صورت کامل کد می شوند، اما بلاکهایی که نسبت به فربم های قبلی تغییر نداشته اند، به صورت فربمهای پیش بینی شده کد می شوند که در حقیقت فقط آدرس آنها را می گیرند. در فربم هایی که به صورت B کد می شوند تعدادی از بلاک ها به صورت بلاکهای اولیه و تعدادی از آنها به صورت بلاک های پیش بینی شده از فربم های قبلی و برخی نیز بصورت پیش بینی شده از فربم های بعدی کد می شوند. بنابراین این نوع از فربم ها داری کمترین حجم از داده ها و دارای پایین ترین کیفیت می باشد.

بسته به نوع تصویر و مقدار فشرده سازی که لازم داریم و همچنین دستگاهی که می خواهیم تصویر کد شده را در آن اجرا کنیم، انتخاب های مختلفی وجود دارد که هر یک بطور اجمال بیان می شوند:
  • Off

در این حالت تصویر کد شده فاقد فربم هایی که به صورت B فربم کد شده باشند، است. این حالت برای تصاویری که دارای تغییرات تقریباً سریع می باشند، مناسب تر است. در این حالت بدلیل فقدان فربم های B تصویر کد شده در حجم مساوی با حالتی که تصویر کد شده دارای فربمهای B باشد، دارای کیفیتی پایین تر است.

  • Adaptive Single Consecutive

کلمه Adaptive در اینجا به نوع هوشمندی در انتخاب B فریم ها اشاره می کند، به طور مثال اگر در فریمی که یک اسلحه شلیک می کند و آتش ناشی از شلیک اسلحه در یک فریم ظاهر می شود اگر این فریم به عنوان یک فریم B در نظر گرفته شود در تصویر کد شده تقریباً این آتش محو می گردد. به همین دلیل در کدک divx 5.2 در انتخاب B فریم نسبت به مقدار تغییرات نسبت به فریم های پیرامون هوشمندی خاصی صورت می گیرد.
در این انتخاب از روش کد کردن، به غیر از مواردی که همان هوشمندی صورت می گیرد، فریمها به صورت متوالیIBPBPBP… کد می شوند.

  • Adaptive Multiple Consecutive

در بعضی از قسمت های یک تصویر ممکن است چند فریم متوالی تقریباً دارای شامل یک صحنه ثابت با تغییرات جزئی باشد در این موارد می توان برای فشرده سازی بیشتر چند فریم به طور متوالی به صورت B فریم کد شوند، به عنوان مثال به صورت IBPBBBPBBP…. البته این انتخاب در صورتی فعال می شود که Divx certified را غیر فعال سازیم.

  • شماره گذاری فرم ها در تصویر کد شده

به دلیل آنکه فریمهای B در تصویر کد شده دارای بلاک هایی می باشد که از روی فریم های P کد شده اند، بنابراین در هنگام دیکد کردن تصویر باید ابتدا فریم های P و سپس فریم های B دیکد شوند. به همین منظور اگر یک فریم به صورت 1(I)2(B)3(P)4(B)5(B)6(B)7(P)… کد شده باشد طریقه چینش آنها در تصویر کد شده به صورت1(I)3(P)2(B)7(P)4(B)5(B)6(B)… خواهد بود تا در موقع دیکد شدن، ابتدا فریم های P کد شوند، سپس در محل مناسب خود قرار بگیرند.

یک چهارم پیکسل (Quarter Pixcel)

چنانچه قبلاً گفته شد در یک کدک divx در فریم های P  و B (اگر وجود داشته باشند) هر بلاک در فریم های مجاور جستجو می شود، در حالت ساده هر بلاک با جابجا شدن یک پیکسل یک پیکسل تمام در جهت های گوناکون جستجو می شود که به این روش Whole-pixel گفته می شود.
در Divx با اعمال یک فیلتر برای هر بلاک یک بلاک مجازی ایجاد می شود که می تواند در هر مرحله از جستجو به مقدار نیم پیکسل جابجا گردد. با انجام این عمل بلاک در جای دقیق تری قرار گرفته . بنابراین فشرده سازی بهتری صورت می پذیرد و تصویر حاصله دارای وضوح بیشتری خواهد بود.

حال اگر عمل جستجو را بتوان با فاصله های کمتر از نیم پیکسل انجام داد، می توان فشرده سازی بهتری را اعمال نمود، ولی هر چه این فاصله کمتر باشد عمل کد کردن طولانی تر خواهد شد و همچنین عمل دیکدینگ نیز دارای پیچیدگی بیشتر خواهد شد. در کدک Divx یک انتخاب برای عمل جستجو به صورت یک چهارم پیکسل قرار داده شده است که با انتخاب این مورد هر بلاک بصورت یک چهارم در فرم های مجاور جستجو خواهد شد ولی این انتخاب در Divx certified قرار ندارد.
این انتخاب در تصاویری که دارای حرکات کند می باشند، بسیار مفید می باشد. مثلاً اگر در یک تصویر perspective یک شئ در حال دور شدن کوچک می شود، استفاده از Qurter pixcel بسیار مفید تر می باشد.

فشرده سازی حرکت عمومی ((Global motion compensation(GMC)

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




با تشکر از دوست و همکار عزیزم : مهندس حجت وفا

آشنایی با کدک های تصویر (Video Codecs) - بخش دوم

 

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

پردازشها و مراحل قبل از کد کردن(Preprocessing)

برش تصویر (crop)

در بعضی از تصاویر مانند تصاویر wide screen در بالا و پایین تصویر نوارهای مشکی و یا رنگی وجود دارد. در لبه‌هایی که این حاشیه‌ها با تصویر دارند تغییر کنتراست زیادی وجود دارد بنابراین حجم زیادی از اطلاعات برای کد کردن این نواحی مصرف می‌شود که این نواحی را قبل از عمل کد کردن می‌توان برش داد. از موارد دیگری که عمل برش مفید می‌باشد میتوان به زمانیکه موضوع اصلی در مرکز تصویر است و با حذف حواشی تاثیر چندانی در محتوای آن پیش نمی آید، اشاره نمود.

عمل Deinterlacing

تصاویر آنالوگ بصورت میدانهای زوج و فرد می‌باشند یعنی در یک فرم فیلدهای فرد نمایش داده می‌شوند و در یک فرم فیلدهای زوج. اگر تصویر دیجیتالی که به این صورت می‌باشد را بخواهیم کد کنیم پیچیدگی‌هایی در عمل کدینگ صورت می‌گیرد که باعث مات شدن تصویر میگردد. البته اگر عمل Deinterlacing نیز به خوبی انجام نگیرد، همین تاثیر را باقی میگذارد. یکی از بهترین فیلترها که این مورد را انجام می‌دهد smart Deinterluciy می‌باشد که تنها در نرم‌افزار virtual Dub نصب می‌گردد.

تغییر سایز (resize)

تعداد پیکسلهای یک تصویر PAL استاندارد برابر با 576*720 می‌باشد، که اگر یک کدک بخواهد این تعداد پیکسل را کد کند هم زمان زیادی صرف می‌شود و هم حجم اطلاعات زیاد می‌شود و در birate ثابت کیفیت تصویر افت می‌کند چون کدک مجبور می‌گردد که جزئیات بیشتری از تصویر را حذف کند. ولی با عمل تغییر سایز تصویر به صورتی که با تعداد پیکسلهای تصویر اصلی تناسب داشته باشد می‌توان کیفیت متناسب‌تری بدست آورد این تغییر سایز در مورد تصاویر PAL بهتر است بصورت 486*640 و یا 288*352 باشد. البته در موقعی که عمل تغییر سایز صورت می‌گیرد باعث بلوکی شدن در تصویر کد شده می گردد که کدک با اعمال فیلتر  Deblocking  مقداری از این تاثیر را حذف می‌کند.

رفع نویز منبع

این فیلتر در WMV تحت عنوان Denoise شناخته می‌شود و فقط میتوان تاثیر این فیلتر را کم و یا زیاد کرده ولی در DIVX بصورت خیلی گسترده به آن پرداخته شده است. در اینجا فقط یک توضیح کلی در مورد نویزهای منبع داده خواهد شد، وقتی که یک تصویر از یک وسیله به داخل کامپیوتر ریخته می‌شود بستگی به نوع وسیله مثلاً دوربینهای DV، دیسکهای DVD، کارتهای کپچر TV و... مقدار نویز که شامل دندانه دندانه شدن یا کریستالی شدن (grain)، چشمک زدن و بی ثیاتی رنگ نیز با آن همراه می‌شود. یک مزیت فوری این فیلتر preprocessing اداراک بصری بهتر از تصویر می‌باشد. این فیلتر به دو صورت فضایی یا محیطی و زمانی (temporal) عمل می‌کند. فیلتر فضایی یا محیطی به هر پیکسل و پیکسلهای اطراف آن اعمال می‌شود، نویز بصورت تغییرات فرکانس بالا بین رنگ پیکسلهای مجاور خود را نشان می‌دهد، بنابراین این فیلتر با ایجاد یک فیلتر پایین گذر باعث پایداری در رنگ یک فرم می‌گردد.

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

اگر درجه اعمال این فیلترها را زیاد کنیم باعث صاف شدن (smoothing) تصویر میشود. البته در تصاویری که دارای نویز زیاد می‌باشد، به اجبار باید مقداری این تاثیر را بپذیریم .

عمل رفع نویز منبع بدلیل آنکه تغییرات فرکانسهای بالا در پیکسلها و فرمهای مجاور را کاهش می‌دهد، در بهبود تصویر کد شده بصورت قابل ملاحظه‌ای مؤثر می باشد.




با تشکر از دوست و همکار عزیزم : مهندس حجت وفا

آشنایی با کدک های تصویر (Video Codecs) - بخش اول


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

کدک‌های خانواده Mpeg
کدک های خانواده (Mpeg (Moving picture Experts Group یکی از گسترده ترین انواع کدک هستند که دارای سطوح مختلف برای کاربردهای گوناگون می‌باشند. کدکMpeg4 در این بین از حیث تنوع بسیار گسترده تر می‌باشد. بطوری که هم تصاویر را بگونه‌ای کد می‌کند که قابل انتقال بر روی خطوط Dial-up باشد و یا بتوان آنها را با تجهیزات hand held ( مانند موبایلها و ساعتهای دیجیتال ) اجرا نمود و یا با بیت ریت‌های بالا که کیفیتی در حد برودکست داشته که می‌توان آنها را بر روی خطوط پر سرعت انتقال داد و یا توسط تجهیزات home theater ( مانند DVD player ) اجرا کرد. کدک‌های Mpeg4 گوناگون توسط شرکتهای مختلفی بوجود آمده که از جمله آنها می‌توان به WMV ,FFDSHOW ,XVID ,DIVX و... اشاره کرد. که در بین آنها کدک DIVX5.2 از شرکت DIVX و کدک WMV از شرکت مایکروسافت که با به خدمت گرفتن تکنیک‌های پیچیده تصاویری با کیفیت مناسب را با بیت ریت (Bitrate) پایین‌تر ارائه میدهند، قابل توجه می‌باشد. تصاویر Mpeg4 برای انتقال بر روی خطوطی که دارای سرعت پایین می‌باشد، مناسبتر هستند.

کدکWMV9 دارای مقادیر از پیش تنظیم شده‌ای می‌باشد که بر اساس سیستم تصویری که در آن اجرا می‌شود (Pal یا NTSC) و همچنین خطوط انتقال آن (از Dial-up تا خطوط پر سرعت که تا حدود یک مگابیت بر ثانیه می‌باشند) تعریف شده است، این کدک در Premiere Pro بعنوان Adobe Media Encoder بصورت plugin قرار دارد. یکی دیگر از مزیتهای این کدک آن است که می تواند تصویر کد شده را مستقیماً از طریق FTP ارسال نماید.

در کدک DIVX5.2 این دسته بندی بر اساس دستگاههایی که تصویر کد شده را اجرا (play) میکنند تقسیم بندی شده‌اند که به چهار گروه
 High Definition ,Home Theater ,Portable ,Handheld
تقسیم می شوند. تجهیزات هر یک از این گروهها توسط شرکتهای مختلفی ساخته و ارائه می شوند و دارای ظرفیتها و خصوصیات خاصی می‌باشند که این تقسیم بندی نیز بر اساس این محصولات طراحی شده است. در این نوشته سعی شده تا مفاهیم کلی و نکات عملی در رابطه با این دو کدک توضیح داده شود.

مفاهیم کلی

ماکرو بلوکها و حرکت

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

انواع فرمها

همانطور که در قسمت قبل گفتیم کدک با جستجوی حرکت، یک بلاک را در فرمهای دیگر جستجو می‌کند و بجای اینکه آن بلاک را کد کند فقط مقدار همان بردار را ذخیره می‌کند. ولی بعضی فرمها وجود دارند که لازم است تمام بلاک‌های آن کد شوند مانند فرم اول و یا جاهایی از تصویرکه تغییرات کلی در تصویر حاصل می‌گردد و یا در فاصله‌های معین یک فرم بصورت کامل کد می‌شود تا بلاکهای بعدی بتوانند بر طبق آن آدرس دهی گردند. این فرمها بعنوان فرم اولیه یا intra frame نامیده می‌شوند.

فرمهایی که بعضی بلاکهای آن از روی بلاک‌های فرمهای دیگر کد می‌شوند بر دو نوع هستند:
در نوع اول بلاک‌ها فقط از روی فرمهای قبلی جستجو می‌شوند که به این فرمها فرم پیش بینی شده یا predicted frame و اططلاحاً p-frame گفته می‌شود.

در گروهی دیگر از فرم‌ها بعضی از بلاک‌ها از روی فرم‌های قبلی و بعضی از روی فرم‌های بعدی جستجو می‌شوند که بترتیب به آنها بلاک‌های پیش بینی شده رو به جلو یا forward-predicted block و بلاک‌های پیش‌بینی شده رو به عقب backward-predicted block گفته می‌شود و بلاکهایی که این دو نوع بلاک در آنها قرار دارد فرمهای پیش بینی شده دو جهته یا Bi-directional predicted frame و اصطلاحاً B-frame نامیده می‌شود.

کوانتیزر Quantizer

از آنجائیکه وقتی یک تصویر از حالت آنالوگ به دیجیتال تبدیل می‌گردد، نتیجه حاصله مقداری عدد می‌باشد و حجم این اعداد بسیار زیاد می‌باشد. یکی از راههای کم کردن آن تقسیم این اعداد بر یک عدد خاص که عدد کوانتیزه نامیده می‌شود، می‌باشد. بدین صورت که بعد از تقسیم و بدست آوردن خارج قسمت، این خارج قسمت بصورت یک عدد صحیح ذخیره میگردد. و چون این خارج قسمت‌ها نسبت به اعداد اصلی کوچکتر می‌باشند بنابراین مقدار داده ذخیره شده کاهش قابل ملاحظه‌ای پیدا می‌کند.

در هنگام اجرای تصویر دیکدر (یا Decoder) عدد کوانتیزه را در اعداد ذخیره شده ضرب می‌کند. نتیجه حاصله بعنوان اطلاعات تصویر دیجیتال برای اجرا بدست می‌آید و از آنجائیکه اطلاعات در موقع اجرا با اطلاعات تصویر اولیه متفاوت می‌باشند باعث کاهش کیفیت تصویر می‌شود. هر چه عدد کوانتیزه بزرگتر باشد، کاهش کیفیت تصویر بیشتر است.

روش‌های کد کردن تصاویر

One Pass

در این روش تصویر بر اساس بیت ریتی که انتخاب می‌شود کد می‌شود، در این حالت تصویر فقط یک مرتبه کد می‌شود و تصویر کد شده قابل اجرا می‌باشد. درکدک یک خصوصیت وجود دارد که هنگام کد کردن شما می‌توانید در قسمتهای مختلف تصویر بیت ریت را در هنگام کد کردن متناسب با نوع تصویر تغییر دهید.

Multipass

در حالت Multipass لازم است که تصویر دو یا چند مرتبه بر اساس بیت ریت انتخاب شده کد ‌شود. پس از اولین کد شدن تصویر قابل اجرا نمی‌باشد ولی یک LOG فایل تشکیل می‌شود که به اختصاص بیت ریت مناسب به فرمهای مختلف در مرحله بعدی کمک می‌کند. در WMV فقط میتوان تا دو مرتبه عمل Multipass را ادامه داد ولی در DIVX5.2 این عمل را n مرتبه می‌توان تکرار نمود، ولی بعد از سومین عمل کدینگ حدود 98 تا 99% تصویر بهینه می‌شود و تکرارهای بعدی تاثیر چندانی در بهبود کیفیت ندارد.

One Pass Quality Based

این حالت مشابه کد کردن بصورت One Pass می‌باشد با این تفاوت که در آنجا کیفیت تصویر با اختصاص بیت ریت مشخص می‌شد و در قسمتهایی از تصویر که دارای جزئیات بیشتر و حرکات سریعتر باشد کیفیت تصویر کاهش پیدا می‌کند، ولی در این حالت با اختصاص یک عدد کوانتایزر که قبلاً توضیح داده شد تصویر بصورت کیفیت ثابت کد می‌شود. این طریقه کد کردن در WMV وجود ندارد و در DIVX5.2 نیز اگر تصویر بدین طریق کد شود دیگر طبق استانداردهای دستگاه‌های DIVX نمی باشد، یعنی تضمینی وجود ندارد که این تصویر در وسایلی که تصویر را پخش می‌کنند اجرا شود.




با تشکر از دوست و همکار عزیزم : مهندس حجت وفا