pamhomography(1) General Commands Manual pamhomography(1)
نام (NAME)
pamhomography - کشیدن/جمع کردن یک ناحیهٔ چهارضلعی از تصویر به یک شکل
چهارضلعی دیگر
خلاصه دستور (SYNOPSIS)
pamhomography
[-from=coords]
[-to=coords]
[-mapfile=map_file]
[-view=coords]
[-fill=color]
[-verbose
[pam_file]
میتوانید هر گزینه را به کوتاهترین پیشوند یکتای آن خلاصه کنید. میتوانید
به جای یک خط تیره از دو خط تیره برای مشخص کردن گزینه استفاده کنید.
همچنین میتوانید یک گزینه را به جای = با نویسه فاصله (whitespace) از
مقدار آن جدا نمایید.
توضیحات (DESCRIPTION)
این برنامه بخشی از Netpbm است.
برنامهٔ pamhomography یک بخش چهارضلعی دلخواه از تصویر ورودی را که شما
مشخص میکنید (که لزوماً مستطیلی نیست) کشیده یا فشرده میکند و آن را به یک
شکل چهارضلعی جدید مشخصشده توسط شما تبدیل کرده و تصویر جدیدی تولید
مینماید.
شما میتوانید هرگونه تبدیل هندسی آفین (affine) تصویر
را انجام دهید: انتقال (جابهجایی)، بازتاب، مقیاسبندی، دوران (چرخش) و کج
کردن/اریبسازی (shearing/skewing). با این حال، pamhomography افزون بر
این میتواند تبدیلات دوخطی (bilinear) را انجام دهد، به این معنی که
میتواند هر چهارضلعی را به هر چهارضلعی دیگر نگاشت کند (بپیچاند)، حتی
زمانی که این نگاشت نتواند با یک مجموعه معادلات خطی واحد توصیف شود. این
قابلیت میتواند مثلاً برای ایجاد نماهای پرسپکتیو از تصاویر مستطیلی یا
برای نگاشت معکوس یک نمای پرسپکتیو به یک تصویر مستطیلی مفید باشد.
گزینهها (OPTIONS)
علاوه بر گزینههای مشترک بین تمام برنامههای مبتنی بر libnetpbm (بهویژه
-quiet، به گزینههای عمومی (Common Options)
مراجعه کنید)، pamhomography گزینههای خط فرمان زیر را میشناسد:
-from=coords
چهارضلعی مبدأ را مشخص میکند. coords فهرستی از چهار مختصات با
مقادیر صحیح (x, y) است. اگر مبدأ را با -from یا -mapfile مشخص
نکنید، چهارضلعی مبدأ کل تصویر ورودی در نظر گرفته میشود.
-to=coords
چهارضلعی مقصد را مشخص میکند. coords فهرستی از چهار مختصات با
مقادیر صحیح (x, y) است. اگر مقصد را با -to یا -mapfile مشخص
نکنید، چهارضلعی مقصد همان کل تصویر ورودی در نظر گرفته میشود.
-mapfile=map_file
نام یک فایل متنی را مشخص میکند که نگاشت از چهارضلعی مبدأ به
چهارضلعی مقصد را توصیف مینماید. فایل map_file باید شامل هشت
مختصات با مقادیر صحیح (x, y) باشد، شامل چهار مختصات مبدأ که به
دنبال آنها چهار مختصات متناظر مقصد میآیند، یا اینکه تنها شامل
چهار مختصات (x, y) باشد که صرفاً چهار مختصات مقصد هستند. در حالت
دوم، چهارضلعی مبدأ برابر با چهار گوشهٔ تصویر ورودی به ترتیب
ساعتگرد با شروع از گوشهٔ بالا-چپ در نظر گرفته میشود.
هر آنچه با -to یا -from مشخص کنید، محتوای این فایل را لغو و
جایگزین میکند.
-view=coords
نمای مقصد را مشخص میکند. coords فهرستی از دو مختصات با مقادیر
صحیح (x, y) است: به ترتیب مرزهای بالا-چپ و پایین-راستِ پیکسلهایی
که در تصویر خروجی قابل مشاهده خواهند بود. اگر -view مشخص نشود،
نمای مقصد دقیقاً با چهارضلعی مقصد منطبق خواهد شد.
-fill=color
این رنگی است که برنامه با آن تمام پیکسلهای خارج از چهارضلعی مقصد
را پر میکند. رنگ را همانطور که برای آرگومان زیرروال کتابخانهای
pnm_parsecolor() شرح داده شده
است مشخص کنید.
پیشفرض رنگ سیاه است، و برای تصاویری که دارای صفحهٔ شفافیت
(transparency plane) هستند، شفاف است.
-verbose
باعث میشود برنامه پیامهای اطلاعاتی دربارهٔ آنچه در حال انجام آن
است صادر کند.
مختصات معمولاً باید به ترتیب ساعتگرد مشخص شوند. ساختار دستوری نسبتاً
انعطافپذیر است: تمام نویسهها به جز علامت مثبت، علامت منفی و ارقام به
عنوان جداکننده تلقی میشوند. با اینکه مختصات باید اعداد صحیح باشند،
میتوانند خارج از مرزهای تصویر قرار گیرند.
پارامترها (PARAMETERS)
تنها پارامتر pamhomography، یعنی pam_file، نام فایلی است که تصویر ورودی
را در بر دارد. اگر pam_file را مشخص نکنید، تصویر از ورودی استاندارد
خوانده میشود.
نکات (NOTES)
تصویر خروجی از همان قالب Netpbm تصویر ورودی استفاده میکند.
تبدیلات ساده بهتر است توسط برنامههای دیگر Netpbm انجام شوند، مانند
برنامههایی که در بخش «همچنین ببینید» (SEE ALSO) <#SEE-ALSO> در ادامه
فهرست شدهاند. از pamhomography برای تبدیلات پیچیدهتر مانند تنظیمات
پرسپکتیو، دوران حول یک نقطهٔ دلخواه در تصویر، استخراج چهارضلعیهای
غیرمستطیلی، اریبسازی (shearing) با استفاده از مختصات به جای زاویه، و
بهطور کلی تمام تبدیلاتی که به سادهترین شکل با نگاشت چهار نقطه از یک
تصویر به چهار نقطه در تصویر دیگر بیان میشوند، استفاده کنید.
مثالها (EXAMPLES)
مثالهای زیر از تصویر آزمایشی park_row.ppm استفاده
میکنند، که عکسی از ساختمان پارک رو (Park Row Building) نیویورک
است که در
ابعاد ۴۴۱×۶۴۰ مقیاسبندی شده، به یک فایل PPM تبدیل گشته و بر اساس شروط
مجوز GFDL
بازنشر
شده است.
اولین مثال، قدرت واقعی تبدیلات دوخطی (bilinear) را نشان میدهد. با فرض
اینکه park_row_rect.map دارای محتوای زیر باشد:
(0, 0) (440, 0) (440, 639) (0, 639)
آنگاه
نمای جلوی ساختمان را از یک نمای پرسپکتیو به یک نمای روبروی مستقیم و مستطیلی تصویر میکند. به یاد داشته باشید که pamhomography پرانتزها و کاماهای استفادهشده در park_row_rect.map را نادیده میگیرد؛ آنها صرفاً برای خواناتر شدن فایل توسط انسان هستند. میتوانستیم به صورت معادل بنویسیم:
یا هر نوع دیگری از تنوعهای بیشمار.
برنامهٔ pamhomography میتواند تصویر را به یک ذوزنقه تبدیل کند تا به نظر برسد در فضای سهبعدی به عقب متمایل شده است:
به عنوان یک مثال بسیار ساده،
تصویر را از چپ به راست قرینه (معکوس) میکند. توجه داشته باشید که در این حالت مختصات چهارضلعی مقصد به ترتیب پادساعتگرد فهرست شدهاند، زیرا این ترتیب متناظر است با انطباق بین نقاط (0, 0) ↔ (440, 0) و (0, 639) ↔ (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
(اینها مختصات 'to' هستند؛ ما از مختصات پیشفرض و تمامتصویر 'from' استفاده میکنیم.) سپس نگاشت همانند تمام مثالهای قبلی عمل میکند:
همچنین ببینید (SEE ALSO)
•
pamcut(1)
•
pamenlarge(1)
•
pamflip(1)
•
pamperspective(1)
•
pamscale(1)
•
pamstretch(1)
•
pam(1)
•
pnmmargin(1)
•
pnmpad(1)
•
pnmrotate(1)
•
pnmshear(1)
تاریخچه (HISTORY)
برنامهٔ pamhomography در Netpbm نسخهٔ 10.94 (مارس 2021) معرفی شد.
نویسنده (AUTHOR)
حق نشر © ۲۰۲۰ متعلق به اسکات پاکین (Scott Pakin)، scott+pbm@pakin.org
فهرست مطالب (Table of Contents)
•
خلاصه دستور (SYNOPSIS) <#SYNOPSIS>
•
توضیحات (DESCRIPTION) <#DESCRIPTION>
•
گزینهها (OPTIONS) <#OPTIONS>
•
پارامترها (PARAMETERS) <#PARAMETERS>
•
نکات (NOTES) <#NOTES>
•
مثالها (EXAMPLES) <#EXAMPLES>
•
همچنین ببینید (SEE ALSO) <#SEE-ALSO>
•
تاریخچه (HISTORY) <#HISTORY>
•
نویسنده (AUTHOR) <#AUTHOR>
منبع مستندات (DOCUMENT SOURCE)
این صفحه راهنما توسط ابزار Netpbm تحت عنوان 'makeman' از منبع HTML
تولید شده است. مستندات اصلی در آدرس زیر قرار دارد:
http://netpbm.sourceforge.net/doc/pamhomography.html
netpbm documentation 04 December 2022 pamhomography(1)