سلام ، آیا این بازدید اول شماست ؟ یا
تبلیغات در این انجمن
×
+
سفارش تبلیغات
صفحه 2 از 3 اولیناولین 123 آخرینآخرین
نمایش نتایج: از شماره 11 تا 20 از مجموع 22

موضوع: خلاصه ای از مبانی Encoding ویدئو

  1. #11
    عضو متخصص
    تاریخ عضویت
    May 2012
    ارسال ها
    1,760
    سیستم عامل
    Windows 7 64Bit
    محصول امنیتی
    ESET NOD32
    تشکر تشکر کرده 
    9,558
    تشکر تشکر شده 
    11,810
    اعتبار کاربر
    1

    Post Progressive scan, Interlaced scan type

    Progressive scan, Interlaced scan type



    Interlaced Scan:

    نام اولین شیوه ی نمایان شدن تصویر در یک صفحه نمایش الکترونیکی می باشد که در آن خطوط رزولوشن به دو گروه تقسیم می شوند و هر گروه به تنهایی اسکن شده و به نمایش در می آید. به هر یک از این خطوط یک Field گفته می شود و این فیلد ها که به دو دسته تقسیم شده اند اولین گروهشان شامل فیلد های فرد (Odd Fields) و دومین گروهشان نیز شامل فیلد های زوج (Even Fields) می باشد. به فیلد های فرد کلمه ی Top Fields و به فیلد های زوج کلمه ی Bottom Fields نیز اطلاق می شود. در سیستم تلویزیونی PAL، بعنوان نمونه، تعداد پنجاه فیلد در هر ثانیه به نمایش در می آید (25 عدد فرد و 25 عدد زوج). اگر این دو گروه از فیلد ها با یکدیگر جمع شوند یک فریم کامل را می سازند. یعنی مجوعاً 25 فریم در ثانیه.

    بعنوان مثال یک تلویزیون که از سیستم اسکن Interlace استفاده می کند در ابتدا خطوط فرد و سپس خطوط زوج رزولوشن تصویر را به نمایش در می آورد و سپس با توجه به سیستم خود (PAL 25 و NTSC 30 فریم در ثانیه) صفحه ی خود را Refresh کرده و به سراغ سری فیلد های مربوط به فریم بعدی می رود. بنابراین سیستم بینایی انسان این فیلد ها را ادغام و بصورت یک تصویر کامل و روان تفسیر می کند.

    اما هنگامی که یک ویدئوی Interlaced در یک مانیتور با سیستم اسکن Progressive نمایش داده می شود، دیگر هردو سری فیلد زوج و فرد در یک زمان واحد نمایش داده خواهند شد که این باعث بوجود آمدن حالت Combing می شود (که نمونه آن در عکس بالا مشخص است).
    در واقع دلیل بوجود آمدن این Atrifact معروف این است که در یک ویدئوی Interlace واقعی هرکدام از سری فیلد ها مربوط به لحظه ی "متفاوتی" از زمان می باشند. برای مثال باهم یک ویدئوی Interlace می سازیم:
    یک ویدئو که دارای 50 فریم کامل (Progressive) هست را درنظر بگیرید. حال بیاید یکی در میان از هر فریم یکی از سری فیلد های زوج یا فرد را بردارید (خطوط افقی رزولوشن را یکی در میان از بالا به پائین فریم جدا کنید و بردارید – اگر از اولین خط شروع کنید سری فیلد حاصله می شود سری فیلد فرد (بالایی - Top) و اگر از دومین شروع کنید سری فیلد حاصله می شود سری فیلد زوج (پائینی - Bottom)). یعنی برای مثال از فریم شماره ی 1 سری فیلد های فرد را بردارید، از فریم شماره ی 2 سری فیلد های زوج، از فریم شماره ی 3 سری فیلد های فرد و... ادامه بدهید تا 50 فریم تمام بشود. حال شما بجای 50 فریم کامل، 50 سری فیلد (نصفه فریم – Half Picture) دارید که مربوط به لحظه های متفاوت از زمان می باشند. اگر این سری فیلد ها را با هم بصورت Interlace ترکیب کنید (بدون اینکه به هم بچسبانیدشان) یک ویدئو با نوع اسکن Interlace خواهید داشت که در یک سیستم پخش Interlace (مثل CRTها) هر سری فیلد در زمان متفاوتی نسبت به سری فیلد قبلی و بعدی خودش پخش خواهد شد. و اگر آنها را بصورت Progressive ترکیب کنید (یعنی کاملا بهم بچسبانیدشان) یک ویدئوی Progressive با همان Artifact معروف Combing خواهید داشت. این اتفاق (یعنی به هم چسبیدن سری فیلد های زوج و فرد) در هنگام نمایش یک ویدئو با سیستم اسکن Interlace در یک صفحه نمایش با سیستم اسکن Progressive (مثل LCD ها) اتفاق می افتد. همچنین بعد از تبدیل یک ویدئو با سیستم اسکن Interlace به یک فرمت دیگر با سیستم اسکن Progressive و بدون استفاده از فیلتری با نام Deinterlacer.

    اکثر پلیر ها و Decoder های کامپیوتری امروزی بصورت پیش فرض این قابلیت را دارند که در زمان Decode کردن توسط خود Decoder مربوطه شان و یا در زمان فیلتر گذاری خودشان ویدئو با سیستم اسکن Interlace را Deinterlace کنند و حتی کاربر نیازی نیست که خودش کار خاصی در این رابطه انجام بدهد و به راحتی می تواند به تماشای یک ویدئوی Interlaced در یک LCD و بدون مشاهده ی Artifact خسته کننده ی Combing بپردازد. اکثر کارت های گرافیکی امروزی نیز قابلیت Deinterlace کردن ویدئو توسط خودشان را دارا می باشند برای مثال با استفاده از بعضی Decoder ها و پلیرها می توان عملیات Deinterlace را به جای CPU و نرم افزار به دست کارت گرافیک سپرد مانند LAVFilters.





    Progressive scanning:
    دومین متد برای نمایش، ذخیره و جابجایی تصاویر متحرک می باشد که در آن تمام خطوط رزولوشن از یک فریم در یک لحظه بصورت واحد ضبط/نمایان می شوند. با استفاده از این شیوه، خطوط رزولوشن هر فریم بصورت پشت سرهم و از بالا به پایین نمایش داده می شوند و تمامی آنها نیز مربوط به یک لحظه ی "واحد" از زمان می باشند. این سیستمی است که LCDها و LEDها هم از آن استفاده می کنند و در آن تمام فریم ازبالا به پایین و یکجا به نمایش در می آید. در برخی متون فریم های ضبط شده به این شیوه را Full Frame نیز می نامند.

    هنگامی که یک ویدئو با فریم های Interlaced در حال پخش می باشد تنها نیمی از خطوط رزولوشن (بصورت تناوبی مابین خطوط زوج و فرد) در واحد زمان ارسال می شود و این به این معنی است که پهنای باند مصرف شده یا مورد نیاز به میزان "نصف" کاهش پیدا می کند.



    در سیستم PAL فیلد های زوج پس از گذشت 20 میلی ثانیه از ظاهر شدن فیلد های فرد و در سیستم NTSC بعد از گذشت 17 میلی ثانیه از ظاهر شده فیلد های فرد ظاهر می شوند.
    در ضبط ویدئو به شیوه ی Interlaced این امر که کدام سری فیلد ها (فرد یا زوج) ابتدا ظاهر/ضبط بشوند وجود داد. برای مثال می توان تعیین کرد که ابتدا فیلد های زوج ظاهر/ضبط بشوند که به آن BFF=Bottom Field First هم گفته می شود یا می توان تنظیم کرد که فیلد های فرد ابتدا ظاهر/ضبط بشوند که به آن TFF=Top Field First گفته می شود.


    Deinterlacing:
    به عملیات رفع حالت Interlacing و تبدیل آن به شکل صحیح به حالت Progressive، عملیات Deinterlacing گفته می شود که توسط فیلترهای مخصوص در هنگام پخش و یا عملیات Encode صورت می گیرد و از روش های گوناگونی می تواند صورت بگیرد که در بعد به آن اشاره خواهیم داشت.
    خلاصه ای از مبانی Encoding ویدئو تصاویر پیوست شده
    ویرایش توسط M-AUDIO : 27-04-2014 در ساعت 01:53
    :)

  2. کاربران : 33 تشکر کرده اند از شما M-AUDIO برای ارسال این پست سودمند:


  3. #12
    عضو متخصص
    تاریخ عضویت
    May 2012
    ارسال ها
    1,760
    سیستم عامل
    Windows 7 64Bit
    محصول امنیتی
    ESET NOD32
    تشکر تشکر کرده 
    9,558
    تشکر تشکر شده 
    11,810
    اعتبار کاربر
    1

    Post Deinterlacing Methods ، Deinterlacing

    Deinterlacing Methods , Deinterlacing
    فرآیند Deinterlacing، با نمایش و Buffer کردن یک یا چند گروه فیلدها و ترکیب مجدد فیلد ها و تبدیل آن ها به فریم ها صورت می گیرد. این عملیات شامل شیوه های مختلفی می باشد که این شیوه ها را می توان بر اساس عملی که انجام می دهند در گروه هایی دسته بندی نمود. این گروه ها بعضا در متون مختلف با نام های گوناگون خوانده شده اند که سعی شده نام های گوناگون آن ها تا حد امکان ذکر شود:


    • Do Nothing , Weave , No Deinterlacing

    این پردازش به این معنی است که هیچ پردازش اضافی بر روی ویدئو صورت نمی گیرد و تنها آن دو سری فیلد هردو بصورت بافته شده داخل یک فریم قرار می گیرند (دیگر با اختلاف زمانی نسبت به هم پدیدار نمی شوند و هردو در یک زمان در یک فریم قرار می گیرند) (مثل نمایش یک ویدئوی Interlaced در یک LCD بدون استفاده از Deinterlace). یعنی در حالی که به شما همان حالت کرکره ای و شانه ای (Combing) را تحویل می دهد در عوض یک فریم کامل و Full Resolution و همچنین نرخ فریم (به جای نرخ فیلد) تحویل می دهد.


    • Blenders

    Blender: این شیوه پردازش، بوسیله ی مخلوط کردن و روی هم انداختن فیلد های پشت سر هم و نمایش آنها بعنوان یک فریم کامل صورت می گیرد. با استفاده از این شیوه، حالت Combing (کرکره ای شدن) تصویر دیگر پدیدار نخواهد شد زیرا فیلدهای بالا و پایین با هم یکی شده اند و روی یکدیگر قرار گرفته اند و نتیجه نیز قابل قبول می باشد. اما بجای آن یک Artifact دیگر از خود بجای می گذارد که با اصطلاح Ghosting (روح مانند شدن) معرفی می شود و در لحظه ی جابجایی سریع اشیاء پدیدار می شود. همچنین در این شیوه سری فیلد ها ابتدا به Half Picture تبدیل می شوند یعنی هر سری فیلد که حاوی نیمی از خطوط (زوج یا فرد) افقی رزولوشن مبدا است فضای خالی آن از بین می رود و خطوط به هم می چسبند که در نتیجه ار تفاع تصویر نصف شده و به آن Half Picture می گویند. برای درک بهتر به عکس زیر توجه بفرمایید:



    سپس این دو Half Picture که یکی از سری فیلد های زوج و دیگری از سری فیلد های فرد ساخته شده روی هم می افتند و یکی می شوند. بعد از آن یک Half Picture بوجود می آید که فریم Deinterlace شده ی ما می باشد. سپس Upsize می شود و به اندازه ی ارتفاع اصلی خود Scale می شود و Full Sizeمی شود. بدلیل اینکه Half Picture ها بصورت موقتی بوجود می آیند و در انتها حتما به اندازه ی اصلی فریم، Scale می شوند به آن بخش از ویدئو Half Temporal Resolution اطلاق می شود.

    Area based , Selective Blending , smart Blending: این شیوه پردازش، ترکیبی از Blender و Weaving می باشد. در قسمت هایی که در آن بارفتن از یک فریم به فریم دیگر تغییری مشاهده نمی شود و جابجایی و تغییر صحنه رخ نمی دهد هیچ پردازشی صورت نمی گیرد. فریم ها مانند قبل Weave (از بافته شدن سری فیلد ها ساخته) می شوند و سپس در جایی که جابجایی و تفاوت در فریم های پشت سرهم وجود داشته باشد Blending رخ خواهد داد. این امر باعث می شود که ویدئو در قسمت هایی از خود بصورت Full Resolution باشد و در قسمت هایی که blending رخ می دهد بصورت Half Temporal Resolution باشد. همچنین Artifact های کمتری نیز نسبت به Weaving محض و یا Blending محض بوجود خواهد آمد زیرا این شیوه پردازش، ترکیب بهینه ای از آن دو شیوه پردازش دیگر می باشد.

    Mean: این شیوه پردازش، یک Half Picture که از ""میانگین"" دو Half Picture اصلی ساخته شده است را بعنوان خروجی تحویل می دهد.


    • Interpolators

    در این آلگوریتم ها تصویر ویدئو آنالیز می شود و یکی از Half Picture ها (سری فیلدهای زوج یا فرد) نگه داشته می شود و Half Picture دیگر شناسایی و حذف می شود.نحوه ی انجام پردازش به این صورت است که فواصل خالی مابین خطوط فیلدها بوسیله ی میانگین گیری از دو Line بالا و پایین پر می شود. برای مثال: در یک سری Odd Fields جای خالی Line2 بوسیله ی میانگین Line 1 و Line3 پر می شود و به همین منوال تا هر Half Picture به یک فریم (Full Resolution) تبدیل بشود.

    Discard Field: این پردازش یکی از سریع ترین و عام ترین پردازش های Deinterlacing می باشد اما نکات منفی نیز در رابطه با آن وجود دارد. برای مثال شما با استفاده از آن نیمی از رزولوشن و همچنین تحرک ویدئوی خود را از دست خواهید داد که این باعث می شود فیلم شما آنگونه که باید روان و سلیس پخش نشود زیرا نیمی از جابجایی های موجود با آن سری فیلد ها حذف شده اند.
    پس از انجام این پردازش فریم های فیلم به فریم های معمولی و کامل تبدیل می شوند و نرخ آنها نیز برابر با PAL=25fps و یا NTSC=30fps خواهد شد.

    Linear Interpolator و Cubic interpolator: همان Discard می باشند که با استفاده از آلگوریتم های متفاوت Image Interpolation (آلگوریتم های تغییر سایز تصویر) Linear یا Cubic، آن Half Picture نگه داشته شده را به Full Picture تغییر سایز می دهند (Scale می کنند).

    Yadif: یکی از متد های پردازشی Deinterlacing می باشد که توسط MPlayer Project's عرضه شده است. این پردازش بوسیله ی گرفتن Odd Line ها از Half Picture سری فیلد های فرد و ساخت Even Line ها بوسیله ی یک آلگوریتم پیچیده از (Interpolation (Image Scaling، یک Full Picture تولید می کند.



    • Doublers

    این پردازش ها ویدئو را با نرخ فریم Half Picture نمایش خواهند داد. یعنی نرخ فیلد ها دقیقا برابر با نرخ فریم های خروجی خواهد شد. در نتیجه نرخ فریم خروجی برابر می شود با PAL=50 fps و NTSC=60fps.
    این گروه از پردازش ها را می توان به این گونه طبقه بندی نمود:

    BOB - Progressive Scan: این پردازش همانطورکه توضیح داده شد ابتدا خطوط رزولوشن سری فیلد ها را به هم چسبانده و آن ها را به Half Picture ها تبدیل می کند. یعنی هر سری فیلد (زوج یا فرد) برای خودش به یک Half Picture جداگانه تبدیل می شود. سپس این Half Picture ها را Scale کرده و به سایز اصلی فریم ها بر می گرداند و آنها را به فریم تبدیل می کند. در نتیجه ی این عمل، Frame rate خروجی برابر با Field rate ویدئوی ورودی خواهد شد و همچنین دیگر اثری از Combing Artifact ها باقی نخواهد ماند. اما نکته ی منفی این شیوه از پردازش این است که ابتدا اندازه ی عمودی تصویر به میزان نصف کاهش پیدا می کند و سپس Doubleمی شود ( به اندازه ی دوبرابر کشیده می شود تا اندازه ی اصلی فریم بازگردانی شود) که این موضوع باعث کم شدن نسبی Quality خواهد شد.

    Bob+Weave , Smart BOB: این شیوه از پردازش با آنالیز کردن هر دو سری فیلد ها تنها زمانی اقدام به Deinterlace می کند که حالت Combing وجود داشته باشد. در نتیجه ی
    BOB+Weave، نرخ فریم خروجی یا همان Frame rate خروجی برابر با Field rate ویدئوی ورودی خواهد شد. به این دلیل از این نوع بعنوان Smart BoB هم یاد می کنند که بر خلاف BOB معمولی، رزولوشن ویدئوی ورودی را تا حد بسیاری بصورت کامل حفظ می کند در نتیجه کیفیت بالاتری ارائه می دهد.

    Yadif 2x: یکی دیگر از متدهایی می باشد که بر پایه Interpolator ها ساخته شده و تر کیبی از Bob و Yadif می باشد. این شیوه پردازش نیز از طرف پروژه ی MPlayer عرضه شده است. این متد پردازش می تواند کیفیت بهتری نسبت به Bob بدست آورد اما نیاز به یک CPU پرسرعت و قوی برای انجام این کار دارد.

    نکته: تنها برای ویدئوهای Interlace کامل از Deinterlacerها استفاده بشود. استفاده از آنها بر روی ویدئو های Telecine شده تاثیر مخربی در کیفیت خواهد داشت.



    • Inversing the Telecine Process - IVTC

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

    ...
    خلاصه ای از مبانی Encoding ویدئو تصاویر پیوست شده
    ویرایش توسط M-AUDIO : 03-12-2013 در ساعت 14:16
    :)

  4. کاربران : 30 تشکر کرده اند از شما M-AUDIO برای ارسال این پست سودمند:


  5. #13
    عضو متخصص
    تاریخ عضویت
    May 2012
    ارسال ها
    1,760
    سیستم عامل
    Windows 7 64Bit
    محصول امنیتی
    ESET NOD32
    تشکر تشکر کرده 
    9,558
    تشکر تشکر شده 
    11,810
    اعتبار کاربر
    1

    Post Telecining , IVTC

    Telecining , IVTC
    Telecining به فرآیندی گفته می شود که طی آن یک فیلم که با نرخ فریم سینماتیک تولید شده است به فرم قابل استفاده در سیستم Broadcasting استاندارد تلویزیونی با نرخ فریم استاندارد تلویزیون تبدیل شود. (tele=television و cine=cinema می باشد)
    برای مثال، در یک NTSC Film نرخ فریم برابر با 24 fps می باشد. این یعنی در هر ثانیه تعداد 24 فریم متفاوت از ویدئو بر روی پرده به نمایش در می آید.
    در یک NTSC Video نرخ فریم برابر با 30 fps می باشد. یعنی در هر ثانیه، 30 فریم متفاوت از ویدئو بر روی پرده به نمایش در می آید. این فریم ها در NTSC Video بطور معمول بصورت Interlace شده می باشند که یعنی تمام خطوط افقی رزولوشن شبیه هم نمی باشند. نیمی از آنها مربوط به یک لحظه و نیم دیگر مربوط به لحظه ی دیگر است واین خطوط بصورت تناوبی جایگزین می شوند. این عمل همان Interlacing می باشد.
    حال، چه می شود اگر بخواهیم Film (یعنی 24 فریم در ثانیه) را بجای Video (یعنی 30 فریم در ثانیه) درتلویزیون که استاندارد آن 30 فریم در ثانیه است نمایش بدهیم؟ ما مجبوریم به ازای هر 24 فریم تعداد 30 فریم بسازیم. یعنی باید به هر ثانیه 6 فریم اضافه کنیم. اگر در مقیاس کوچکتر (نصف) بگیریم می شود 15 فریم به ازای هر 12 فریم. اگر باز هم در مقیاس کوچکتر(نصف بخش بر 3) محاسبه کنیم می شود 5 فریم به ازای هر چهار فریم. این امر Telecining نامیده می شود: جابجایی Cinema به سیگنال Television
    پس به ازای هر 4 فریم می بایست یک فریم اضافه بسازیم. این فریم چگونه ساخته می شود؟
    این فریم می تواند با دومتد Telecining ساخته بشود که عبارتند از:


    Hard Telecining
    Hard Telecining بصورت حقیقی یک فریم اضافه به ازای هر 4 فریم تولید می کند.
    حال، اگر شما تنها بیاید و یک فریم را Duplicate کنید حالت تناوب ویدئو را بر هم زده اید و یک فریم کاملا تکراری باعث می شود که آن صحنه خوب به نظر نرسد زیرا ویدئو بیش از اندازه بر روی یک لحظه خواهد ماند. اما به جای این فرآیند می توان این فریم اضافی (که به آن در برخی متون، اصطلاح Interpolated Frame اطلاق شده است) را از فیلد هایی که از دو فریم متفاوت گرفته شده ساخت.
    بیاید تصور کنیم که آن چهار فریم ویدئوی ما به این صورت است.

    کد HTML:
    Frame 1: A1A2
    Frame 2: B1B2
    Frame 3: C1C2
    Frame 4: D1D2

    (منظور از x1x2 تقسیم بندی فرضی هر فریم به 2 سری فیلد می باشد و تاکید می شود که تقسیم بندی تا به اینجا فرضی است و Interlacing صورت نگرفته است)



    Hard Telecining آن برای NTSC Video به این صورت خواهد شد:

    کد HTML:
    Frame 1: A1A2
    Frame 2: A1B2 (interlaced with top from source Frame 1, bottom from source Frame 2)
    Frame 3: B1C2 (interlaced with top from source Frame 2, bottom from source Frame 3)
    Frame 4: C1C2
    Frame 5: D1D2



    توجه داشته باشید که فریم اول و فریم های چهارم و پنجم هنوز صاحب همان فیلد های فرضی Progressive خود هستند و در واقع دست نخورده (Progressive) باقی ماندند اما فیلد های فریم های دوم و سوم ناهماهنگ هستند. این یعنی حالت Interlacing در هنگام پخش Telecined Videoمشاهده خواهد شد. شما می توانید در هر دو فریم از پنج فریم حالت Interlacing را مشاهده کنید. این الگو که در آن 3 فریم Progressive و 2 فریم Interlaced بوجود می آید را با نام دیگری نیز می خوانند که به آن 3:2 Pulldown گفته می شود. اگر به دو انیمیشن که در این پست حضور دارد نگاه کنید متوجه می شوید که چرا از اصطلاح "Pulldown" استفاده می کنند. اگر دقت کنید می بینید ویدئویی که نرخ فریم آن بیشتر شده و Telecine شده انگار نسبت به ویدئوی اصلی با سرعت کند تری در حال پخش است.



    Soft Telecining
    امروزه، در اکثر DVD ها از متد Hard Telecining استفاده نمی کنند. البته این امر خوب است و بجای آن از Soft Telecining استفاده می شود. با این امر همان Film با همان تعداد 24 فریم را داخل DVD قرار می دهند و تنها از چیزی با نام (Repeat Flags) استفاده می کنند تا به DVD Player "همان فیلد ها که باید تکرار بشوند" را نشان بدهد بجای اینکه یک فریم حقیقی اضافی داخل دیسک ذخیره بشود. پس DVD Player خودش در هنگام Decode کردن آن فریم اضافه را می سازد و نمایش می دهد. Soft Telecining علاوه بر اینکه به اشغال فضای کمتر منتهی می شود بصورت فنی تعداد 30 فریم در ثانیه را نمایش خواهد داد (بدلیل وجود Repeat Flags در دیسک).
    یک ویدئوی Soft Telecine شده به اینصورت خواهد شد:

    کد HTML:
    Frame 1: A1A2 (Top, Bottom, Repeat Top)
    Frame 2: B2B1 (Bottom, Top)
    Frame 3: C2C1 (Bottom, Top, Repeat Bottom)
    Frame 4: D1D2 (Top, Bottom)

    یعنی این ویدئو می تواند با نرخ فریم 30 فریم بر ثانیه دقیقا مانند یک Hard Telecined Video به نمایش درآید. همچنین Soft Telecine کار Computer ها و Progressive Scan DVD Player ها که از سیستم نمایش Progressive استفاده می کنند را ساده می کند زیرا این دستگاه ها از قابلیت Skip (نادیده گرفتن) Repeat Flag ها و ترتیب چینش فریم ها بهره می برند و توسط این دستگاه ها می توان به راحتی Film های Soft Telecine شده را با همان نرخ فریم اصلی Film خود یعنی 24fps و فریم های اصلی Progressive خود رمزگشایی (Decode) کرده و به نمایش درآورند.

    Inversing the Telecine Process , Detelecine ، خنثی کردن Telecine
    بر خلاف Soft Telecine که در آن Repeat Flag ها را می شود Skip کرد در Hard Telecine باید یک فرآیند انجام شود که طی آن، آن یک فریم اضافه شده حذف شود و چهار فریم اصلی بصورت Progressive باز گردانی بشوند. این فرآیند Inverse Telecine (IVTC) Process نام دارد.
    بیاید برای درک موضوع به الگوی Telecine نگاه کنیم:

    کد HTML:
    Frame 1: A1A2
    Frame 2: A1B2
    Frame 3: B1C2
    Frame 4: C1C2
    Frame 5: D1D2
    فریم 2 از سری فیلد A1 در شروع استفاده کرده که این سری فیلد در خود فریم 1 نیز وجود دارد. فریم 3 از سری فیلد C2 در پایان استفاده کرده که این سری فیلد در فریم 4 نیز وجود دارد. بنابراین اگر شما سری فیلد A1 را از فریم 2 و سری فیلد C2 رو از فریم 3 حذف کنید، با دو سری فیلد زیر روبرو خواهید شد.
    کد HTML:
    Frame 2: B2
    Frame 3: B1
    حال ترتیب چینش را برعکس می کنیم یعنی ابتدا B1 و سپس B2 و سپس آنها را به یکدیگر ملحق می کنیم و یک فریم کامل با نام فریم 2 می سازیم.
    کد HTML:
    Frame 2: B1B2
    حال دیگر کار تمام است و 4 فریم اصلی بازسازی شده است.
    کد HTML:
    Frame 1: A1A2
    Frame 2: B1B2
    Frame 3: C1C2
    Frame 4: D1D2

    ...
    خلاصه ای از مبانی Encoding ویدئو تصاویر پیوست شده
    ویرایش توسط M-AUDIO : 03-12-2013 در ساعت 14:18
    :)

  6. کاربران : 29 تشکر کرده اند از شما M-AUDIO برای ارسال این پست سودمند:


  7. #14
    عضو متخصص
    تاریخ عضویت
    May 2012
    ارسال ها
    1,760
    سیستم عامل
    Windows 7 64Bit
    محصول امنیتی
    ESET NOD32
    تشکر تشکر کرده 
    9,558
    تشکر تشکر شده 
    11,810
    اعتبار کاربر
    1

    پیش فرض Motion, Motion Vector, Motion Estimation, Motion Compensation

    Motion, Motion Vector, Motion Estimation, Motion Compensation:






    Motion:
    همانطور که از معنای واژه مشخص است به هرگونه جابجایی، چه جابجایی دوربین (کل کادر در جهات مختلف) که به دنبال آن محل سوژه و تمام اجزاء داخل کادر عوض می شود و چه جابجایی خود سوژه یا اشیا (توسط خودشان) در ویدئو Motion (تحرک) گفته می شود.


    Motion Vector:
    ایده ی Motion Vector از اینجا می آید که اکثر اوقات، اکثر قسمت های فریم حاضر، در فریم های بعدی نیز حضور دارند. حال چه در همانجای خودشان مثلا یک دیوار در یک پشت صحنه ی ثابت یا در جای دیگر مثلا درب یک خودروی در حال حرکت افقی و مستقیم. پس برای این منظور Macroblock های این فریم با فریم بعدی خودش می توانند مقایسه بشوند و بجای کد شدن دوباره ی یک Macroblock مشابه (تکراری) که در فریم بعدی حضور دارد (در جای خودش و یا فقط جایش عوض شده)، تنها اختلاف بین این دو فریم پشت سر هم، کد بشود. سپس این Macroblockهای ناقص یا خالی از فریم دیگری (که فریم مرجع یا Reference frame|Picture نام می گیرد) در هنگام Decoding برداشته می شوند. و اینگونه است نرخ فشرده سازی بین فریم ها (Temporal Compression) بالا می رود.
    بطور دقیق تر اگر Encoder موفق به یافتن Macroblock مشابه بین دو فریم بشود Macroblock مقصد (که در فریم دوم قرار می گیرد) را کد نمی کند یا کامل کد نمی کند و بجای آن یک شکل Vector که با نام Motion Vector شناخته می شود و Decoder را به محل Macroblock مورد نظر در "فریم اول یا همان مرجع" هدایت می کند کد می شود.
    در بیشتر مواقع Encoder موفق به یافتن Macroblock های مشابه بین دو فریم می شود، اما Block یافته شده دقیقا مشابه Block مرجع نمی باشد. در این موارد Encoder اختلاف های موجود بین محتویات دو Block را محاسبه می کند که این اختلاف، Prediction error نامیده می شود.


    Motion Vector ها می توانند به تمامی یک فریم اشاره کنند (که در نتیجه آن Global Motion Estimation بوجود می آید) یا می توانند به قسمت های خاص از یک فریم (یک Block مربع شکل، با اشکال نا موزون و یا حتی یک پیکسل) اشاره کنند. Motion Vector ها می توانند به جهات مختلف اشاره کنند و هر قسمت از فریم دارای Motion Vector های خودش باشد. Motion Vectorها می توانند به موقعیت Pixel یا Macroblock حاضر در فریم بعدی اشاره کنند که در نتیجه به آن Forward Motion Vector گفته می شود و در تهیه ی P-frameها استفاده می شود. همچنین می توانند برعکس عمل کنند یعنی به پیکسلی "درفریم حاضر" اشاره کنند که از "فریم بعدی" در زمان Decoding خواهد آمد. این گونه Motion Vectorها Backward Motion Vector نامیده می شوند و تنها در Bi-Directional frameها (بصورت خلاصه B-frameها) استفاده می شوند.


    Motion Estimation:
    به فرایند تعیین و ساخت Motion Vectorها، Motion Estimation گفته می شود. یا به تعبیری دیگر، به فرایند پیداکردن قسمت های مشابه بین فریم های مجاور، Motion Estimation گفته می شود.
    هرچه Motion بیشتری در سطح 2 بعدی اتفاق بی افتد Motion Vectorهای موثر تری ساخته خواهند شد تا زمانی که Motionدر سطح 3بعدی اتفاق بی افتد (مانند زوم به جلو و عقب و یا چرخش دورانی). هرچه Noise و Grain بیشتر وجود داشته Motion Estimation بی کیفیت تر اتفاق خواهد افتاد به این دلیل که Noise از دقت مقایسه ها می کاهد.
    این فرآیند یکی از پیچیده ترین فرآیند هایی است که توسط Encoder و با استفاده از محاسبات پیچیده ی ریاضی انجام می شود و بیشترین میزان مصرف CPU در زمان Encoding نیز به این فرآیند اختصاص می یابد و میزان دقت همین فرآیند است که تفاوت بزرگی بین یک Encode سریع و کم کیفیت را با یک Encode آهسته و با کیفیت (در Data rate مشابه) ایجاد می کند.



    Motion Compensation:
    فرآیندی است که طی آن ابتدا Motion Vectorهای ساخته شده توسط Motion Estimation بر روی فریم ها اعمال می شوند و فریم های نهایی (که Predicted frames نامیده می شوند) ساخته می شوند و سپس با فریم های اصلی ویدئوی ورودی خود مقایسه شده و اختلاف موجود بین آنها محاسبه می شود. این اختلاف بدست آمده همان Prediction error یا Residual می باشد.

    با استفاده از Motion Compensation، یک Bitstream شامل تعدادی فریم کامل (Full Reference pictures) می باشد و تعدادی Residual frame و Motion Vector. در زمان Decoding هنگامی که مثلا یک P-frame در حال Decode شدن است ابتدا Decoder با استفاده از فریم مرجع که از قبل Decode شده و در RAM (حافظه ی) Decoder قرار گرفته و با استفاده از Motion Vector ها اقدام به محاسبه ی Predicted frame می کند و سپس این Predicted frame را با Residual مورد نظر ترکیب کرده و در آخر، frame نهایی ایجاد شده و نمایش داده می شود.




    حال اگر فریم بعدی هم Predicted frame باشد و از قسمتی از همین P-frame که کاملا Decode شده بعنوان Reference استفاده کرده باشد این P-frame در RAM می ماند تا فریم بعدی بصورت کامل ساخته بشود و قسمت هایی را که از این فریم بعنوان مرجع خودش انتخاب کرده استفاده کند. فریم ها تا جایی که نیازی به آنها نباشد (بعنوان مرجع برای فریم دیگری قرار نگرفته باشند) در این حافظه می مانند. همانطور که در بالا گفتیم فریم هایی نیز تحت عنوان B-frame وجود دارند که می توانند از اطلاعات موجود در فریم "بعدی" خود برای ساخته شدن استفاده کنند. پس برای ساخته شدن این فریم ها در زمان Decoding طبق معمول لازم است که ابتدا فریم (هایی) که بعنوان مرجع این فریم هستند Decode شده باشند و در RAM قرار گرفته باشند. پس در اینصورت اگر این B-frame از فریم "بعدی" خود بعنوان مرجع برای قسمتی از خود استفاده کرده باشد ابتدا باید فریم بعدی آن Decode شود حتی اگر B-frame "قبل" از آن فریم نمایش داده بشود. اینجاست که یک اتفاق جدید خواهد افتاد و آن هم این است که ترتیب فریم ها برای ذخیره و Decode شدن (Decoding Order) با ترتیب فریم ها برای نمایش داده شدن (Display Order) متفاوت خواهد شد.


    به ادامه ی توضیح این اتفاق در قسمت GOP پرداخته خواهد شد.

    ...
    خلاصه ای از مبانی Encoding ویدئو تصاویر پیوست شده
    ویرایش توسط M-AUDIO : 02-12-2013 در ساعت 21:59
    :)

  8. کاربران : 27 تشکر کرده اند از شما M-AUDIO برای ارسال این پست سودمند:


  9. #15
    عضو متخصص
    تاریخ عضویت
    May 2012
    ارسال ها
    1,760
    سیستم عامل
    Windows 7 64Bit
    محصول امنیتی
    ESET NOD32
    تشکر تشکر کرده 
    9,558
    تشکر تشکر شده 
    11,810
    اعتبار کاربر
    1

    پیش فرض Intra frame , Inter frame, Keyframe , I-frame , P-frame , B-frame

    Picture Types:
    Intra frame , Inter frame, Keyframe , I-frame , P-frame , B-frame
    در پست گذشته، به Motion Estimation که فرآیند پیدا کردن قسمت های مشابه، بین فریم های مجاور، در ردیف فریم های ویدئو بود اشاره شد. در این تکنیک فشرده سازی، اگر قرار باشد همه ی فریم های ویدئو، به همین شکل یعنی Predicted frame فشرده سازی بشوند دیگر راهی برای هماهنگ کردن ویدئوی خروجی با ویدئویی اصلی نخواهد بود چرا که هر فریم تنها می تواند فریم قبلی یا بعدی خود را مرجع قرار بدهد و اگر فریم مرجع از روی فریم اصلی ویدئو، به روز رسانی نشود و فقط همان فریم اولی باشد که بود، دیگر ویدئوی حاصله، شباهتی با ویدئوی اصلی نخواهد داشت. به این منظور قرار گرفتن یک فریم کامل (بی نیاز از هرگونه مرجع و برابر با ویدئوی اصلی) در ابتدای هر تغییر صحنه (Scene change یا همان Scene cut) لازم می باشد.

    I-frame , Intra frame:
    یعنی یک فریم(عکس) کامل که هیچگونه وابستگی به هیچ فریم دیگر ندارد و تمامی قسمت های آن برابر با فریم اصلی ویدئوی ورودی می باشد و اصطلاحا تمام قسمت های آن از Raw pixels تشکیل شده است. بنابر این، دسترسی به این فریم ها بسیار آسان و بسیار سریع می باشد زیرا برای Decode شدن آنها، دیگر نیازی به Decode شدن فریم های قبلی یا بعدی نمی باشد. فرمت ویدئویی Uncompressed و بسیاری از فرمت های ویدئویی Lossless بصورت Intra frame Only می باشند یعنی تمام فریم های آنها I-frame بوده و البته یکی از دلایل حجیم بودن این گونه فرمت ها همین موضوع می باشد همچنین یکی از دلایلی که از این فرمت ها برای آرشیو و ادیت فیلم ها در استودیو های فیلم سازی استفاده می شود.

    Inter frame:
    فریم هایی می باشند که از روی فریم های دیگر ساخته می شوند و به چگونگی ساخته شدن آنها نیز در پست Motion Estimation اشاره شد. بطور کلی شامل دو گروه Bi-directional frameها و Predicted frameها می باشند. می توانند شامل قسمت هایی باشند که از فریم های دیگر در زمان Decode برداشته می شود و همچنین شامل قسمت هایی که مستقیما درون خودشان ذخیره شده باشد (Raw pixels).
    P-frame , Predicted frame: به فریمی گفته می شود که از فریم(های) قبلی خود بعنوان مرجع خود استفاده کرده است. برای Decode شدن احتیاج دارد که تعدادی از فریم های قبلی Decode بشوند. بنابر این دسترسی مستقیم به آن کند می باشد. بیت ریت بسیار کمتری نسبت به I-frame، برای کد شدن احتیاج دارد. می تواند از یک فریم قبلی خود بعنوان مرجع استفاده کند و یا بصورت همزمان از چند فریم قبلی خود بعنوان مرجع استفاده کند. برای مثال در استاندارد H264 می تواند تا حداکثر 16 فریم را بعنوان مرجع برای ساخته شدن خود قرار بدهد.
    تصویر زیر، تصویر تجسمی یک P-frame هست در زمان Decode شدن:


    Bi-directional frame , B-frame: به فریمی گفته می شود که از فریم(های) بعدی، فریم(های) قبلی یا ترکیبی از هر دو فریم(های) قبلی و بعدی، بعنوان مرجع خود استفاده کرده است. برای دسترسی به آن، باید تعدادی از فریم های قبلی و تعدادی از فریم های بعدی Decode بشوند، بنا براین دسترسی به این نوع فریم حتی از P-frame هم کند تر می باشد. به مقدار بیت ریت به مراتب کمتری نسبت به I-frame و P-frame نیاز دارد. در استاندارد MPEG-2 این نوع فریم ها نمی توانستند مرجع فریم دیگری قرار بگیرند اما در H264 این نوع فریم ها می توانند مرجع frameهای دیگر نیز قرار بگیرند. (Pyramidal B-frames).

    ...

    ویرایش توسط M-AUDIO : 02-12-2013 در ساعت 22:00
    :)

  10. کاربران : 26 تشکر کرده اند از شما M-AUDIO برای ارسال این پست سودمند:


  11. #16
    عضو متخصص
    تاریخ عضویت
    May 2012
    ارسال ها
    1,760
    سیستم عامل
    Windows 7 64Bit
    محصول امنیتی
    ESET NOD32
    تشکر تشکر کرده 
    9,558
    تشکر تشکر شده 
    11,810
    اعتبار کاربر
    1

    پیش فرض Slices , Keyframe

    Keyframe:
    این واژه، در زمینه های مختلف، تعاریف گوناگونی دارا می باشد برای مثال در صنعت انیمیشن و متحرک سازی به کرات از این کلمه استفاده می شود. اما در فشرده سازی ویدئو، یک Keyframe، یک Intra frame است که فریم های بعد از آن، تنها شامل تغییراتی خواهند بود که از آن فریم به بعد رخ داده است و نه تمام قسمت های فریم های ویدئوی ورودی. اما هر زمان که یک تغییر بزرگ مانند تغییر دوربین، تغییر صحنه (Scene change یا همان Scene cut) و از این دست تغییرات رخ بدهد، یک Keyframe جدید باید در ابتدای آن تغییر قرار می گیرد. Seek کردن و دسترسی به Keyframeها بسیار سریع است و به پردازش زیادی احتیاج ندارد. اما از آنجایی که اکثر فریم های بعدی Inter frameها خواهند بود، بنابراین Seek کردن، جلو و عقب زدن و دسترسی "سریع" به آن فریم ها امکان پذیر نخواهد بود. برای این منظور لازم است تا در فواصل زمانی معین، Keyframeها قرار داده بشوند حتی اگر هیچ تغییر صحنه یا تغییر بزرگی در آن قسمت ها رخ نداده باشد.
    تصویر زیر، توضیحی بر طریقه ی قرارگیری Keyframeها در اکثر فرمت های فشرده سازی امروزی می باشد:


    همانطور که مشاهده می فرمایید حداکثر فاصله ی بین Keyframeها در صورتی منجر به قرار گرفتن یک Keyframe می شود که تغییر صحنه ای بعد از گذشتن آن مقدار حداکثر که تعیین کردیم رخ ندهد. اما پس از هر تغییر صحنه، یک Keyframe قرار می گیرد و شمارش گر مذکور از نو شروع می شود. تشخیص تغییر صحنه یا Scene Change نیز توسط آلگوریتم های Scene change detection انجام می شود. معمولا در اکثر انکدر ها، امکان تغییر میزان حساسیت این آلگوریتم به کاربر داده شده است. حتی امکان خاموش کردن کلی این آلگوریتم نیز در بعضی انکدرها به کاربر داده شده است.
    نکته: در برخی استانداردها، برای مثال استاندارد DVD و Blu-Ray ویدئویی و سیستم تلویزیون دیجیتالی، فواصل بسیار کوتاهی برای Keyframeها در نظر گرفته شده. برای مثال هر نیم ثانیه یک Keyframe یا هر 1ثانیه یک Keyframe. برخی نرم افزارهای تدوین DVD نیز گزینه هایی دارند برای "اجبار" قرار دادن یک Keyframe در ابتدای هر Chapter. دلیل این امر نیز همان امکان دسترسی و Seek سریع به Keyframeها می باشد.
    نکته: در استاندارد H264، مانند بسیاری از استاندارد های دیگر، همه ی Keyframeها Intra frame یا همان I-frame هستند اما در این استاندارد همه ی I-frameها Keyframe نیستند. برای همین در این استاندارد I-frameهایی را که بعنوان Keyframe استفاده می شوند را در برخی متون با نام IDR-Frame می خوانند. (در متن های تخصصی تر البته)

    Slices:
    در برخی استاندارد های فشرده سازی، هر فریم به قسمت های کوچکتری تقسیم می شود که Slice نام می گیرند. هر Slice می تواند از یک Macroblock و یا چندین ردیف Macroblock پشت سر هم تشکیل بشود.


    در استاندارد H264، این Sliceها می توانند به سه صورت I-slice، P-slice و B-slice کد بشوند که تعریف ویژگی های آنها تقریبا مشابه ویژگی های I-frame، P-frame و B-frame می باشد. هر Slice بصورت کاملا جداگانه از Sliceهای دیگر Encode می شود. وجود Sliceها برای پوشش دادن Errorهای احتمالی در زمان پخش بسیار مفید است. بطوری که اگر Decoder به هر دلیلی موفق به Decode کردن یک Slice در یک فریم نشود، از Decode کردن آن چشم پوشی کرده و به محل شروع Slice بعدی در همان فریم می رود. به اینصورت، آن فریم بطور کلی از دست نمی رود و فقط قسمتی از آن از دست می رود.

    ...
    :)

  12. کاربران : 26 تشکر کرده اند از شما M-AUDIO برای ارسال این پست سودمند:


  13. #17
    عضو متخصص
    تاریخ عضویت
    May 2012
    ارسال ها
    1,760
    سیستم عامل
    Windows 7 64Bit
    محصول امنیتی
    ESET NOD32
    تشکر تشکر کرده 
    9,558
    تشکر تشکر شده 
    11,810
    اعتبار کاربر
    1

    پیش فرض GOP , Group Of Pictures , Sampling , DCT (Discrete Cosine Transform) , DCT Block

    GOP , Group Of Pictures
    به مجموعه فریم هایی که مابین دو Keyframe قرار می گیرند بهمراه اولین Keyframe، یک GOP گفته می شود. هر GOP بطور مستقل از GOPهای دیگر کد می شود. بنابراین اگر یک Keyframe، از ابتدای یک GOP، به هر دلیلی برای مثال خطا در مخابره و ... از دست برود، فریم های آن GOP خراب خواهند شد و از دست خواهند رفت اما پس از رسیدن به نقطه ی آغازین GOP بعدی، پخش به شکل عادی خود باز خواهد گشت.


    گاها در برخی متون، طول GOP را با واحد "ثانیه" نیز بیان می کنند. این امر به این دلیل است که طول GOP با نرخ فریم رابطه ی مستقیم دارد. برای مثال اگر حداکثر فاصله ی بین دو Keyframe برابر با 250 فریم در نظر گرفته شود و نرخ فریم خروجی موردنظر، 25 فریم باشد یا 50 فیلد باشد. می گوییم GOP که در نظر گرفتیم 10ثانیه ای است. مثال دیگر، اگر نرخ فریم فیلم ما 30 فریم در ثانیه باشد و حداکثر فاصله ی بین دو Keyframe را 15 فریم تنظیم کنیم، می گوییم GOPما نیم ثانیه ای است. همانطور که در قسمت توضیحات Keyframe گفته شد، از GOPهای کوتاه مانند 2ثانیه، 1ثانیه یا نیم ثانیه در بلوری ها، دی وی دی ها و سیستم مخابره ماهواره، استفاده می شود.


    Sampling , DCT (Discrete Cosine Transform) , DCT Block
    برای تبدیل سیگنال های بی نهایت و نامحدود آنالوگ (طبیعت) به سیگنال های محدود دیجیتال، فرآیندی اتفاق می افتد به اسم Sampling. این فرآیند برای تصویر، به اینصورت است که هر نقطه از یک منظره تصویری به یک Sample (سمپل) تبدیل می شود یا به عبارتی در یک Sample توصیف می شود. این سمپل ها هستند (با نام های پیکسل و Pel نیز خوانده می شوند) که با قرار گرفتن در کنار هم، شبیه سازی دیجیتال، از آن منظره ی طبیعی (آنالوگ) را تشکیل می دهند. به مجموع تعداد پیکسل های تشکیل دهنده ی یک تصویر دیجیتالی، واژه ی رزولوشن اطلاق می شود. بسیاری از فرمت های تصویری و ویدئویی، از جمله فرمت هایی مانند خانواده ی فرمت های MPEG و تعدادی فرمت های دیگر مانند JPEG، MJPEG، DV، Theora و... برپایه ی آلگوریتم های DCT و Frequency Domain ساخته شده اند. (DCT (Discrete Cosine Transform آلگوریتمی است که یک رشته محدود از داده ها را دریافت و سپس بصورت یک مجموعه از توابع کسینوسی که در فرکانس های مختلف در حال نوسان هستند بیان می کند. اکثر فرمت های ویدئویی که بر پایه ی (DCT (Discrete Cosine Transform فعالیت می کنند ابتدا هر فریم را به بلوک های 8در8 پیکسل تقسیم می کنند. سپس DCT Coefficients (ضرایب DCT) را برای آن بلوک محاسبه می کنند و در نتیجه یک جدول (یا ماتریکس) 8در8 حاوی 64 ضریب DCT حاصل میشود که بیان کننده ی محتویات اصلی آن بلوک با ضرایب DCT میباشد. به هریک از این بلوک های 8در8 حاوی ضرایب DCT، یک DCT Block گفته میشود و از مجموع 4 عدد DCT Block، یک Macroblock کامل (16در16) ساخته می شود که در پست های قبلی تاپیک بهش اشاره شد.
    تصویر زیر مثالی از یک DCT Block می باشد:




    نکته ها:
    ضرایب با مقادیر بیشتر (فاصله ی بیشتر از صفر)، مقادیر با نوسان بالا می باشند و از آنها بعنوان High frequency یا Fine details یاد می شود. نویز و Grain هم جزو این مقادیر قرار می گیرد. این مقادیر به Data rate بیشتری نیاز خواهند داشت. ضرایب با مقادیر کمتر (فاصله ی کمتر نسبت به صفر)، مقادیر با نوسان پائین می باشند و از آنها بعنوان Low frequency Details یاد می شود. این مقادیر به Data rate کمتری احتیاج خواهند داشت. به مجموعه ضرایب با مقدار "صفر" در برخی متون، واژه ی Dead Zone اطلاق می شود و Dead Zone، بیان کننده ی قسمت هایی است که "هیچگونه" جزئیاتی در آنها حضور ندارد.

    ...
    ویرایش توسط M-AUDIO : 03-12-2013 در ساعت 13:58
    :)

  14. کاربران : 26 تشکر کرده اند از شما M-AUDIO برای ارسال این پست سودمند:


  15. #18
    عضو متخصص
    تاریخ عضویت
    May 2012
    ارسال ها
    1,760
    سیستم عامل
    Windows 7 64Bit
    محصول امنیتی
    ESET NOD32
    تشکر تشکر کرده 
    9,558
    تشکر تشکر شده 
    11,810
    اعتبار کاربر
    1

    پیش فرض , Quantizing , DCT Quantization , Scale Factor , Dequantization , IDCT , Inverse DCT

    Quantizing , DCT Quantization , Scale Factor:
    گفته شد که ضرایب با مقادیر نزدیک تر به صفر، نیاز به Data rate کمتری خواهند داشت. فرآیند Quantization به این معناست که ضرایب DCT بدست آمده را به گونه ای به صفر نزدیک تر کنیم. در این فرآیند بطور دقیق یعنی آنها را بر یک Factor که همان Scale Factor یا همان Quantization Parameter یا QP می باشد تقسیم کنیم. برای مثال فرض کنید یک بلوکDCT داریم. قرار هست که Quantization بر روی این بلوک انجام بدهیم، قسمتی از این بلوک حاوی ضرایب DCT زیر می باشد:
    83 13 21 5 4 2 1 5 6 2 1 2 2 1 3 1
    می خواهیم Quantization factor به اندازه ی 5 بر روی آن اعمال کنیم. عملیات به اینصورت می شود که ضرایب DCT مورد نظر را بر 5 تقسیم می کنیم و اگر حاصل حاوی اعشار بود، قسمت اعشار آن را حذف می کنیم و اصطلاحا آنرا رُند می کنیم. حاصل برای ضرایب بالایی می شود:
    16 2 4 1 0 0 0 1 1 0 0 0 0 0 0 0
    فرض کنید در بالا بلوک موردنظر خود را Quantize کردیم و آنرا Encode کردیم. حال برای Decode کردن این بلوک دو فرآیند لازم است که یکی Dequantization و دیگری iDCT می باشد.


    Dequantization:
    فرآیندی است که طی آن ابتدا ضرایب Quantize شده، ضربدر Quantization Parameter یا همان Scale factorیی می شوند که بر آن تقسیم شدند و سپس رُند می شوند. در ادامه ی مثال بالا به اینصورت می شود:
    16 2 4 1 0 0 0 1 1 0 0 0 0 0 0 0
    ضربدر همان 5 که حاصل می شود:
    80 10 20 5 0 0 0 5 5 0 0 0 0 0 0 0
    اما صبر کنید، به این موضوع توجه داشتید که اعداد اصلی (Quantize نشده)، اعداد زیر بودند؟
    83 13 21 5 4 2 1 5 6 2 1 2 2 1 3 1
    بله، این همان Lossy Compression هست و داده های اصلی (ضرایب Quantize نشده) که بعد از Quantize کردن به صفر (Dead Zone) کاهش پیدا کردند دیگر قابل بازیابی "نخواهند" بود. همچنین ضرایب Dequantize شده نیز تفاوت هایی با ضرایب Quantize نشده دارند. هر چقدر Scale factor بزرگتری در نظر گرفته بشود، ضرایب بیشتری به صفر تبدیل می شوند در نتیجه جزئیات بیشتری حذف می شود. و صد البته بوسیله ی همین تکنیک Lossy هست که این چنین میزان های زیاد فشرده سازی که امروزه شاهدش هستیم در فرمت هایی که بر پایه ی DCT می باشند حاصل می شود.


    IDCT , Inverse DCT
    برعکس DCT می باشد. یعنی ضرایب DCT را بصورت داده های محدود قبلی توصیف می کند (بر می گرداند).

    Entropy Coding:
    قدم اصلی بعد از Quantization، تکمیل آن با استفاده از تکنیک های فشرده سازی Lossless میباشد که اینها جزو همان تکنیک ها هستند. Entropy Coding خود به تکنیک های گوناگونی تقسیم می شود که دو مورد از رایج ترین های آنها Huffman Coding و Arithmetic Coding می باشند. (RLE (Run Length Encoding نیز یکی از ساده ترین تکنیک های فشرده سازی داده ها بصورت Lossless می باشد.
    این آلگوریتم ها، "به تنهایی"، بیشتر تاثیرگذاری خود را در شرایطی دارند که میزان ضرایب DCT یکسان زیاد باشند. چیزی که در مناظر طبیعی آنچنان مشاهده نمی شود و وجود "نویز" و Grain نیز عملکرد این آلگوریتم ها را کمرنگ تر خواهند کرد. برای همین قدم اصلی "بعد" از Quantization می باشند و تکمیل کننده ی آن میباشد. به این دلیل که بعد از Quantization، بسیاری از ضرایب به صفر تبدیل می شوند و در نتیجه مقادیر یکسان زیادی یافت می شود.


    ...
    ویرایش توسط M-AUDIO : 03-12-2013 در ساعت 14:00
    :)

  16. کاربران : 25 تشکر کرده اند از شما M-AUDIO برای ارسال این پست سودمند:


  17. #19
    عضو متخصص
    تاریخ عضویت
    May 2012
    ارسال ها
    1,760
    سیستم عامل
    Windows 7 64Bit
    محصول امنیتی
    ESET NOD32
    تشکر تشکر کرده 
    9,558
    تشکر تشکر شده 
    11,810
    اعتبار کاربر
    1

    پیش فرض ZigZag Reordering , ZigZag Scan , Quantization Matrix

    ZigZag Reordering , ZigZag Scan:
    تکنیکی است برای بهبود بخشیدن به عملکرد آلگوریتم های Lossless در بالا. در این روش بجای اینکه داده ها (همان ضرایب DCT موجود در جدول) بصورت خطی در اختیار آلگوریتم های Lossless قرار بگیرند، بصورت زیگزاگ ردیف شده و در اختیار آلگوریتم ها قرار می گیرند و این باعث می شود میزان مقادیر یکسانی که در رشته ی نهایی، در کنار هم قرار می گیرند بیشتر شده و در نتیجه عملکرد آلگوریتم ها ی بالا افزایش یابد. طریقه ی اسکن بلوکها بصورت زیگزاگ در عکس زیر مشخص می باشد:



    Quantization Matrix:
    همونطوری که تقسیم کردن تمام ضرایب DCT به یک Quantization Parameter یکسان امکان پذیر است و کدک هایی نیز همین راه را انجام می دهند، تقسیم کردن ضرایب بر گروهی از Quantization Parameter های متفاوت در میان کدک های امروزی رایج تر می باشد. بطوری که هر ضریب، بر یک Scale Factor متفاوت تقسیم بشود. اینگونه عملیات به شکلی کاملا بهینه تر اتفاق خواهد افتاد. یک Quantization Matrix دقیقا مثل تصویری است که برای DCT Block در بالا قرار داده شد با مقادیر متفاوت. رابطه ی ساده ریاضی بین ضرایب DCT و QP و QM(مخفف Quantization Matrix) به اینصورت خواهد بود:
    (Result[x] = pDCT[x] / (Matrix[x] * Quantizer

    توجهات:
    در فرمت های مدرن تر مانند H264 این رابطه بصورت لگاریتمیک می باشد و به همین راحتی قابل توصیف کردن نمی باشد. Quantization Matrixها برای استاندارد های گوناگون متفاوت می باشند و گاها برای 1 استاندارد، دو ماتریکس متفاوت و استاندارد ارائه می شود. برخی فرمت ها اجازه ی استفاده از ماتریکس های سفارشی (Custom Quantization Matrix) را نیز می دهند. استفاده از ماتریکس های سفارشی در کدک هایی مانند XviD و MPEG-2 بسیار مرسوم بوده است اما در استاندارد H264 به دلیل دارا بودن امکانات ویژه ای مانند Psychovisual Adjustments و AQ و Deblocking، استفاده از ماتریکس های سفارشی و دست ساز تقریبا به فراموشی سپرده شده است. میزان و محدوده Scale Factor نیز کاملا به کدک و فرمت مربوطه وابسته می باشد.

    از آینده نزدیک: در یکی از استانداردهای جدید فشرده سازی به اسم HEVC، دیگر چیزی به نام Macroblock با ابعاد ثابت موجود نمی باشد. در عوض بلوک هایی با سایز متغیر وجود دارند با نام Coding Tree Blocks یا به اختصار CTB، که می توانند با اندازه های 64در64، 32در32 و 16در16 پیکسل باشد. واحد های پایه ی Prediction نیز در این استاندارد Coding Unit یا به اختصار CU نامیده می شوند و اندازه های آنها نیز همانند CTB می باشد. هر CTB می تواند از ترکیب چند CU تشکیل بشود. برای مثال یک CTB با ابعد 64در64 می تواند از ترکیب سه CU با ابعاد 32در32 و چهار CU با ابعاد 16در16 ساخته بشود. DCT Blockها نیز در این استاندارد با نام Transform Unit یا به اختصار TUخوانده می شوند و می توانند با اندازه های 32در32، 16در16، 8در8 باشند و در نهایت 4در4 نیز هست با این تفاوت که برای این سایز از DST یا Discrete Sine Transform استفاده می شود.
    همچنین VP9 که از کدک های مدرن میباشد و توسط گوگل ارائه شده است نیز حاوی SuperBlockهای 64در64 و 32در32 می باشد.

    ...
    :)

  18. کاربران : 25 تشکر کرده اند از شما M-AUDIO برای ارسال این پست سودمند:


  19. #20
    عضو متخصص
    تاریخ عضویت
    May 2012
    ارسال ها
    1,760
    سیستم عامل
    Windows 7 64Bit
    محصول امنیتی
    ESET NOD32
    تشکر تشکر کرده 
    9,558
    تشکر تشکر شده 
    11,810
    اعتبار کاربر
    1

    پیش فرض

    بسم الله الرحمن الرحیم

    با سلام و احترام.

    **سومین ویرایش از مقاله ارائه شد**

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

    به بزرگی ویرایش دوم نبود اما از اهداف ویرایش بگم:
    • روان سازی بیشتر مطالب. خب چون مطالب هر پست از منابع گوناگون هست باید روان تر و منسجم تر می شدند که شدند.
    • برخی شاخ و برگ ها بازهم زده شد یا جابجا شد تا جان مطلب دست یافتنی تر بشه.
    • اصلاح گرامری هم داشتیم. برخی نقطه ها و ویرگول ها در ویرایش دوم از دستمون در رفته بودند.
    • اشتباه لپی هم داشتیم که اصلاح شد. نمونه اش پست Anamorphic بود که نوشته بودم از PAL مثال می زنم اما از NTSC مثال زده بودم و هیچ کس هم مطلب رو به من متذکر نشد حتی دوستانی گه گفتن 3بار خوندن :-)))) و ارادت خاصی هم بهشون داریم.
    • مثال Video Buffer Verifire هم با یک مثال که از spcification مخصوص DVB-S برداشته شده بود جایگزین شد. یک خطای تایپی هم در بیان واحد Buffer داشت که اصلاح شد.
    • اجباری در استفاده از mod16 احساس کردم که دیدم در استانداردهای جدیدتر مثل H264 به بالا زیاد به چشم نمیاد. اصلاح شد.


    دوست داشتم یک سره تا 10bit و chroma subsampling و Color Space هم برم که دیگه فعلا فرصت نیست.

    موفق باشید ;-)
    :)

  20. کاربران : 33 تشکر کرده اند از شما M-AUDIO برای ارسال این پست سودمند:


صفحه 2 از 3 اولیناولین 123 آخرینآخرین

اطلاعات تاپیک

Users Browsing this Thread

در حال حاضر 1 در حال مشاهده این موضوع می باشد.. (0 کاربر و 1 مهمان در این انجمن حضور دارند)

برچسب برای این موضوع

بوک مارک ها

بوک مارک ها

مجوزهای ارسال و ویرایش

  • شما نمی توانید موضوع جدید ارسال کنید
  • شما نمی توانید به پست ها پاسخ دهید
  • شما نمی توانید فایل پیوست ضمیمه کنید
  • شما نمی توانید پست های خود را ویرایش کنید
  •