Document + pin F017: zhang_suen erases isolated 2x2 blocks An isolated 2x2 block is a genuine divergence point between the parallel algorithms and matters for small-blob masks (marker remnants, dotted-line dashes, segmentation specks). All four block pixels satisfy the zhang_suen deletion gate (B == 3, A == 1, both sub-iteration corner products zero) in the same sub-iteration, so the default method erases the block entirely, while guo_hall keeps exactly one pixel. Document the property in vignette("choosing-a-method") -- a caveat on the zhang_suen/guo_hall bullets plus a new "Small isolated blobs" subsection with a runnable example and the mitigation (use guo_hall or size-filter blobs before thinning). Add a tripwire-style pinned test asserting zhang_suen -> empty and guo_hall -> one pixel; if either count changes, the vignette guidance is wrong and must be updated with it. Also records the F014 hilditch fix in NEWS. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>#8
Merged
Conversation
The Hilditch parallel form (Lam-Lee-Suen survey, conditions 3 and 4) skips deleting a pixel only when a cardinal neighbour p2/p4 has crossing number A == 1 on the *current* image. The kernel computed the look-ahead crossing number with the centre pixel forced to 0 and compared it against 1. Under the condition gate (p4 == p8 == 1 for condition 3), that look-ahead value equals A(p2)|current + 1, so the test "A_p2 != 1" required A(p2)|current == 0 -- strictly stronger than the published "A(p2) != 1". It therefore also refused to delete pixels adjacent to junction neighbours (A(p2) >= 2), leaving a redundant pixel beside skeleton junctions. Change the tests to "A_p2 == 2" / "A_p4 == 2", which is the exact current-image "A != 1" condition. Verified against a pure-R implementation of the published form: the corrected kernel matches it on 1000 random images, and the previous kernel was strictly thicker in ~8% of cases and never thinner. Cannot break topology (strictly fewer or equal pixels deleted the same way the published form deletes them). Adds an exact-skeleton regression pin (a 6x6 junction shape where the old kernel left a redundant pixel at [4,3] that the fixed kernel and the published form both remove). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
An isolated 2x2 block is a genuine divergence point between the parallel
algorithms and matters for small-blob masks (marker remnants, dotted-line
dashes, segmentation specks). All four block pixels satisfy the zhang_suen
deletion gate (B == 3, A == 1, both sub-iteration corner products zero) in
the same sub-iteration, so the default method erases the block entirely,
while guo_hall keeps exactly one pixel.
Document the property in vignette("choosing-a-method") -- a caveat on the
zhang_suen/guo_hall bullets plus a new "Small isolated blobs" subsection
with a runnable example and the mitigation (use guo_hall or size-filter
blobs before thinning). Add a tripwire-style pinned test asserting
zhang_suen -> empty and guo_hall -> one pixel; if either count changes,
the vignette guidance is wrong and must be updated with it.
Also records the F014 hilditch fix in NEWS.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests.
🚀 New features to boost your workflow:
|
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.
No description provided.