Pnmnorm User Manual(0) Pnmnorm User Manual(0)

pnmnorm - نرمال‌سازی کنتراست در یک تصویر Netpbm

pnmnorm

[-bpercent=percent | -bvalue=N | -bsingle]

[-wpercent=percent | -wvalue=N | -wsingle]

[-midvalue=N]

[-middle=N]

[-maxexpand=percent]

[-keephues]

[-luminosity | -colorvalue | -saturation]

[ppmfile]

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

این برنامه بخشی از Netpbm(1) است.

دستور pnmnorm یک تصویر PNM (شامل PBM، PGM یا PPM) را می‌خواند. این دستور با وادار کردن درخشان‌ترین پیکسل‌ها به رنگ سفید، تاریک‌ترین پیکسل‌ها به رنگ سیاه و گسترش دادن پیکسل‌های مابین آن‌ها، کنتراست را نرمال‌سازی می‌کند. خروجی این برنامه فایلی از همان نوع تصویر ورودی خواهد بود. این کار برای یک تصویر PBM عملاً کاربردی ندارد.

این برنامه دو روش را برای گسترش دادن پیکسل‌های میان تاریک‌ترین و درخشان‌ترین سطوح ارائه می‌دهد: خطی (linear) و درجه دوم (quadratic). در حالت درجه دوم، شما یک روشنایی میانی و همچنین مقدار روشنایی مورد انتظار آن را در خروجی مشخص می‌کنید. با داشتن این سه قید: روشنایی‌ای که تبدیل به سیاه می‌شود، روشنایی‌ای که تبدیل به سفید می‌شود، و روشنایی‌ای که به مقدار میانی تبدیل می‌شود، pnmnorm یک معادله درجه دوم را محاسبه می‌کند که تمام مقادیر دیگر روشنایی را از مقادیر ورودی به مقادیر خروجی نگاشت می‌کند.

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

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

برای یک تصویر PPM، شما حق انتخاب از بین سه روش برای تعریف روشنایی را دارید:

  • درخشندگی (luminosity)
  • ارزش رنگ (color value)
  • اشباع (saturation)

    در حالت اشباع (saturation)، واژه «روشنایی» بیشتر یک نام‌گذاری نادقیق است، اما می‌توانید از قیاس روشنایی برای درک عملکرد آن استفاده کنید. در این قیاس، روشن به معنای اشباع‌شده و تاریک به معنای غیراشباع است.

توجه داشته باشید که تمام این موارد با نرمال‌سازی جداگانه هر یک از مولفه‌های رنگی متفاوت هستند.

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

علاوه بر گزینه‌های مشترک در تمام برنامه‌های مبتنی بر libnetpbm (به ویژه -quiet، به گزینه‌های مشترک (Common Options) مراجعه کنید)، pnmnorm گزینه‌های خط فرمان زیر را به رسمیت می‌شناسد:

به طور پیش‌فرض، ۲ درصد از تاریک‌ترین پیکسل‌ها به رنگ سیاه و ۱ درصد از درخشان‌ترین پیکسل‌ها به رنگ سفید نگاشت می‌شوند. شما می‌توانید این رفتار پیش‌فرض را لغو کرده و درصدی دیگر مشخص کنید، یا مقادیر مشخصی از روشنایی را برای نگاشت به سیاه و سفید تعیین نمایید، یا صرفاً کاری کنید که تنها بیشترین روشنایی منفرد به سفید و کمترین روشنایی منفرد به سیاه نگاشت شود.

برای تعیین درصد، از گزینه‌های -bpercent و -wpercent استفاده کنید، یا می‌توانید با استفاده از گزینه‌های -bvalue و -wvalue مقادیر دقیق پیکسل‌ها را برای نگاشت مشخص کنید. شما می‌توانید اعداد مناسب برای این گزینه‌ها را از دستور ppmhist به دست آورید. اگر فقط می‌خواهید کنتراست را تقویت کنید، مقادیری را در نقاط شکست (آرنج‌ها) در هیستوگرام انتخاب کنید؛ مثلاً اگر مقدار ۲۹ نماینده ۳٪ از تصویر باشد اما مقدار ۳۰ نماینده ۲۰٪ باشد، مقدار ۳۰ را برای bvalue انتخاب کنید. اگر می‌خواهید تصویر را روشن‌تر کنید، bvalue را روی 0 قرار داده و تنها با wvalue تنظیمات را انجام دهید؛ به همین ترتیب، برای تاریک‌تر کردن تصویر، wvalue را روی maxval قرار داده و با bvalue کار کنید.

اگر هر دو گزینه -bvalue و -bpercent را مشخص کنید، pnmnorm از گزینه‌ای استفاده می‌کند که کمترین تغییر را ایجاد کند. همین موضوع برای -wvalue و -wpercent نیز صادق است. (در Netpbm 10.26 (ژانویه ۲۰۰۵)، -bvalue/-wvalue اولویت دارند، و پیش از آن، تعیین هم‌زمان هر دو یک خطای نحوی بود).

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

مقادیر -bpercent و -wpercent به صورت اعداد اعشاری ممیز شناور هستند. مقدار صفر مجاز است و به ترتیب معادل با -bvalue=0 یا -wvalue=maxval می‌باشد.

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

این امکان وجود دارد که مقدار -bpercent یا -wpercent شما با مقدار -wvalue یا -bvalue تداخل پیدا کند. برای نمونه، شما برای تصویری که در آن تنها ۱۰ درصد از پیکسل‌ها تاریک‌تر از ۱۰۰ هستند، مقدار -bpercent=20 و -wvalue=100 را تعیین کنید. در این صورت، pnmnorm مقدار صدک را بر اساس نیاز تنظیم می‌کند. در این مثال، از ۹۹ به عنوان مقدار سیاه (مانند -bvalue=99) استفاده می‌کند.

همچنین ممکن است به دلیل این واقعیت که pnmnorm نمی‌تواند یک خانه از جدول هیستوگرام را خرد کند، گزینه‌های -bpercent و -wpercent شما مقدار روشنایی یکسانی را برای گسترش به سفید و گسترش به سیاه انتخاب کنند. مثلاً اگر یک تصویر سراسر دارای روشنایی ۱۰۰ باشد، صرف‌نظر از اینکه چه مقادیری برای -bpercent و -wpercent انتخاب کنید، معادل با گفتن -bvalue=100 -wvalue=100 خواهد بود. در این حالت، pnmnorm یکی از مقادیر را به اندازه ۱ تغییر می‌دهد تا معتبر شود. در این مثال، pnmnorm یا مقدار سیاه را ۹۹ یا مقدار سفید را ۱۰۱ قرار می‌دهد.

پیش از Netpbm 10.43 (ژوئن ۲۰۰۸)، اگر مقادیر -wpercent و/یا -bpercent هم‌پوشانی ایجاد می‌کردند، pnmnorm با خطا متوقف می‌شد.

نقاط گسترش علاوه بر این توسط گزینه -maxexpand محدود می‌شوند. گاهی اوقات کنتراست بیش از حد چیز بدی است. اگر شدت‌های روشنایی شما همگی در میانه متمرکز باشند، -bpercent=2 و -wpercent=1 ممکن است به این معنا باشد که شدت ۶۰ تا ۱۰۰ گسترش یابد و شدت ۲۰ تا صفر کاهش یابد، که منجر به انبساط محدوده به میزان ۱۵۰٪ می‌شود (از محدوده‌ای با طول ۴۰ به محدوده‌ای با طول ۱۰۰). این مقدار گسترش یعنی دو پیکسل مجاور که قبلاً در شدت روشنایی ۴ واحد با هم تفاوت داشتند، اکنون ۱۰ واحد تفاوت دارند، و این ممکن است ناخوشایند باشد.

برای تعیین اینکه کمترین روشنایی منفرد در تصویر باید به رنگ سیاه در خروجی گسترش یابد، -bsingle را مشخص کنید. برای تعیین اینکه بیشترین روشنایی منفرد در تصویر به رنگ سفید در خروجی گسترش یابد، -wsingle را مشخص نمایید. گزینه‌های -bsingle و -wsingle در Netpbm 10.69 (دسامبر ۲۰۱۴) اضافه شدند.

برای اینکه بتوانید بدون نیاز به بررسی قبلی تصویر، محدودیتی بر میزان گسترش اعمال کنید، گزینه -maxexpand وجود دارد. این گزینه حداکثر گسترشی را که تحمل می‌کنید، به صورت یک درصد اضافی مشخص می‌کند. در مثال بالا، می‌توانید با تعیین -maxexpand=50 اعلام کنید که می‌خواهید محدوده حداکثر تا ۵۰٪ گسترش یابد، صرف‌نظر از سایر گزینه‌های انتخابی شما. pnmnorm همان‌طور که در بالا توضیح داده شد تعیین می‌کند چه شدتی را به شدت کامل و چه شدتی را به شدت صفر گسترش دهد، و سپس در صورت نیاز اولی را کاهش و دومی را افزایش می‌دهد تا گسترش را به مقداری که مشخص کرده‌اید محدود سازد.

هنگامی که pnmnorm گسترش را به دلیل -maxexpand محدود می‌کند، پیامی شبیه به این به شما نشان می‌دهد:

<span style="font-family: monospace">
    limiting expansion of 150% to 50%
</span>

در هر صورت، pnmnorm دقیقاً به شما اطلاع می‌دهد که چه گسترشی را انجام می‌دهد، مانند این:

<span style="font-family: monospace">
    remapping 25..75 to 0..100
</span>

پیش از Netpbm 10.26 (دسامبر ۲۰۰۴)، تعیین هم‌زمان -bvalue و -bpercent یا -wvalue و -wpercent مجاز نبود.

گزینه -maxexpand در Netpbm 10.32 (فوریه ۲۰۰۶) اضافه شد.

این گزینه دستور می‌دهد تا ته‌رنگ (hue) هر پیکسل دقیقاً همان‌گونه که در ورودی است حفظ شود؛ و فقط روشنایی آن تنظیم گردد. معمولاً شما همین رفتار را می‌خواهید؛ تنها دلیلی که این گزینه رفتار پیش‌فرض نیست، سازگاری رو به عقب (پس‌رو) با یک اشتباه طراحی قدیمی است.

به طور پیش‌فرض، pnmnorm کنتراست را در هر مولفه به صورت مستقل نرمال‌سازی می‌کند (به جز اینکه مفهوم گزینه‌های -wpercent و -bpercent بر اساس روشنایی کلی رنگ‌ها است، نه هر مولفه به صورت جداگانه). بنابراین اگر رنگی داشته باشید که قرمزی شدید اما سبزی بسیار کم‌رنگی دارد، pnmnorm رنگ قرمز را شدیدتر و سبز را کم‌رنگ‌تر می‌کند، بنابراین در نهایت با ته‌رنگی متفاوت از آنچه با آن شروع کرده بودید مواجه می‌شوید.

هنگامی که -midvalue=N را مشخص می‌کنید، pnmnorm از یک تابع درجه دوم برای نگاشت روشنایی‌های قدیم به جدید استفاده می‌کند و اطمینان حاصل می‌کند که روشنایی قدیمی با مقدار N در خروجی به ۵۰٪ روشنایی تبدیل شود. می‌توانید این مقدار پیش‌فرض ۵۰٪ را با -middle تغییر دهید. مقدار -middle یک عدد ممیز شناور در بازه 0 تا 1 است که در آن 0 نشان‌دهنده تاریکی مطلق و 1 نشان‌دهنده روشنایی کامل است. اگر مقادیر -midvalue و -middle شما بیانگر یک تابع درجه دوم مبهم یا غیرممکن باشد (مثلاً -midvalue با -bvalue یکسان باشد، به طوری که بی‌نهایت تابع درجه دوم بر آن منطبق شوند)، pnmnorm صرفاً مقدار -midvalue شما را نادیده گرفته و نگاشت را به صورت خطی انجام می‌دهد.

گزینه‌های -midvalue و -middle در Netpbm 10.57 (دسامبر ۲۰۱۱) اضافه شدند.

اگر -keephues را مشخص کنید، pnmnorm احتمالاً به این پیکسل دست نخواهد زد، زیرا روشنایی کلی آن متوسط است.

گزینه -keephues می‌تواند باعث برش (clipping) شود، زیرا ممکن است یک رنگ معین زیر شدت هدف باشد در حالی که یکی از مولفه‌های آن به حد اشباع رسیده باشد. در این موارد، pnmnorm از حداکثر شدت قابل نمایش برای مولفه اشباع‌شده استفاده می‌کند و در نتیجه پیکسل با شدت کلی کمتر و ته‌رنگی متفاوت از آنچه قرار بود باشد مواجه می‌شود.

این گزینه روی تصاویر مقیاس خاکستری (grayscale) بی‌معنی است.

هنگامی که -keephues را تعیین نمی‌کنید، گزینه‌های -luminosity، -colorvalue و -saturation بر تابع تبدیل اثر می‌گذارند (که برای هر سه مولفه RGB یکسان است)، اما در زمان اعمال تابع تبدیل بی‌تاثیر هستند (زیرا روی تک‌تک مولفه‌های RGB اعمال می‌شود).

پیش از Netpbm 9.25 (مارس ۲۰۰۲)، گزینه -keephues وجود نداشت.

گزینه‌های -luminosity، -colorvalue و -saturation تعیین می‌کنند که pnmnorm کدام ویژگی پیکسل‌ها را نرمال‌سازی کند؛ به عبارت دیگر، چه نوعی از روشنایی. شما نمی‌توانید بیش از یکی از این گزینه‌ها را مشخص کنید.

گزینه -luminosity دستور می‌دهد تا از درخشندگی (یعنی "Y" در فضای رنگی YUV یا YCbCr) به عنوان روشنایی پیکسل استفاده شود. درخشندگی معیاری است از اینکه چشم انسان چه میزان روشنایی برای رنگ درک می‌کند، با در نظر گرفتن این واقعیت که چشم انسان نسبت به برخی از مولفه‌های RGB حساس‌تر از بقیه است.

این گزینه پیش‌فرض است.

این گزینه روی تصاویر مقیاس خاکستری بی‌معنی است.

پیش از Netpbm 10.28 (اوت ۲۰۰۵)، گزینه -luminosity وجود نداشت، اما مفهوم آن همچنان حالت پیش‌فرض بود.

پیش از Netpbm 10.28 (اوت ۲۰۰۵)، گزینه -colorvalue وجود نداشت.

گزینه -colorvalue دستور می‌دهد از ارزش رنگ (یعنی "V" در فضای رنگی HSV) به عنوان روشنایی پیکسل استفاده شود. ارزش رنگ شدت تصحیح‌شده با گامای (gamma-adjusted) شدیدترین مولفه RGB است.

این گزینه روی تصاویر مقیاس خاکستری بی‌معنی است.

پیش از Netpbm 10.28 (اوت ۲۰۰۵)، گزینه -colorvalue وجود نداشت.

گزینه -saturation دستور می‌دهد از اشباع (یعنی "S" در فضای رنگی HSV) به عنوان روشنایی پیکسل استفاده شود. اشباع نسبت شدت شدیدترین مولفه RGB به تفاضل بین شدت‌های شدیدترین و ضعیف‌ترین مولفه RGB است (تمام شدت‌ها با گاما تصحیح شده‌اند).

در این حالت، «روشنایی» بیشتر یک استعاره است تا هر چیز دیگر؛ «روشن» به معنای اشباع‌شده و «تاریک» به معنای غیراشباع است.

این گزینه روی تصاویر مقیاس خاکستری بی‌معنی است.

پیش از Netpbm 10.28 (اوت ۲۰۰۵)، گزینه -colorvalue وجود نداشت.

pnmhisteq(1), pamlevels(1), ppmhist(1), pgmhist(1), pambrighten(1), ppmdim(1), pnmgamma(1), pnm(1)

این صفحه راهنما توسط ابزار 'makeman' در Netpbm از منبع HTML تولید شده است. مستندات اصلی در نشانی زیر قرار دارد:

http://netpbm.sourceforge.net/doc/pnmnorm.html
19 December 2014 netpbm documentation