diff --git a/.cursor/plans/release-2-2-0-1-draft.md b/.cursor/plans/release-2-2-0-1-draft.md new file mode 100644 index 00000000..b6f88744 --- /dev/null +++ b/.cursor/plans/release-2-2-0-1-draft.md @@ -0,0 +1,35 @@ +# Plan: Vision 2.2.0 - Step 1: draft + +> Status: Completed +> Parent: [overview](release-2-2-0-overview.md) +> Prerequisite: None + +## TL;DR + +Prepare release notes and changelog in the established styles; record merge inputs and package verification. + +## Iteration Bootstrap + +- Iteration slug: release-2-2-0 +- Required evidence: merge SHAs, release note input, CI results, package hash, published release metadata +- Artifacts to verify: changelog, package manifest, release body, tag + +## Reference Pattern + +CHANGELOG.md and GitHub Vision 2.1.0 release body + +## Steps + +### 1. Prepare the scoped change + +Prepare release notes and changelog in the established styles; record merge inputs and package verification. + +### 2. Verify the concrete result + +Compare headings, bold bullets, scope against 2.1.0..HEAD; JSON metadata check. + +## Verification + +Compare headings, bold bullets, scope against 2.1.0..HEAD; JSON metadata check. + +Evidence: Preserved all 2.1.0-and-earlier changelog bytes; new entries use module headings and bold bullets. GitHub draft uses the previous release headings, emoji and changelog links. #54 merged at a439049; #53 merged at 3c186e7 after confirming its source tree matches the previously verified feature tree. The user approved the proposed wording and emphasis on 2026-10-24; haxelib.json uses that exact summary. diff --git a/.cursor/plans/release-2-2-0-2-integration.md b/.cursor/plans/release-2-2-0-2-integration.md new file mode 100644 index 00000000..e6176ca6 --- /dev/null +++ b/.cursor/plans/release-2-2-0-2-integration.md @@ -0,0 +1,37 @@ +# Plan: Vision 2.2.0 - Step 2: integration + +> Status: In progress +> Parent: [overview](release-2-2-0-overview.md) +> Prerequisite: Step 1 + +## TL;DR + +Apply user release-note input, merge release documentation into dev, then merge dev into main while preserving history. + +## Iteration Bootstrap + +- Iteration slug: release-2-2-0 +- Required evidence: merge SHAs, release note input, CI results, package hash, published release metadata +- Artifacts to verify: changelog, package manifest, release body, tag + +## Reference Pattern + +.github/COMMIT-CONVENTION.md and PRs #53/#54 + +## Steps + +### 1. Prepare the scoped change + +Apply user release-note input, merge release documentation into dev, then merge dev into main while preserving history. + +### 2. Verify the concrete result + +Main tree contains every required commit; release metadata says 2.2.0; full target matrix green. + +## Verification + +Main tree contains every required commit; release metadata says 2.2.0; full target matrix green. + +Approved release summary: Seam carving, Hough line/circle detection, Harris corners, higher-quality resizing, modern image I/O, and cross-target reliability. + +PR #54 merged at a439049ceb18ee8f41578e57f0364a6e42708500; #53 merged into dev at 3c186e71ff5e166083697b78b838d848aa910405. #55 carries final notes into dev; #56 promotes dev to main. Existing source review threads were verified against 9a74abe and resolved. diff --git a/.cursor/plans/release-2-2-0-3-package.md b/.cursor/plans/release-2-2-0-3-package.md new file mode 100644 index 00000000..54e884a6 --- /dev/null +++ b/.cursor/plans/release-2-2-0-3-package.md @@ -0,0 +1,33 @@ +# Plan: Vision 2.2.0 - Step 3: package + +> Status: Not started +> Parent: [overview](release-2-2-0-overview.md) +> Prerequisite: Step 2 + +## TL;DR + +Build an immutable package from the release commit and verify contents, helpers, hashes and smoke behavior. + +## Iteration Bootstrap + +- Iteration slug: release-2-2-0 +- Required evidence: merge SHAs, release note input, CI results, package hash, published release metadata +- Artifacts to verify: changelog, package manifest, release body, tag + +## Reference Pattern + +build-release.ps1 and tests/ci/cppia/README.md + +## Steps + +### 1. Prepare the scoped change + +Build an immutable package from the release commit and verify contents, helpers, hashes and smoke behavior. + +### 2. Verify the concrete result + +ZIP manifest/version/required files match release commit; smoke compile/run; SHA256 recorded. + +## Verification + +ZIP manifest/version/required files match release commit; smoke compile/run; SHA256 recorded. diff --git a/.cursor/plans/release-2-2-0-4-publish.md b/.cursor/plans/release-2-2-0-4-publish.md new file mode 100644 index 00000000..b660fc82 --- /dev/null +++ b/.cursor/plans/release-2-2-0-4-publish.md @@ -0,0 +1,33 @@ +# Plan: Vision 2.2.0 - Step 4: publish + +> Status: Not started +> Parent: [overview](release-2-2-0-overview.md) +> Prerequisite: Step 3 + +## TL;DR + +Publish Vision 2.2.0 on GitHub with established headings and user-approved notes; hand final haxelib command to user. + +## Iteration Bootstrap + +- Iteration slug: release-2-2-0 +- Required evidence: merge SHAs, release note input, CI results, package hash, published release metadata +- Artifacts to verify: changelog, package manifest, release body, tag + +## Reference Pattern + +GitHub Vision 2.1.0 release + +## Steps + +### 1. Prepare the scoped change + +Publish Vision 2.2.0 on GitHub with established headings and user-approved notes; hand final haxelib command to user. + +### 2. Verify the concrete result + +Tag targets release main commit; published body and assets match; haxelib submission command printed but not executed. + +## Verification + +Tag targets release main commit; published body and assets match; haxelib submission command printed but not executed. diff --git a/.cursor/plans/release-2-2-0-overview.md b/.cursor/plans/release-2-2-0-overview.md new file mode 100644 index 00000000..6c317487 --- /dev/null +++ b/.cursor/plans/release-2-2-0-overview.md @@ -0,0 +1,20 @@ +# Plan: Vision 2.2.0 release + +## Status: In progress + +Merge the qualified feature work, restore the historical changelog/release-note styles, publish the GitHub release, and prepare the exact Haxelib submission command for the user. On 2026-10-24 the user approved the proposed release-note wording and emphasis: Seam carving, Hough line/circle detection, Harris corners, higher-quality resizing, modern image I/O, and cross-target reliability. The final Haxelib command must not run here. + +## Sub-plans + +1. [draft](release-2-2-0-1-draft.md) +2. [integration](release-2-2-0-2-integration.md) +3. [package](release-2-2-0-3-package.md) +4. [publish](release-2-2-0-4-publish.md) + +## Decisions + +- Preserve merge commits and per-step history. +- Merge chain: #54 into Hough/Harris, #53 into dev, release documentation into dev, then dev into main. +- GitHub tag/name: 2.2.0 / Vision 2.2.0, matching previous releases. +- GitHub body uses New Features and Bugfixes & Tweaks with the existing emoji and changelog links. +- No Haxelib upload, credential entry, or password request. diff --git a/.github/releases/2.2.0.md b/.github/releases/2.2.0.md new file mode 100644 index 00000000..0d5221c7 --- /dev/null +++ b/.github/releases/2.2.0.md @@ -0,0 +1,18 @@ +### New Features 🥳 + - **Added content-aware image shrinking with `Vision.carve()`** + - **Added Hough line, line-segment and circle detection, and Harris corner detection:** + - **`houghLineSegmentDetection()`** + - **`houghCircleDetection()`** + - **`harrisCornerResponse()`** + - **`harrisCorners()`** + - **Added higher-quality resizing with bicubic, Catmull-Rom, Mitchell-Netravali and Lanczos interpolation** + - **Modernized image loading, exporting and framework conversions with `ImageIO`** + - [***Check The Changelog For More Details***](https://github.com/ShaharMS/Vision/blob/main/CHANGELOG.md) + +### Bugfixes & Tweaks 🛠️ + - **Fixed behavior across image processing, linear algebra, geometry, colors and byte arrays** + - **Improved cross-target reliability, including Lua PNG export and `vision_quiet` fixes** + - **Replaced generated test scaffolding with authored behavioral tests and fixed CI failure reporting** + - **Included reproducible build tools for the qualified cppia interpreter host** - uses the included compatibility patch; JIT mode is not qualified. + - **Improved release packaging and removed the test-only `utest` runtime dependency** + - [***Check The Changelog For More Details***](https://github.com/ShaharMS/Vision/blob/main/CHANGELOG.md) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9e2ea0c..3ff1050f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,43 +1,82 @@ # 2.2.0 -### Content-aware resizing and interpolation +### `Vision.hx` + + - **Added `carve()`** - content-aware shrinking using minimum-energy seam removal. Returns a new image, preserves surviving pixels and alpha, and supports reducing width and height. + - **Added `houghLineSegmentDetection()`** + - **Added `houghCircleDetection()`** + - **Added `mapHoughCircles()`** + - **Added `harrisCornerResponse()`** + - **Added `harrisCorners()`** + - **Added reproducible, hosted before/after examples for `carve()`** + +### `Image.hx` + + - **Added `copyImageFrom()`** + - **Added raw byte loading and export helpers** + - **Added higher-quality resizing through bicubic, Catmull-Rom, Mitchell-Netravali and Lanczos interpolation** + +### `vision.ds` -- Added `Vision.carve(image, width, height)` using Avidan-Shamir minimum-energy seam removal. Supports shrinking width and height, recalculates RGB gradient energy per seam, preserves surviving RGBA pixels, and returns an independent image. Width is reduced before height; enlargement and nonpositive dimensions are rejected. -- Added reproducible Valve examples and hosted before/after images for `carve`. -- Added bicubic, Catmull-Rom, Mitchell-Netravali and Lanczos resizing algorithms. + - **Added `Circle2D`** + - **Added Hough line, line-segment and circle detection options** + - **Added Harris response and corner detection options** + - **Added `ImageFormat.JPEG` and `ImageFormat.VISION`** + - **Added `ImageResizeAlgorithm.CatmullRomInterpolation`, `MitchellNetravaliInterpolation` and `LanczosInterpolation`** + - **Implemented the previously unimplemented bicubic resize option** + - **Fixed behavior across matrices, geometry, colors, byte arrays and queues** -### Feature detection +### `vision.tools` + + - **Added synchronous `ImageTools.loadFromFile()`** + - **Added `ImageTools.loadFromBytes()`** + - **Added `ImageTools.loadFromURL()`** + - **Added `ImageTools.exportToBytes()`** + - **Added `ImageTools.exportToFile()`** + - **Deprecated `ImageTools.saveToFile()` in favor of `ImageTools.exportToFile()`** + - **Fixed math and array utility behavior across targets** -- Added a standard polar Hough accumulator and consolidated the existing `SimpleHough` bridge. -- Added `Vision.houghLineSegmentDetection` with minimum length, gap and optional precomputed edge-image controls. -- Added `Vision.houghCircleDetection`, `Vision.mapHoughCircles`, `Circle2D` and detector option types. -- Added `Vision.harrisCornerResponse` and `Vision.harrisCorners` with configurable response computation and corner selection. +### `vision.formats` -### Image formats and framework integration + - **Added the `vision.formats` package for image format and framework conversions** + - **Added `ImageIO.from` and `ImageIO.to`** + - **Added byte and framework import/export helpers** + - **Added JPEG encoding through `format` on supported targets** + - **Added PNG export on Lua** + - **JPEG decoding remains browser-dependent; native/Node JPEG decoding is not implemented** + +### `vision.algorithms` + + - **Added `SeamCarving` for minimum-energy seam removal** + - **Added `Hough` for standard line, probabilistic segment and circle detection** + - **Updated the existing `SimpleHough` bridge to use the shared Hough implementation** + - **Added `Harris` for corner-response maps and corner extraction** + - **Added `BicubicInterpolation`, `CatmullRomInterpolation`, `MitchellNetravaliInterpolation` and `LanczosInterpolation`** + - **Fixed behavior in edge detection, K-Means, image hashing, linear algebra and related utilities** + +### `vision.exceptions` -- Added `Image.copyImageFrom`, `ImageFormat.JPEG` and `ImageFormat.VISION`. -- Introduced `vision.formats` and `ImageIO.from` / `ImageIO.to` for byte and framework conversions. -- Added synchronous file loading, byte loading, URL loading, byte export and file export through `ImageTools`. -- Deprecated `ImageTools.saveToFile` in favor of `ImageTools.exportToFile`. -- Added JPEG encoding through `format` on supported targets and PNG export on Lua. -- JPEG decoding remains browser-dependent; native/Node JPEG byte decoding is not implemented. + - **Added `InvalidHeapsPixelFormat`** + - **Added `SingularMatrixError`** + - **Added `HoughEdgeImageSizeMismatch`** -### Correctness and portability +### Tests & CI -- Corrected behavior across edge detectors, K-means, image hashing, linear algebra, geometry, color handling, byte arrays, queues and math utilities. -- Added `InvalidHeapsPixelFormat` and `SingularMatrixError` diagnostics. -- Fixed `vision_quiet` compilation for matrix conversion and PNG/BMP loading; invalid PNG/BMP input returns a transparent 1x1 placeholder in quiet mode. -- Added inline protection for targets with generated method-size limits and support for non-threaded sys targets. -- Fixed JavaScript job completion/failure dispatch and Node handling of typed exceptions and browser-only operations. + - **Replaced generated test scaffolding with authored behavioral `utest` suites** + - **Added suite/case filtering, a maintained coverage inventory and a local multi-target CI runner** + - **Verified all 12 target jobs, with 619 test methods passing on interpreter, Node and the qualified cppia interpreter** + - **Fixed Node tests reporting success after assertion failures** + - **Fixed JavaScript job completion/failure callbacks and Node-specific compatibility** + - **Fixed Neko module loading through full dead-code elimination** + - **Fixed `vision_quiet` compilation for matrix conversion and PNG/BMP loading** + - **Added support for non-threaded sys targets and inline protection for constrained targets** + - **Added a pinned cppia interpreter-host compatibility patch and reproducible build tools** - the qualified configuration uses Haxe 4.3.7 and the included patched hxcpp host; JIT mode is not qualified. -### Tests, CI and packaging +### Release packaging -- Replaced generated test scaffolding with authored behavioral `utest` suites, suite/case filtering and a maintained coverage inventory. -- Added a local multi-target CI runner and repaired runtime setup across the target matrix. -- Added a pinned cppia interpreter-host patch for generic/typed array interoperability, fractional values, resize and length handling, with reproducible build tooling included in release ZIPs. -- Node tests now use `hxnodejs` and return a failing process status when assertions fail. -- Removed the test-only `utest` dependency from the library package. -- Added a package-only PowerShell builder; the release batch file stops if packaging fails before offering submission. + - **Removed the test-only `utest` runtime dependency** + - **Added a package-only PowerShell builder that preserves previous release candidates** + - **Included the cppia host patch and build tools in release ZIPs** # 2.1.0 diff --git a/haxelib.json b/haxelib.json index 400e1a27..6c802bce 100644 --- a/haxelib.json +++ b/haxelib.json @@ -4,7 +4,7 @@ "version": "2.2.0", "description": "Vision is a simple, powerful and flexible computer vision & image processing library for Haxe.", "contributors": ["ShaharMS"], - "releasenote": "Seam carving, Hough and Harris feature detection, higher-quality resizing, image I/O, and cross-target reliability.", + "releasenote": "Seam carving, Hough line/circle detection, Harris corners, higher-quality resizing, modern image I/O, and cross-target reliability.", "tags": ["cv", "computer-vision", "im", "image-manipulation", "cross", "cross-framework", "image", "image-processing", "ip", "feature-detection"], "classPath": "src", "dependencies": {},