pamhomography(1) General Commands Manual pamhomography(1)

<script type="text/javascript" src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script> <script type="text/javascript" id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>

pamhomography - کشیدن/جمع کردن یک ناحیهٔ چهارضلعی از تصویر به یک شکل چهارضلعی دیگر

pamhomography
[-from=coords]
[-to=coords]
[-mapfile=map_file]
[-view=coords]
[-fill=color]
[-verbose
[pam_file]

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

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

برنامهٔ pamhomography یک بخش چهارضلعی دلخواه از تصویر ورودی را که شما مشخص می‌کنید (که لزوماً مستطیلی نیست) کشیده یا فشرده می‌کند و آن را به یک شکل چهارضلعی جدید مشخص‌شده توسط شما تبدیل کرده و تصویر جدیدی تولید می‌نماید.

شما می‌توانید هرگونه تبدیل هندسی آفین (affine) تصویر را انجام دهید: انتقال (جابه‌جایی)، بازتاب، مقیاس‌بندی، دوران (چرخش) و کج کردن/اریب‌سازی (shearing/skewing). با این حال، pamhomography افزون بر این می‌تواند تبدیلات دوخطی (bilinear) را انجام دهد، به این معنی که می‌تواند هر چهارضلعی را به هر چهارضلعی دیگر نگاشت کند (بپیچاند)، حتی زمانی که این نگاشت نتواند با یک مجموعه معادلات خطی واحد توصیف شود. این قابلیت می‌تواند مثلاً برای ایجاد نماهای پرسپکتیو از تصاویر مستطیلی یا برای نگاشت معکوس یک نمای پرسپکتیو به یک تصویر مستطیلی مفید باشد.

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

چهارضلعی مبدأ را مشخص می‌کند. coords فهرستی از چهار مختصات با مقادیر صحیح (x, y) است. اگر مبدأ را با -from یا -mapfile مشخص نکنید، چهارضلعی مبدأ کل تصویر ورودی در نظر گرفته می‌شود.

چهارضلعی مقصد را مشخص می‌کند. coords فهرستی از چهار مختصات با مقادیر صحیح (x, y) است. اگر مقصد را با -to یا -mapfile مشخص نکنید، چهارضلعی مقصد همان کل تصویر ورودی در نظر گرفته می‌شود.

نام یک فایل متنی را مشخص می‌کند که نگاشت از چهارضلعی مبدأ به چهارضلعی مقصد را توصیف می‌نماید. فایل map_file باید شامل هشت مختصات با مقادیر صحیح (x, y) باشد، شامل چهار مختصات مبدأ که به دنبال آن‌ها چهار مختصات متناظر مقصد می‌آیند، یا اینکه تنها شامل چهار مختصات (x, y) باشد که صرفاً چهار مختصات مقصد هستند. در حالت دوم، چهارضلعی مبدأ برابر با چهار گوشهٔ تصویر ورودی به ترتیب ساعت‌گرد با شروع از گوشهٔ بالا-چپ در نظر گرفته می‌شود.

هر آنچه با -to یا -from مشخص کنید، محتوای این فایل را لغو و جایگزین می‌کند.

نمای مقصد را مشخص می‌کند. coords فهرستی از دو مختصات با مقادیر صحیح (x, y) است: به ترتیب مرزهای بالا-چپ و پایین-راستِ پیکسل‌هایی که در تصویر خروجی قابل مشاهده خواهند بود. اگر -view مشخص نشود، نمای مقصد دقیقاً با چهارضلعی مقصد منطبق خواهد شد.

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

پیش‌فرض رنگ سیاه است، و برای تصاویری که دارای صفحهٔ شفافیت (transparency plane) هستند، شفاف است.

باعث می‌شود برنامه پیام‌های اطلاعاتی دربارهٔ آنچه در حال انجام آن است صادر کند.

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

تنها پارامتر pamhomography، یعنی pam_file، نام فایلی است که تصویر ورودی را در بر دارد. اگر pam_file را مشخص نکنید، تصویر از ورودی استاندارد خوانده می‌شود.

تصویر خروجی از همان قالب Netpbm تصویر ورودی استفاده می‌کند.

تبدیلات ساده بهتر است توسط برنامه‌های دیگر Netpbm انجام شوند، مانند برنامه‌هایی که در بخش «همچنین ببینید» (SEE ALSO) در ادامه فهرست شده‌اند. از pamhomography برای تبدیلات پیچیده‌تر مانند تنظیمات پرسپکتیو، دوران حول یک نقطهٔ دلخواه در تصویر، استخراج چهارضلعی‌های غیرمستطیلی، اریب‌سازی (shearing) با استفاده از مختصات به جای زاویه، و به‌طور کلی تمام تبدیلاتی که به ساده‌ترین شکل با نگاشت چهار نقطه از یک تصویر به چهار نقطه در تصویر دیگر بیان می‌شوند، استفاده کنید.

مثال‌های زیر از تصویر آزمایشی park_row.ppm استفاده می‌کنند، که عکسی از ساختمان پارک رو (Park Row Building) نیویورک است که در ابعاد ۴۴۱×۶۴۰ مقیاس‌بندی شده، به یک فایل PPM تبدیل گشته و بر اساس شروط مجوز GFDL بازنشر شده است.

اولین مثال، قدرت واقعی تبدیلات دوخطی (bilinear) را نشان می‌دهد. با فرض اینکه park_row_rect.map دارای محتوای زیر باشد:

(0,  0) (440,   0) (440, 639)  (0, 639)</pre>
آن‌گاه

نمای جلوی ساختمان را از یک نمای پرسپکتیو به یک نمای روبروی مستقیم و مستطیلی تصویر می‌کند. به یاد داشته باشید که pamhomography پرانتزها و کاماهای استفاده‌شده در park_row_rect.map را نادیده می‌گیرد؛ آن‌ها صرفاً برای خواناتر شدن فایل توسط انسان هستند. می‌توانستیم به صورت معادل بنویسیم:

یا هر نوع دیگری از تنوع‌های بی‌شمار.
برنامهٔ pamhomography می‌تواند تصویر را به یک ذوزنقه تبدیل کند تا به نظر برسد در فضای سه‌بعدی به عقب متمایل شده است:

به عنوان یک مثال بسیار ساده،

تصویر را از چپ به راست قرینه (معکوس) می‌کند. توجه داشته باشید که در این حالت مختصات چهارضلعی مقصد به ترتیب پادساعت‌گرد فهرست شده‌اند، زیرا این ترتیب متناظر است با انطباق بین نقاط (0, 0) &harr; (440, 0) و (0, 639) &harr; (639, 0).
مقیاس‌بندی نیز سرراست است. دستور زیر ابعاد تصویر را از ۴۴۱×۶۴۰ به ۳۴۱×۵۴۰ کاهش می‌دهد:

بیایید ۱۰۰ پیکسل کادر خرمایی (tan) به تصویر بالا اضافه کنیم. برای انجام این کار از -view و -fill استفاده می‌کنیم:

می‌توانیم بدون نیاز به تغییر مقیاس تصویر، کادر به آن بیفزاییم:

گزینهٔ -view همچنین می‌تواند برای استخراج یک مستطیل از یک تصویر و دور ریختن بقیهٔ تصویر استفاده شود:

تعیین همان مجموعه مختصات برای -from و -to همان اثر را دارد، اما افزون بر این به شما امکان می‌دهد چهارضلعی‌های غیرمستطیلی را از یک تصویر استخراج کنید:

دوران امکان‌پذیر است اما نیازمند اندکی تلاش است. چالش اینجاست که خودتان باید مختصات دوران‌یافته را محاسبه کنید. عبارت ماتریسی برای دوران ساعت‌گرد نقاط \((x_1, y_1)\)، \((x_2, y_2)\)، \((x_3, y_3)\) و \((x_4, y_4)\) به اندازهٔ \(\theta\) درجه حول نقطهٔ \((c_x, c_y)\) برابر است با:
\[ \begin{bmatrix} 1 & 0 & c_x \\ 0 & 1 & c_y \\ 0 & 0
& 1 \end{bmatrix} \begin{bmatrix} \cos \theta & -\sin \theta & 0
\\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix}
\begin{bmatrix} 1 & 0 & -c_x \\ 0 & 1 & -c_y \\ 0 & 0
& 1 \end{bmatrix} \begin{bmatrix} x_1 & x_2 & x_3 & x_4 \\ y_1
& y_2 & y_3 & y_4 \\ 1 & 1 & 1 & 1 \end{bmatrix}
\quad. \]
به عنوان مثال، برای دوران ۳۰ درجه ساعت‌گرد فایل park_row.ppm حول (220, 320) این عبارت را محاسبه می‌کنید:
\[ \begin{bmatrix} 1 & 0 & 220 \\ 0 & 1 & 320 \\ 0 & 0
& 1 \end{bmatrix} \begin{bmatrix} \cos 30^{\circ} & -\sin 30^{\circ}
& 0 \\ \sin 30^{\circ} & \cos 30^{\circ} & 0 \\ 0 & 0 & 1
\end{bmatrix} \begin{bmatrix} 1 & 0 & -220 \\ 0 & 1 & -320 \\
0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 0 & 440 & 440 & 0
\\ 0 & 0 & 639 & 639 \\ 1 & 1 & 1 & 1 \end{bmatrix} =
\begin{bmatrix} 189.4744 & 570.5256 & 251.0256 & -130.0256 \\
-67.1281 & 152.8719 & 706.2621 & 486.2621 \\ 1.0000 & 1.0000
& 1.0000 & 1.0000 \end{bmatrix} \quad, \]
این مختصات را به نزدیک‌ترین اعداد صحیح گرد کنید، ماتریس را ترانهاده (transpose) کنید، و فایل نگاشت زیر را با نام park_row_rot30.map تولید نمایید:
     571  153
     251  706
    -130  486</pre>
(این‌ها مختصات 'to' هستند؛ ما از مختصات پیش‌فرض و تمام‌تصویر 'from' استفاده می‌کنیم.) سپس نگاشت همانند تمام مثال‌های قبلی عمل می‌کند:

برنامهٔ pamhomography در Netpbm نسخهٔ 10.94 (مارس 2021) معرفی شد.

حق نشر © ۲۰۲۰ متعلق به اسکات پاکین (Scott Pakin)، scott+pbm@pakin.org

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

http://netpbm.sourceforge.net/doc/pamhomography.html
04 December 2022 netpbm documentation