{"id":21156386,"url":"https://github.com/vitroid/panojector","last_synced_at":"2025-10-30T07:34:58.806Z","repository":{"id":3172574,"uuid":"4203836","full_name":"vitroid/Panojector","owner":"vitroid","description":"Panojector is an alternative of mathmap for Mac. You can easity expand the functionality by adding your own plugin filters.","archived":false,"fork":false,"pushed_at":"2022-03-05T10:36:44.000Z","size":66829,"stargazers_count":17,"open_issues_count":0,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2023-03-12T07:53:08.690Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vitroid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-05-02T14:28:17.000Z","updated_at":"2022-04-22T15:32:16.000Z","dependencies_parsed_at":"2022-09-05T03:33:07.718Z","dependency_job_id":null,"html_url":"https://github.com/vitroid/Panojector","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitroid%2FPanojector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitroid%2FPanojector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitroid%2FPanojector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitroid%2FPanojector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vitroid","download_url":"https://codeload.github.com/vitroid/Panojector/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225542685,"owners_count":17485925,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-20T11:43:45.323Z","updated_at":"2025-10-30T07:34:58.706Z","avatar_url":"https://github.com/vitroid.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Panojector Manual\nPanojector is a modular panorama image converter.\n## Plugin specs\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003cth\u003eexplanation\u003c/th\u003e\n\u003cth\u003einput\u003c/th\u003e\n\u003cth\u003eoutput\u003c/th\u003e\n\u003cth colspan=\"2\"\u003eoptions / argument\u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd rowspan=\"2\"\u003ebox\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eDevelop a box\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eequirectangular\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eplain image\u003c/td\u003e\n\u003ctd\u003e-b x,y,z\u003c/td\u003e\n\u003ctd\u003easpect ratio of the box\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e-e x,y,z\u003c/td\u003e\n\u003ctd\u003eeye position\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd rowspan=\"2\"\u003econe\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eDevelop a cone\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eequirectangular\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eplain image\u003c/td\u003e\n\u003ctd\u003e-r 0.3\u003c/td\u003e\n\u003ctd\u003eradius of the base\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e-e 0.2\u003c/td\u003e\n\u003ctd\u003eeye height to cone height\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd rowspan=\"1\"\u003ecylindrical_to_equirectangular\u003c/td\u003e\n\u003ctd rowspan=\"1\"\u003eCylindrical to equirectangular\u003c/td\u003e\n\u003ctd rowspan=\"1\"\u003eSide of a circular cylinder\u003c/td\u003e\n\u003ctd rowspan=\"1\"\u003eequirectangular\u003c/td\u003e\n\u003ctd\u003e-s 6\u003c/td\u003e\n\u003ctd\u003eNumber of sides\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eequirectangular\u003c/td\u003e\n\u003ctd\u003eMercator to equirect\u003c/td\u003e\n\u003ctd\u003eMercator\u003c/td\u003e\n\u003ctd\u003eequirectangular\u003c/td\u003e\n\u003ctd colspan=\"2\"\u003eNo option\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eexponential\u003c/td\u003e\n\u003ctd\u003eexponential\u003c/td\u003e\n\u003ctd\u003ecomplex (plain image)\u003c/td\u003e\n\u003ctd\u003ecomplex (plain image)\u003c/td\u003e\n\u003ctd colspan=\"2\"\u003eNo option\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003einvert\u003c/td\u003e\n\u003ctd\u003einvert\u003c/td\u003e\n\u003ctd\u003ecomplex (plain image)\u003c/td\u003e\n\u003ctd\u003ecomplex (plain image)\u003c/td\u003e\n\u003ctd colspan=\"2\"\u003eNo option\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003elog\u003c/td\u003e\n\u003ctd\u003elog\u003c/td\u003e\n\u003ctd\u003ecomplex (plain image)\u003c/td\u003e\n\u003ctd\u003ecomplex (plain image)\u003c/td\u003e\n\u003ctd colspan=\"2\"\u003eNo option\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003emercator\u003c/td\u003e\n\u003ctd\u003eEquirect to Mercator\u003c/td\u003e\n\u003ctd\u003eequirectangular\u003c/td\u003e\n\u003ctd\u003eMercator\u003c/td\u003e\n\u003ctd colspan=\"2\"\u003eNo option\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003epower\u003c/td\u003e\n\u003ctd\u003epower\u003c/td\u003e\n\u003ctd\u003ecomplex (plain image)\u003c/td\u003e\n\u003ctd\u003ecomplex (plain image)\u003c/td\u003e\n\u003ctd\u003e-n 2\u003c/td\u003e\n\u003ctd\u003ePower of n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd rowspan=\"5\"\u003eprism\u003c/td\u003e\n\u003ctd rowspan=\"5\"\u003eDevelop a prism\u003c/td\u003e\n\u003ctd rowspan=\"5\"\u003eequirectangular\u003c/td\u003e\n\u003ctd rowspan=\"5\"\u003eplain image\u003c/td\u003e\n\u003ctd\u003e-e 0.5\u003c/td\u003e\n\u003ctd\u003eEye height.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e-h 0.5\u003c/td\u003e\n\u003ctd\u003eHeight of the prism.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e-s 6\u003c/td\u003e\n\u003ctd\u003eNumber of sides.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e-z 2\u003c/td\u003e\n\u003ctd\u003eSpecify where to attach the zenith cap.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e-n 2\u003c/td\u003e\n\u003ctd\u003eSpecify where to attach the nadir cap.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eribbon\u003c/td\u003e\n\u003ctd\u003eConvert a long image to a ribbon\u003c/td\u003e\n\u003ctd\u003eplain image\u003c/td\u003e\n\u003ctd\u003eplain image\u003c/td\u003e\n\u003ctd\u003e-a 0.5 or -a 200/500\u003c/td\u003e\n\u003ctd\u003eAspect ratio of the input image.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003erotate\u003c/td\u003e\n\u003ctd\u003eRotate an image\u003c/td\u003e\n\u003ctd\u003eplain image\u003c/td\u003e\n\u003ctd\u003eplain image\u003c/td\u003e\n\u003ctd\u003e-a 0\u003c/td\u003e\n\u003ctd\u003eSpecify angle in degree.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd rowspan=\"4\"\u003escale\u003c/td\u003e\n\u003ctd rowspan=\"4\"\u003eScale an image\u003c/td\u003e\n\u003ctd rowspan=\"4\"\u003eplain image\u003c/td\u003e\n\u003ctd rowspan=\"4\"\u003eplain image\u003c/td\u003e\n\u003ctd\u003e-x 1\u003c/td\u003e\n\u003ctd rowspan=\"4\"\u003eSpecify amounts\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e-y 1\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e-xy 1\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e-p\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd rowspan=\"2\"\u003eslide\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eSlide an image\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eplain image\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eplain image\u003c/td\u003e\n\u003ctd\u003e-x 0\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eSpecify amounts (in image coordinate)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e-y 0\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003estereographic\u003c/td\u003e\n\u003ctd\u003eEquirect to stereographic\u003c/td\u003e\n\u003ctd\u003eequirectangular\u003c/td\u003e\n\u003ctd\u003eplain image\u003c/td\u003e\n\u003ctd\u003e-a 90\u003c/td\u003e\n\u003ctd\u003eField of view.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eswap\u003c/td\u003e\n\u003ctd\u003eSwap xyz axes\u003c/td\u003e\n\u003ctd\u003eequirectangular\u003c/td\u003e\n\u003ctd\u003eequirectangular\u003c/td\u003e\n\u003ctd\u003e-n 1\u003c/td\u003e\n\u003ctd\u003eSwap xyz axes multiple times.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd rowspan=\"2\"\u003etile\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eSlanted tiling of a long image. (incommensurate)\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eplain image\u003c/td\u003e\n\u003ctd rowspan=\"2\"\u003eplain image (Mercator)\u003c/td\u003e\n\u003ctd\u003e-a 0.5 or -a 200/500\u003c/td\u003e\n\u003ctd\u003eAspect ratio of the input image.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e-s 8\u003c/td\u003e\n\u003ctd\u003eNumber of stories\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003etile2\u003c/td\u003e\n\u003ctd\u003eSlanted tiling of a long image. (commensurate)\u003c/td\u003e\n\u003ctd\u003eplain image\u003c/td\u003e\n\u003ctd\u003eplain image (Mercator)\u003c/td\u003e\n\u003ctd\u003e-a 0.5 or -a 200/500\u003c/td\u003e\u003ctd\u003eAspect ratio of the input image.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003etilt\u003c/td\u003e\n\u003ctd\u003eTilt an equirectangular image around the x axis.\u003c/td\u003e\n\u003ctd\u003eequirectangular\u003c/td\u003e\n\u003ctd\u003eequirectangular\u003c/td\u003e\n\u003ctd\u003e-a 0\u003c/td\u003e\n\u003ctd\u003eSpecify angle in degree.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003etumblerfan\u003c/td\u003e\n\u003ctd\u003eCreate your own tumbler\u003c/td\u003e\n\u003ctd\u003eMercator\u003c/td\u003e\n\u003ctd\u003eplain image\u003c/td\u003e\n\u003ctd\u003e-s wtop,wbot,height\u003c/td\u003e\n\u003ctd\u003eSize of the fan. Wtop and wbot specifies the top and bottom width of the developed fan, and height specifies the fan height.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eload\u003c/td\u003e\n\u003ctd\u003eLoad an image file\u003c/td\u003e\n\u003ctd\u003efile\u003c/td\u003e\n\u003ctd\u003eplain image\u003c/td\u003e\n\u003ctd colspan=\"2\"\u003efile name\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003einterpolate\u003c/td\u003e\n\u003ctd\u003eLoad an image file\u003c/td\u003e\n\u003ctd\u003efile\u003c/td\u003e\n\u003ctd\u003eplain image\u003c/td\u003e\n\u003ctd colspan=\"2\"\u003efile name\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Panojector command\nPanojector command accepts a few options.\n\n### Usage:\n    panojector [-s size][-o outfile][list of plugins.....] load filename\n\n### Options:\n\n    -s n\t   Set image size to n x n.\n\n    -o file  Specify the output file name.\n## Notes\nPlugin describes how to project the `(-1..+1)x(-1..+1)` plane onto another `(-1..+1)x(-1..+1)` plane. You can apply these projection plugins to the original image by giving plugin(s) as an argument(s) of the panojector command.\n\nFor example,\n\n    ./panojector -s 400 mercator load original.jpg\n\nconverts the equirectangular image into mercator projection and output as a 400x400 image.\n\n    ./panojector -s 600 box equirectangular load original.jpg\n\nconverts an Mercator panorama into equirectangular panorama and then develops as a box.\n\nWhen multiple plugins are given, they work as a pipeline.  Each plugin accepts options as its argument. Note that x coordinate points to the right, while y coordinate directs downwards. For complex coordinate, real points to the right, and imaginary directs downwards.\n\n## Other Examples\n### Example 1\nThis converts the sample rectangular image to a swirl:\n\n    ./panojector -s 600 stereographic equirectangular tile2 -a 706/881 load sample.jpg\n\nThe first plugin “tile2” tiles the original image, second plugin “equirectangular” regards the image as a Mercator (conformal) panorama and convert it into equirectangular panorama image, and the last plugin “stereographic” converts the equirectangular panorama into stereographic (conformal) image.\n![ex1a.jpg](https://raw.githubusercontent.com/vitroid/Panojector/master/figures/ex1a.jpg)\n\nThis converts the inverted little planet image back to equirectangular panorama:\n\n    ./panojector -s 1000 slide -x 1.25 equirectangular rotate -a 90 slide -x -0.25 exponential load sample2.jpg\n\n![ex1b.jpg](https://raw.githubusercontent.com/vitroid/Panojector/master/figures/ex1b.jpg)\n\n(The sample image is provided by Pedro Moura Pinheiro at http://www.flickr.com/photos/pedromourapinheiro/4929306871 under Creative Commons (CC BY-NC-SA 2.0) License.)\n### Example 2\nThis converts a long train image to 6-story ribbon:\n\n    ./panojector -s 1000 ribbon -a 826/29999 -s 6 load sample3.jpg\n\n![ex2.jpg](https://raw.githubusercontent.com/vitroid/Panojector/master/figures/ex2.jpg)\n### Example 3\nThis converts the same image into a swirl:\n\n    ./panojector -s 1000 stereographic equirectangular tile -a 826/29999 -s 8 load sample3.jpg\n\nand a tilted swirl:\n\n    ./panojector -s 1000 rotate -a 45 stereographic -a 300 tilt -a 30 equirectangular tile -a 826/29999 -s 8 load sample3.jpg\n\n![ex3a.jpg](https://raw.githubusercontent.com/vitroid/Panojector/master/figures/ex3a.jpg)\n![ex3b.jpg](https://raw.githubusercontent.com/vitroid/Panojector/master/figures/ex3b.jpg)\n\nFor now, we provide only one rotation plugin, “tilt”, to give a rotation angle around the X axis to an equirectangular image.  In order to rotate the equirectangular image with YAW, PITCH, and ROLL angles in  PTgui and Hugin way, use the following parameters: (YAW, PITCH, and ROLL should be replaced by the values.)\n\n    ./panojector -s 1000 swap tilt -a -YAW swap tilt -a PITCH swap tilt -a ROLL load sample4.jpg\n\n### Example 4\nYou can even “Create Your Own Starbucks Tumbler.”\n\n    ./panojector -s 1000 tumblerfan -s 214,173,163 tile -a 826/29999 -s 8 load sample3.jpg\n\n![ex4.jpg](https://raw.githubusercontent.com/vitroid/Panojector/master/figures/ex4.jpg)\n### Example 5\n\fA small utility `boxsize.py` calculates the proper dimension of the box for your equirectangular panorama image. Here is an example image of a Japanese room. (The sample image is provided in a courtesy of Simon Sherwin. Original photo is available at [Flickr](https://www.flickr.com/photos/simons/4524005292).  Please download the [original image](https://farm5.staticflickr.com/4051/4524005292_5c0c99cffa_o.jpg) by yourself and rename it as `sample.jpg`.)\n\n1. Measure the dimensions of the images:\u2028picture width, positions of four corners, and ceiling and floor positions at the first corner.\u2028\n\n    ![ex5a.jpg](https://raw.githubusercontent.com/vitroid/Panojector/master/figures/ex5a.jpg)\n2. Put them as arguments of the boxsize.py program and run it. The program estimates the eye position in the box.\n\n        ./boxsize.py 4000 538 1432 2541 3445 772 1247\n\n3. You get the optimal parameters to convert the image into a box development. Modify as you like, and run it.\n\n        ./panojector -s 4000 box -b 1,1.1724609375,0.609415798286 -e 0.5064453125,0.504081292687,0.521980455925 slide -x 0.269 interpolate sample.jpg\n\n    ![ex5b.jpg](https://raw.githubusercontent.com/vitroid/Panojector/master/figures/ex5b.jpg)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitroid%2Fpanojector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvitroid%2Fpanojector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitroid%2Fpanojector/lists"}