{"id":17317025,"url":"https://github.com/pcj/arterioj","last_synced_at":"2025-03-27T02:18:04.774Z","repository":{"id":663769,"uuid":"306815","full_name":"pcj/arterioj","owner":"pcj","description":"Collateral vessel segmentation and analysis ImageJ plugin","archived":false,"fork":false,"pushed_at":"2012-12-11T03:47:13.000Z","size":8160,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-02-01T07:41:26.367Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pcj.png","metadata":{"files":{"readme":"README.txt","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2009-09-14T17:25:14.000Z","updated_at":"2018-12-24T01:56:45.000Z","dependencies_parsed_at":"2022-07-07T21:32:19.842Z","dependency_job_id":null,"html_url":"https://github.com/pcj/arterioj","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcj%2Farterioj","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcj%2Farterioj/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcj%2Farterioj/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcj%2Farterioj/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pcj","download_url":"https://codeload.github.com/pcj/arterioj/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245767361,"owners_count":20668827,"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-10-15T13:15:17.136Z","updated_at":"2025-03-27T02:18:04.759Z","avatar_url":"https://github.com/pcj.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"================================================================\nARTERIOJ README\n================================================================\n\nArterioJ is an open-source collateral vessel analysis software tool\ndeveloped for vascular biology research.  Its use assumes at least a\nbasic working knowledge of ImageJ.  A copy of ImageJ is bundled with\nthe distribution; another copy of ImageJ can exist on your system\nwithout interaction.  Also included in the bundled ImageJ is another\nplugin MosaicJ and its dependent modules.  The system was developed\nunder Java 1.5 but earlier versions may work as well.\n\n================================================================\nINSTALLATION\n================================================================\n\n1. Extract the distribution to the location of your choice. \n\n2. Ant (Java build tool) is pretty much required for recompilation.\nAny software development platform with Java should also have ant but\nyou may need to download this as well.\n\n3. A database is not required to use ArterioJ, but it was developed\nwith the use-case in mind that a database will be used.  The software\nwas developed with MySQL but other databases should work as well.\n\n4. Generation of plots is dependent upon R.  This is a high-quality\nstatistical toolset that generates really great looking plots.\nInstallation of R is not detailed here.\n\n5. Toggling a couple of settings within ImageJ is useful for usage:\n\n* Turn off 'Auto-Measure' in Edit-\u003eOptions-\u003ePoint Tool...\n* Turn on 'Require Command Key for Shortcuts' in Edit-\u003eOptions-\u003eMisc...\n* Set 'background color' to black\n\n6. Set the pixelwidth.  ArterioJ needs to know how big each pixel is,\nyou have to tell it what that is.  To do this, take a picture of a\nstage micrometerusing the same objective as your specimen, feed it\nthrough the same postprocessing steps you would otherwise do to your\nsample, and then use this to calculate.  To do this, open the image of\nthe micrometer, select Analyze-\u003eSet Scale..., measure the appropriate\ndistance, and enter this into the dialog box.  Use google to get more\ninformation on how to do this if you do not already know.  You can\nthen use the pixelwidth and send this into ArterioJ as a system\nparameter (see the build.xml file).\n\n      \u003csysproperty key=\"arterioj.calibration.pixelwidth\" value=\"0.8\"/\u003e\n      \u003csysproperty key=\"arterioj.calibration.units\" value=\"microns\"/\u003e\n\n================================================================\nUSING ARTERIOJ\n================================================================\n\nFirst, get a sense of the available ant targets:\n\n$ ant -projecthelp\n compile\n db.recreate\n db.reset-root-password\n db.setup\n ij\n imagej\n init\n install.plugin\n mosaicj\n stats\n\n\nLaunch ImageJ, without launching ArterioJ\n\n$ ant imagej\n\nLaunch MosaicJ, without launching ArterioJ\n\n$ ant imagej\n\nLaunch ArterioJ to open the file specified in the build.xml file (look\nat the code for the 'ij' task).\n\n$ ant ij\n\n================================================================\nMODES\n================================================================\n\nWhile editing an ArterioJ object model, the system is in one of the\nfollowing modes:\n\n\tpublic void keyTyped(KeyEvent e) {\n\t    switch (e.getKeyChar()) {\n\t    case 'b': select(bifs.getName()); break;\n\t    case 'v': select(vessels.getName()); break;\n\t    case 'd': select(diameters.getName()); break;\n\t    case 'h': Toolbar.getInstance().setTool(\"hand\"); break;\n\t    case 's': \n\t\tcommands.execute(\"save\");\n\t\tcommands.execute(\"sum\");\n\t\tbreak;\n\t    case '?': commands.usage(); break;\n\t    }\n\t}\n\n================================================================\nKEYBOARD ACTIONS\n================================================================\n\nArterioJ is used by using the mouse and keyboard in combination.  You\ncan see the various key actions here or search for them in the code.\n\n\tpublic void keyTyped(KeyEvent e) {\n\t    //debug(\"ObjManager.keyTyped:\"+e);\n\t    switch (e.getKeyChar()) {\n\t    case 'r':\n\t\tremove(choice.getSelectedItem());\n\t\trois.redraw();\n\t\tbreak;\n\t    case 'u':\n\t\tif (ops.isEmpty()) {\n\t\t    message(\"Nothing to undo.\");\n\t\t    return;\n\t\t}\n\t\t((UndoOperation)ops.pop()).undo();\n\t\trois.redraw();\n\t\tbreak;\n\t    case 'l':\n\t\tString label = labels.current();\n\t\tif (label != null) {\n\t\t    Obj b = current();\n\t\t    if (b != null) {\n\t\t\tif (b.getLabel() != null) {\n\t\t\t    b.setLabel(null); // toggle on-off\n\t\t\t} else {\n\t\t\t    b.setLabel(label);\n\t\t\t    info(\"Labeled \"+b+\" as '\"+label+\"'\");\n\t\t\t}\n\t\t\trois.redraw();\n\t\t    }\n\t\t}\n\t\tbreak;\n\t    case 'z':\n\t\tprevious();\n\t\trois.redraw();\n\t\tbreak;\n\t    case 'x':\n\t\tnext();\n\t\trois.redraw();\n\t\tbreak;\n\t    }\n\t    super.keyTyped(e);\n\t}\n\n================================================================\nCOMMANDS\n================================================================\n\nVarious other functions can be entered into the command entry\nbox. These are detailed in the code but you can see a previous here.\n\n\tpublic CommandManager() {\n\t    this.commands = new HashMap();\n\t    put(new LimitCommand());\n\t    put(new HelpCommand());\n\t    put(new SaveCommand());\n\t    put(new QuitCommand());\n\t    put(new LinkCommand());\n\t    put(new DissectCommand());\n\t    put(new SnapshotCommand());\n\t    put(new CleanDBCommand());\n\t    put(new SwapCollateralDirectionCommand());\n\t    put(new SummarizeCommand());\n\t}\n\n================================================================\nLABELS\n================================================================\n\nYou can assign labels to an object such as least collateral\nsegments. The dictionary of labels can be specified as an xml file and\npassed to ArterioJ.  See labels.xml in src/etc\n\n      \u003csysproperty key=\"arterioj.labels.xml\" value=\"${basedir}/src/etc/labels.xml\"/\u003e \n\n================================================================\nSTEP 1: SPECIFY BIFURCATION POINTS\n================================================================\n\nFor each image, you want to specify the bifurcation points that\ndeconstruct the vessel path of interest into segments.  Change the\n'Mode' to Bifurcation.  Then single click on the bifurcation points.\nAs you do this, a new segment is drawn from the current active\nbifurcation. To change the active bifurcation, either select it from\nthe drop down list or scroll through them using the 'z' and 'x'\nkeys. Here you get a sense of what the keys are in most modes:\n\n\n================================================================\nSTEP 2: SPECIFY COLLATERAL SEGMENTS\n================================================================\n\nOnce you have defined that segments, you'll want to connect them up by\nspecifying the least collateral segments.  To do this, write down the\nnumbers of the corresponding bofurcation points (each one has a unique\nname/number). Then in the command box (whch can be auto-selected by\npressing the 'c' key), type:\n\n\u003e link 12.34\n\nThis will create a collateral segment between points 12 and 34.  The\norder of the numbers does matter, in general you want to put the\nnumber of the tributary bifurcation first.\n\nYou will also want to provide labels to these least collateral\nsegments.  \n\n================================================================\nSTEP 3: SPECIFY DIAMETER MEASUREMENTS\n================================================================\n\nNow go into diameter mode ('d').  The active segment will be\nhighlighted but you can zoom on this with the previous 'z' and next\n'x' keys.  Press and hold the mouse button down as you drag a line\nperpendicularly across the segment.  Repeat as necessary until the\ncourse of the vessel is reasonably approximated.  The threshold for\nfinding the edge of the vessel is set at an arbitrary value that will\nprobably need to be changed for your experiment.  You can pass this is\nas a system property (see the build.xml file) or specify as a command:\n\n\u003e limit 70\n\nTo disable the threshold function completely, set the limit to 0.\nThis is often necessary when there is alot of overlapping vessels that\nthe computer cannot really distinguish where the edge of the vessel\nreally is.\n\n================================================================\nSTEP 4: Save\n================================================================\n\nSave the object model.  It will be written to an xml file having the\nsame filename as the original image albeit with .arterioj.xml tacked\non.\n\n================================================================\nSTEP 5: Summarize, generate dissection plots and timeseries plots.\n================================================================\n\nI've you've gotten this far, you're clearly a dedicated user.  Please\ncontact me to go over how to set this up for your experiment.  I can\nbe reached at:\n\npcj127@gmail.com\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpcj%2Farterioj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpcj%2Farterioj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpcj%2Farterioj/lists"}