refactor(imgproc): de-duplicate imgproc module (#47)#63
Merged
Conversation
Second de-duplication step of #47, following the pattern proven in #62. - src/imgproc/imgproc.ts: replace the type-only stub with the REAL implementation moved verbatim from the monolith (grayscale, resample, box_blur_gray, gaussian_blur, hough_transform, pyrdown, scharr/sobel derivatives, compute_integral_image, equalize_histogram, canny, warp_perspective, warp_affine, skindetector). Only deliberate change: gaussian_blur instantiates the math module directly (import from ../math/math) instead of via the jsfeatNext.math static slot, removing an attach-order dependency on the aggregator. - src/jsfeatNext.ts: shrinks by ~1050 lines; attaches imgproc from its module (jsfeatNext.imgproc = imgproc). - Side effect: the latent trap in src/orb/rectify_patch.ts (it imports imgproc, which until now was the throwing stub) is healed — it resolves to the real implementation. Verified behavior-preserving: tsc --noEmit clean; npm test 57/57 (14 of those pin imgproc bit-for-bit vs original jsfeat); UMD build checked (instanceof chain, static-constant inheritance, grayscale + gaussian_blur smoke on the bundle). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
kalwalt
added a commit
that referenced
this pull request
Jul 8, 2026
Third de-duplication step of #47, following the #62/#63 pattern. - src/fast_corners/fast_corners.ts: replace the type-only stub with the REAL implementation moved verbatim from the monolith (set_threshold, detect, _cmp_offsets; imports _cmp_score_16 from ./fast_private, which was already a real module). - src/jsfeatNext.ts: shrinks by ~225 lines; attaches fast_corners from its module. Verified behavior-preserving: tsc --noEmit clean; npm test 57/57 (detector parity suite pins fast_corners.detect against original jsfeat); UMD bundle smoke-checked (instanceof chain, static inheritance, corner detection on a synthetic image). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
kalwalt
added a commit
that referenced
this pull request
Jul 8, 2026
Third de-duplication step of #47, following the #62/#63 pattern. - src/fast_corners/fast_corners.ts: replace the type-only stub with the REAL implementation moved verbatim from the monolith (set_threshold, detect, _cmp_offsets; imports _cmp_score_16 from ./fast_private, which was already a real module). - src/jsfeatNext.ts: shrinks by ~225 lines; attaches fast_corners from its module. Verified behavior-preserving: tsc --noEmit clean; npm test 57/57 (detector parity suite pins fast_corners.detect against original jsfeat); UMD bundle smoke-checked (instanceof chain, static inheritance, corner detection on a synthetic image). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 8, 2026
kalwalt
added a commit
that referenced
this pull request
Jul 9, 2026
Third de-duplication step of #47, following the #62/#63 pattern. - src/fast_corners/fast_corners.ts: replace the type-only stub with the REAL implementation moved verbatim from the monolith (set_threshold, detect, _cmp_offsets; imports _cmp_score_16 from ./fast_private, which was already a real module). - src/jsfeatNext.ts: shrinks by ~225 lines; attaches fast_corners from its module. Verified behavior-preserving: tsc --noEmit clean; npm test 57/57 (detector parity suite pins fast_corners.detect against original jsfeat); UMD bundle smoke-checked (instanceof chain, static inheritance, corner detection on a synthetic image). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Second slice of #47, following the pattern proven in #62 (core base class + math). Guarded by the 57-test parity suite — 14 of those tests pin
imgprocbit-for-bit against original jsfeat.What changed
src/imgproc/imgproc.ts— the type-only stub (all methodsthrow "Method not implemented") is replaced by the real implementation, moved verbatim from the monolith (mechanicalsedline-range extraction):grayscale,resample,box_blur_gray,gaussian_blur,hough_transform,pyrdown,scharr_derivatives,sobel_derivatives,compute_integral_image,equalize_histogram,canny,warp_perspective,warp_affine,skindetector.gaussian_blurinstantiatesmathvia a direct module import (../math/math) instead of thejsfeatNext.mathstatic slot — same class, but removes an attach-order dependency on the aggregator.src/jsfeatNext.tsshrinks by ~1050 lines (now ~2350, from the original ~3900).Bonus: latent trap healed
src/orb/rectify_patch.tsimportsimgproc— until now that resolved to the throwing stub (a known audit finding). It now gets the real implementation with zero changes to that file.Verification
tsc --noEmit→ cleannpm test→ 57/57 (imgproc suite = bit-for-bit oracle match)instanceofchain, static-constant inheritance,grayscale+gaussian_blursmoke test on the built artifactdist//types/untouched (release-time rebuild, per precedent)Advances #47. Next in queue:
fast_corners→pyramid_t→linalg→orb→yape06→motion_estimator→optical_flow_lk.🤖 Generated with Claude Code