y4mdenoise(1) MJPEG tools manual y4mdenoise(1)

y4mdenoise - کاهش نویز و فیلتر تداخل در جریان‌های ویدئویی YUV4MPEG2 با جبران حرکت

y4mdenoise [-v verbosity] [-p parallelism] [-r motion-search_radius] [-R color_motion-search_radius] [-t error_tolerance] [-T color_error_tolerance] [-z zero_motion_error_tolerance] [-Z color_zero_motion_error_tolerance] [-m match-count_throttle] [-M match-size_throttle] [-f reference_frames] [-B] [-I interlacing_type] < /dev/stdin > /dev/stdout

ابزار y4mdenoise می‌تواند برای حذف نویز از تصاویر در یک جریان YUV4MPEG2 استفاده شود. این کار برای پاک‌سازی منابع ویدئویی قدیمی جهت افزایش کیفیت تصویر و کاهش نرخ بیت مورد نیاز برای انکود ویدئو (مانند ساخت دیسک‌های VCD و SVCD) بسیار سودمند است.

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

جستجو در عمل تک‌پیکسلی انجام نمی‌شود، بلکه بر اساس گروه‌های پیکسلی است. برای یافتن یک تطابق، یک گروه پیکسلی باید به طور کامل مطابقت داشته باشد، اما تمامی حالت‌های ممکن گروه‌های پیکسلی آزموده می‌شوند (یعنی تمامی ترکیب‌های هم‌پوشان بررسی می‌گردند). استفاده از گروه‌های پیکسلی کمک می‌کند تا حداقل استانداردی برای آنچه تطابق نامیده می‌شود تعیین شود، تا از یافتن تطابق‌های بسیار کوچک و بی‌فایده جلوگیری به عمل آید. در حال حاضر، گروه‌های پیکسلی روشنایی (Intensity) با ابعاد ۴x۲ (یعنی ۴ پیکسل افقی و ۲ پیکسل عمودی) و گروه‌های پیکسلی رنگی با ابعاد ۲x۲ هستند.

این ابزار هر گروه پیکسلی در فریم جاری را با تمامی گروه‌های پیکسلی در فریم پیشین در محدوده شعاع جستجوی مشخص‌شده مقایسه می‌کند و آن‌ها را بر اساس میزان نزدیکی تطابق مرتب کرده و بهترین موارد را نگه می‌دارد. سپس هر گروه پیکسلی یافت‌شده را به نوبت با روش پر کردن سیلابی (Flood-Fill) بررسی می‌کند تا اندازه کامل تطابق را مشخص سازد. نخستین تطابقی که به اندازه کافی بزرگ باشد روی تصویر اعمال می‌شود. تعداد گزینه‌های مورد بررسی و حداقل اندازه تطابق را می‌توان در خط فرمان مشخص کرد.

در پایان پردازش فریم، هر پیکسلی از فریم جدید که هنوز حل نشده باشد به عنوان اطلاعات جدید در نظر گرفته می‌شود و یک پیکسل مرجع تازه برای آن ایجاد می‌گردد.

پیش از تشخیص حرکت، در هر فریم یک مرحله «بررسی حرکت صفر» (Zero-Motion Pass) انجام می‌شود تا بخش عمده فریم با هزینه پردازشی کم پردازش شود. آستانه خطای این مرحله را می‌توان به طور جداگانه تنظیم کرد.

برنامه y4mdenoise گزینه‌های زیر را می‌پذیرد:

میزان پرگویی خروجی: ۰ = خاموش، ۱ = عادی (نمایش آمار تشخیص پیکسل به ازای هر فریم)، ۲ = اشکال‌زدایی (دیباگ).
سطح موازی‌سازی را کنترل می‌کند. از آنجا که طبق طراحی، پردازش نویز روشنایی و رنگ به صورت جداگانه انجام می‌شود، اجرای موازی هر یک در سیستم‌های چندپردازنده‌ای بسیار آسان است. مقدار پیش‌فرض ۱ است که خواندن و نوشتن فریم‌ها را به صورت همگام با حذف نویز انجام می‌دهد. مقدار ۲ باعث می‌شود حذف نویز روشنایی و رنگ به طور موازی اجرا شوند. مقدار ۳ هر دو نوع همزمانی را فعال می‌کند. مقدار ۰ هرگونه همزمانی و موازی‌سازی را غیرفعال می‌سازد.
شعاع جستجو؛ یعنی بیشترین فاصله‌ای که یک پیکسل می‌تواند حرکت کند و همچنان توسط الگوریتم تشخیص حرکت پیدا شود. مقدار پیش‌فرض ۱۶ است. محدودیت خاصی برای شعاع جستجو وجود ندارد (نیازی نیست که مضرب ۴ باشد).
شعاع جستجو برای مؤلفه‌های رنگی. پیش‌فرض برابر با مقدار تعیین‌شده برای شعاع جستجوی اصلی است. توجه داشته باشید که این مقدار بر اساس اندازه نسبی صفحات روشنایی و رنگ در جریان YUV4MPEG2 مقیاس‌بندی می‌شود.
بیشترین میزان اختلاف میان دو پیکسل که برای یکسان فرض شدن آن‌ها پذیرفته می‌شود. مقدار پیش‌فرض ۳ است که برای منابع با نویز متوسط مانند تلویزیون کابلی آنالوگ مناسب است (این مقدار برای جلوگیری از نتایج نامطلوب باید متناسب با جریان YUV4MPEG2 شما تنظیم شود. بخش نکات کاربردی را ببینید).
آستانه تحمل خطا برای رنگ. پیش‌فرض برابر با مقدار تعیین‌شده برای آستانه خطای اصلی است.
آستانه تحمل خطا برای پیکسل‌هایی که حرکت نکرده‌اند. معمولاً برابر با آستانه خطای اصلی یا یک واحد کمتر از آن است. پیش‌فرض ۲ است.
آستانه تحمل خطا برای بررسی حرکت صفر در مؤلفه‌های رنگی. پیش‌فرض برابر با آستانه خطای حرکت صفر اصلی است.
حداکثر تعداد تطابق‌های گروه‌های پیکسلی (در محدوده شعاع جستجو) که مورد بررسی قرار می‌گیرند. اگر موارد بیشتری یافت شود، فقط نزدیک‌ترین تطابق‌ها حفظ می‌شوند. مقدار پیش‌فرض ۱۵ است.
حداقل اندازه ناحیه پر شده با الگوریتم سیلابی که از یک تطابق تولید می‌شود. تطابق‌های کوچک‌تر از این مقدار نادیده گرفته می‌شوند. این مقدار بر حسب تعداد گروه‌های پیکسلی مشخص می‌شود و پیش‌فرض آن ۳ است.
تعداد فریم‌های مرجع برای نگهداری. مقادیر پیکسل‌ها پیش از نوشته شدن در خروجی استاندارد، میانگین این تعداد فریم محاسبه می‌شوند؛ این امر همچنین به این معناست که خروجی به اندازه همین تعداد فریم تاخیر خواهد داشت. مقدار پیش‌فرض ۱۰ است.
حالت سیاه‌وسفید. فقط صفحه روشنایی (Intensity) نویززدایی می‌شود و صفحه رنگ به رنگ کاملاً سفید تنظیم می‌گردد.
تعیین نوع درهم‌بافی (Interlacing). مقدار پیش‌فرض از هدر جریان YUV4MPEG2 خوانده می‌شود. مقدار ۰ به معنی بدون درهم‌بافی (Progressive)، مقدار ۱ به معنی فیلد بالایی اول (Top-field) و مقدار ۲ به معنی فیلد پایینی اول (Bottom-field) است. این گزینه زمانی کاربرد دارد که ماهیت اصلی سیگنال با نمایش فعلی آن متفاوت باشد (برای نمونه اگر فیلمی با نگاتیو سینمایی ضبط شده و سپس به ویدئوی درهم‌بافته تبدیل شده باشد، اگر به عنوان ویدئوی بدون درهم‌بافی پردازش شود حذف نویز بهتری خواهد داشت).

به یاد داشته باشید که تمامی این توصیه‌ها بر اساس تجربه به دست آمده‌اند (صرفاً به این دلیل که فردی ابزاری را می‌نویسد به این معنا نیست که نحوه کاربرد بهینه آن را می‌داند، درست مانند طراحان خودرو که لزوماً رانندگان حرفه‌ای نیستند).

آستانه خطا باید برای هر جریان YUV4MPEG2 به طور جداگانه تعیین شود. اگر آستانه بیش از حد پایین تنظیم شود، نویز در ویدئو باقی می‌ماند و برنامه بسیار کندتر از حد معمول اجرا خواهد شد. اگر خیلی بالا تنظیم شود، ابزار شروع به حذف جزئیات تصویر می‌کند: ویدئو مات‌تر و تار می‌شود، ممکن است نوارهای توپوگرافیک‌مانند در نواحی یکنواخت ویدئو پدیدار شوند و بخش‌های کوچکی از تصویر که باید متحرک باشند در جای خود ثابت بمانند. همچنین ممکن است سرعت پردازش کمی کاهش یابد. افزون بر این، صرفاً دریافت ویدئو از یک منبع تمیز (مانند تلویزیون دیجیتال کابلی یا دیسک‌های LaserDisc) به معنی تمیز بودن ویدئوی نهایی نیست؛ برنامه y4mdenoise می‌تواند نویزهای موجود در ضبط اصلی و خطاهای نمونه‌برداری دستگاه کپچر را نیز تشخیص دهد. شما باید بخش‌های نمونه کوتاهی از ویدئوی خود را آماده کنید، آن‌ها را با آستانه‌های خطای گوناگون نویززدایی نمایید و بهترین نتیجه بصری را انتخاب کنید. با کسب تجربه در کار با ابزار، متوجه خواهید شد چه آستانه‌ای برای انواع مختلف منابع مناسب است، اما همواره فرضیات خود را دوباره بیازمایید.

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

در اینجا تجربیات نویسنده برنامه آورده شده است:

-t 1 : تلویزیون کابلی دیجیتال، بیشتر دیسک‌های LaserDisc، ویدئوهای دوربین دیجیتال DV
-t 2 : ویدئوهای دوربین آنالوگ VHS، نوارهای ویدئویی تولید تجاری
-t 3 : تلویزیون کابلی آنالوگ، نوار ویدئویی VHS (با سرعت ضبط ۲ ساعته)
-t 4 : نوار ویدئویی VHS (با سرعت ضبط ۶ ساعته)

ویدئوهای درهم‌بافته‌ای که از منابع بدون درهم‌بافی ساخته شده‌اند (مانند نوار یا لیزردیسک برگرفته از نگاتیو فیلم سینمایی) باید به صورت بدون درهم‌بافی نویززدایی شوند، در غیر این صورت تصویر حالت دانه‌دانه (Grainy) به خود می‌گیرد.

برنامه y4mdenoise تنها نویز زمانی (Temporal Noise، یعنی نویزی که در طول زمان رخ می‌دهد) را حذف می‌کند. از آنجا که این کار را بسیار عالی انجام می‌دهد، نویز مکانی (Spatial Noise، نویزی که در نواحی مجاور یک فریم رخ می‌دهد) بسیار مشهودتر خواهد شد. بنابراین همیشه خروجی y4mdenoise را به یک فیلتر مکانی مانند y4mspatialfilter یا yuvmedianfilter هدایت (Pipe) کنید.

هنگام تولید ویدئو با نرخ بیت بسیار پایین (مانند ویدئوهای سازگار با VCD زیر ۹۰۰ کیلوبیت بر ثانیه)، نویززدایی را در اندازه فریم خروجی انجام دهید (یعنی در اندازه DVD فریم را نویززدایی نکنید و سپس به اندازه VCD کوچک نکنید). این کار علاوه بر حذف نویز، فریم را برای بخش تشخیص حرکت برنامه mpeg2enc آماده می‌کند. در صورت عدم رعایت این نکته، صحنه‌های ساده بسیار باکیفیت به نظر می‌رسند اما صحنه‌های با حرکت سریع دچار تاری و کشیدگی شدید می‌شوند.

فشرده‌سازی JPEG فریم‌های ویدئو (حتی با کیفیت ۱۰۰٪) به اندازه کافی خطای داده دارد که بر انکود MPEG تاثیر بگذارد. بنابراین اگر از فایل‌های موشن JPEG به عنوان فرمت میانی استفاده می‌کنید، بهتر است فیلتر کاهش نویز را در خط لوله انکود MPEG (یعنی پس از lav2yuv و پیش از mpeg2enc) قرار دهید. اگر چندین رزولوشن از یک ویدئو تولید می‌کنید (مانند DVD و VCD)، تجربه نشان داده اجرای y4mdenoise پیش از yuv2lav قابل قبول است، اما همچنان باید از فیلترهای مکانی (مانند y4mspatialfilter یا yuvmedianfilter) در خط لوله انکود MPEG استفاده کنید تا جلوه‌های نامطلوب فشرده‌سازی JPEG را هموار سازید.

بخش عمده کد برنامه y4mdenoise و این صفحه راهنما توسط Steven Boswell به نشانی <ulatec@users.sourceforge.net> نوشته شده است.

اگر پرسش، نظر، مشکلی دارید یا می‌خواهید با توسعه‌دهندگان ارتباط برقرار کنید، فهرست پستی اصلی ابزارهای MJPEG به نشانی زیر در دسترس است:

mjpeg-users@lists.sourceforge.net

برای اطلاعات بیشتر به وب‌سایت پروژه مراجعه کنید:

http://mjpeg.sourceforge.net

mjpegtools(1), mpeg2enc(1), yuvdenoise(1), yuvmedianfilter(1)

27 Apr 2004 MJPEG Tools Team