{"id":21464272,"url":"https://github.com/emmt/imageprocessing.jl","last_synced_at":"2026-03-19T20:31:00.088Z","repository":{"id":264191269,"uuid":"885853577","full_name":"emmt/ImageProcessing.jl","owner":"emmt","description":"Types and methods for image processing in Julia","archived":false,"fork":false,"pushed_at":"2025-11-28T16:57:08.000Z","size":154,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-30T22:10:15.335Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emmt.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-09T15:12:27.000Z","updated_at":"2025-11-28T16:57:05.000Z","dependencies_parsed_at":"2024-11-22T15:18:32.154Z","dependency_job_id":"aafa6d37-50dd-40c6-aac8-69630e2d7550","html_url":"https://github.com/emmt/ImageProcessing.jl","commit_stats":null,"previous_names":["emmt/imageprocessing.jl"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/emmt/ImageProcessing.jl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FImageProcessing.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FImageProcessing.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FImageProcessing.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FImageProcessing.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emmt","download_url":"https://codeload.github.com/emmt/ImageProcessing.jl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FImageProcessing.jl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29415528,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T06:24:03.484Z","status":"ssl_error","status_checked_at":"2026-02-13T06:23:12.830Z","response_time":78,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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-23T07:31:05.148Z","updated_at":"2026-03-19T20:31:00.070Z","avatar_url":"https://github.com/emmt.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Image processing for Julia\n\n[![License](http://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat)](./LICENSE.md) [![Build Status](https://github.com/emmt/ImageProcessing.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/emmt/ImageProcessing.jl/actions/workflows/CI.yml?query=branch%3Amain) [![Coverage](https://codecov.io/gh/emmt/ImageProcessing.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/emmt/ImageProcessing.jl)\n\nThe `ImageProcessing` package provides methods and types for processing *images* in\n[Julia](https://julialang.org/). Following the conventions in\n[`JuliaImages`](https://juliaimages.org), *images* can be any multi-dimensional abstract\narrays with numerical values, not just 2-dimensional arrays.\n\n## Remarks\n\n*Images* may be quite large arrays so many methods of this package are designed for fast\ncomputations. For example, branching in loops is avoided to favor loop vectorization. As a\nconsequence, special values such as `NaN` or `missing` are not treated specifically. Even\nmore, `missing` is not an expected value in images. One should use `NaN` to indicate\nmissing or bad data and rely on IEEE rules for NaNs to produce correct results or, better,\nuse zero weights for indicating missing or bad data and avoid NaNs.\n\n## Points and bounding-boxes\n\nThe `ImageProcessing` provides points and bounding-boxes of respective types `Point{N,T}`\nand `BoundingBox{N,T}` with `N` the dimensionality and `T` the type of coordinates. These\nobject can be seen as generalizations of `CartesianIndex{N}` and `CartesianIndices{N}` to\nhelp working with coordinates and help defining coordinate transforms, region of interest,\netc. With points and bounding boxes, coordinate type `T` may not be integer and a number\nof arithmetic operations are supported that may not be implemented for Cartesian indices\n(addition or subtraction of points, scaling of point by a scalar, rounding, etc.).\n\nAs a facility, even tough points may have continuous coordinates, they may be converted to\n`CartesianIndex` which represents discrete positions. For a point, say `pnt`, with integer\ncoordinates, it is sufficient to call the constructor `CartesianIndex(pnt)`. For\nnon-integer coordinates, the coordinates must first be rounded (in some direction) to an\ninteger, for example by one of:\n\n``` julia\nnearest(Point{N,Int}, pnt) # round coordinates to nearest `Int`\nround(Point{N,Int}, pnt)   # round coordinates to nearest `Int`\nfloor(Point{N,Int}, pnt)   # round coordinates to nearest `Int` from below\nceil(Point{N,Int}, pnt)    # round coordinates to nearest `Int` from above\n```\n\nwhere `N` is the number of dimensions and then call `CartesianIndex` on the result. To\nsimplify such conversions and make the code more readable, it is sufficient to call:\n\n``` julia\nnearest(CartesianIndex, pnt) # round point to nearest Cartesian index\nround(CartesianIndex, pnt)   # round point to nearest Cartesian index\nfloor(CartesianIndex, pnt)   # round point to nearest Cartesian index from below\nceil(CartesianIndex, pnt)    # round point to nearest Cartesian index from above\n```\n\nSimilarly, even tough intervals and bounding-boxes represent continuous ranges, they may\nbe respectively converted to `AbstractRange` or `CartesianIndices` instances which\nrepresent discrete ranges.\n\nOperators `∈` (`in`), `⊆` (`issubset`), and `∩` (`intersect`) may be used with points,\nintervals, and bounding-boxes. Integer-valued points, intervals, and bounding-boxes may also\nbe tested with these operators against `CartesianIndex`, `AbstractRange{\u003c:Integer}`, and\n`CartesianIndices` provided the two latter have unit-step. The operation will be performed\nas if the point, interval, or bounding-box has been converted to its discrete counterpart.\n\n## Installation\n\nTo install `ImageProcessing` so as to follow the main development branch:\n\n``` julia\nusing Pkg\nPkg.add(url=\"https://github.com/emmt/ImageProcessing.jl\")\n```\n\nor at the prompt of Julia's package manager (after typing `]` in Julia's REPL):\n\n``` julia\nadd https://github.com/emmt/ImageProcessing.jl\n```\n\nAnother possibility is to install `ImageProcessing` via Julia registry\n[`EmmtRegistry`](https://github.com/emmt/EmmtRegistry), from the prompt of Julia's package\nmanager:\n\n```julia\nregistry add General\nregistry add https://github.com/emmt/EmmtRegistry\nadd ImageProcessing\n```\n\nAdding the `General` registry (1st line of the above example) is mandatory to have access\nto the official Julia packages if you never have used the package manager before.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femmt%2Fimageprocessing.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femmt%2Fimageprocessing.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femmt%2Fimageprocessing.jl/lists"}