1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-29 15:23:05 +04:00
Commit Graph

35951 Commits

Author SHA1 Message Date
Siddharth Panditrao 0c613de006 Merge pull request #28380 from WalkingDevFlag:fix/charuco-detector-offset-25539
Fix ~0.5px systematic offset in CharucoDetector subpixel refinement #28380

Resolves #25539

### Problem

`CharucoDetector::detectBoard` produces Charuco corner coordinates that are consistently offset by approximately **+0.5 pixels** compared to `findChessboardCorners + cornerSubPix`.

This offset is systematic (mean ≈ −0.5 px when comparing legacy − Charuco) and reproducible across images. Visual inspection also shows that the legacy chessboard detector aligns better with the actual corner locations.

### Root cause

In `charuco_detector.cpp`, the points passed to `cornerSubPix` are manually shifted by `-Point2f(0.5f, 0.5f)` before refinement and then shifted back by `+Point2f(0.5f, 0.5f)` after refinement.

However, `cornerSubPix` refines corners in **absolute image coordinates** and converges to the true saddle point based on image gradients. Shifting the initial guess does not affect the converged result as long as the true corner lies within the refinement window.

The additional `+0.5` shift applied after refinement therefore introduces a constant bias, resulting in:

```

P_out = P_true + 0.5

```

### Solution

Remove the manual `±0.5` coordinate shifts around the `cornerSubPix` call and let the refined result be returned directly.

### Test updates

Updated expected corner values in the following tests:

- `testBoardSubpixelCoords`
- `testSeveralBoardsWithCustomIds`

The previous expected values (e.g. `200`, `250`, `300`) were only correct due to the +0.5px bias introduced by the bug.

`generateImage` creates checkerboard squares of exactly **50 pixels**, which places true corner locations on **pixel boundaries** rather than pixel centers. As a result, the correct subpixel coordinates are:

```

199.5, 249.5, 299.5

```

instead of the previously expected integer values.

After updating the expected values, all **30 Charuco-related tests pass** with the fix applied.

### Verification

I verified the fix using a Python reproducer that compares `CharucoDetector` output against `findChessboardCorners + cornerSubPix`:

- **Before fix:** mean error ≈ −0.501 px  
![before_fix_multilocus](https://github.com/user-attachments/assets/cc812956-c081-4f00-a7e2-78b7427b1235)
![before_fix_zoomed_small](https://github.com/user-attachments/assets/7e6887cb-b09d-47dc-9fcd-03a27b17f310)

- **After fix:** mean error ≈ −0.001 px
![after_fix_multilocus](https://github.com/user-attachments/assets/1c4f8dfa-d0ae-417c-881e-e2a9cbc4b9f1)
![after_fix_zoomed_small](https://github.com/user-attachments/assets/9c325995-fe0b-42f3-bdbb-6754f985e936)

After the change, the Charuco detector output aligns with the legacy chessboard detector both numerically and visually.

### Notes

This change only affects the post-refinement coordinate handling and does not alter detection logic, refinement parameters, or performance.

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-01-28 14:31:54 +03:00
Adrian Kretz 65e6890f33 Merge pull request #28386 from akretz:fix_issue_28385
Fix integer overflow in medianBlur #28386

The bug in #28385 is that the pointer arithmetic in
https://github.com/opencv/opencv/blob/d8bc5b94b851d5b392c61e5b954fba992e18bb73/modules/imgproc/src/median_blur.simd.hpp#L666-L668
overflows if `i*sstep` is larger than `INT_MAX`, because both variables are of type `int`. If one operand is of type `size_t` instead, the other operand gets promoted to `size_t` before multiplication and overflow doesn't happen anymore.

The test allocates 2.3GB for the Mat; I hope that's okay.

This PR fixes #28385

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-01-28 14:23:43 +03:00
Alexander Smorkalov cf1177e87e Merge pull request #28467 from Sikandar1310291:fix/topk-layer-k-boundary-check-28445
Fix: TopK layer K boundary check allows K == input_dim (#28445)
2026-01-27 14:15:37 +03:00
Sikandar d8f8267700 Fix: TopK layer K boundary check allows K == input_dim (#28445)
The TopK layer was incorrectly rejecting K values equal to the input
dimension size. According to ONNX specification, K should be allowed
to equal the dimension size (to retrieve all elements).

Changed validation from 'K < input_shape[axis]' to 'K <= input_shape[axis]'

This fixes the error when loading YOLOv10 ONNX models that use TopK
with K equal to the dimension size.

Fixes #28445
2026-01-27 09:35:36 +05:00
Murat Raimbekov 774c7e01b3 Merge pull request #28301 from raimbekovm:fix-more-typos
docs: fix spelling errors in documentation and code #28301

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [ ] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
- [ ] The feature is well documented and sample code can be built with the project CMake

### Description

Fixed multiple spelling errors across documentation, comments, and code:

- 'colummn' → 'column' (cublas.hpp, 3 occurrences)
- 'points_per_colum' → 'points_per_column' (calib3d.hpp, 3 occurrences)
- 'Asignee' → 'Assignee' (sift files, 2 occurrences)
- 'compability' → 'compatibility' (face.hpp, 2 occurrences)
- 'orignal' → 'original' (aruco_detector.cpp)
- 'refrence' → 'reference' (chessboard.cpp)
- 'indeces' → 'indices' (stitching.hpp)
- 'OutputPrecison' → 'OutputPrecision' (test)
- 'tranform' → 'transform' (slice_layer.cpp, 3 occurrences)

Total: 24 fixes across 14 files. Documentation and comment changes only, no functional impact.
2026-01-26 21:28:50 +03:00
Shrutikasri04 99dd085cd9 Merge pull request #28422 from Shrutikasri04:first-pr
docs(calib3d): fix grammar and clarify radial distortion formula in camera calibration tutorial #28422

This PR improves the camera calibration tutorial documentation by:

- Fixing minor grammatical issues for better readability.
- Clarifying the radial distortion model by explicitly defining r² = x² + y².

These changes do not affect functionality and are intended to make the mathematical explanation clearer for readers and new users.
2026-01-26 16:24:19 +03:00
Alexander Smorkalov a9f06448c8 Merge pull request #28457 from luisadame:patch-1
Fix setup usage example async syntax
2026-01-25 15:55:22 +03:00
pratham-mcw b229f1efd3 Merge pull request #28243 from pratham-mcw:cvfloor-neon-opt
core: add NEON support for cvFloor in fast_math.hpp #28243

- This PR adds NEON intrinsics-based implementation for the cvFloor function in fast_math.hpp for Windows-ARM64.
- Both float and double overloads now use NEON intrinsics for cvFloor Function.
- calchist and calchist1d function uses cvFloor function for its computations. 
- After adding these changes both functions showed improvement in performance.

**Performance Benchmarks:**
<img width="956" height="273" alt="image" src="https://github.com/user-attachments/assets/a00c98cd-d245-4d11-a9fd-361a3bd89f59" />

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
2026-01-24 13:42:16 +03:00
Alexander Smorkalov 1d20b65f1f Merge pull request #28401 from amd:fast_bilateral_level2
Optimized Bilateral Filter (32f) with AVX512
2026-01-24 13:40:08 +03:00
Luis Adame Rodríguez 8fbb871a9c fix setup usage example async syntax 2026-01-24 01:23:41 +01:00
Alexander Smorkalov 74addff3d0 Merge pull request #28303 from raimbekovm:fix-typos-batch4
docs: fix spelling errors in code and comments
2026-01-23 13:42:15 +03:00
Alexander Smorkalov 4cfd9689ae Merge pull request #28446 from Erellu:4.x
Fix UB in cv::error when breakOnError set to true
2026-01-23 11:29:33 +03:00
Alexander Smorkalov 5258bc5de9 Merge pull request #28317 from raimbekovm:fix-typos-batch7
docs: fix typos in documentation and code comments
2026-01-23 11:29:02 +03:00
Alexander Smorkalov 701da1686b Merge pull request #28439 from jinboson:loongarch64_itt
3rdparty(itt): support LOONGARCH64
2026-01-23 09:03:33 +03:00
Nechama Krashinski 1f47f5ba97 Merge pull request #28404 from NechamaKrashinski:imgproc-cornersubpix-error-handling
imgproc: replace assertion in cornerSubPix with descriptive error #28404

Replace CV_Assert with explicit bounds check for initial corners in cornerSubPix.

This provides a descriptive runtime error instead of abrupt termination,
improving error handling for Python and C++ users.

No algorithmic or behavioral change for valid inputs.

Fixes #25139 (Related to #7276).

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake
2026-01-22 16:13:21 +03:00
Erellu b201018a25 Fix UB in cv::error when breakOnError set to true
Fixes #28436.
Replaces a nullptr dereference (unguaranteed to cause a SEGFAULT) by `std::terminate` which will call the current `std::terminate_handler` and then SIGARBT.
2026-01-22 13:26:02 +01:00
Alexander Smorkalov fba658b9a1 Merge pull request #28381 from vrabaud:lsh
Improve precision of RotatedRect::points
2026-01-21 17:43:05 +03:00
Kumataro 97df136d32 Merge pull request #28441 from Kumataro:fix28440
Properly preserve KAZE/AKAZE license as mandated by BSD-3-Clause #28441

Close https://github.com/opencv/opencv/issues/28440

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake
2026-01-21 16:17:19 +03:00
jinbo 9c561eb703 3rdparty(itt): support LOONGARCH64
Fix warning generated by `cmake -S . -B build -DWITH_ITT=ON -DBUILD_ITT=ON`:
```
CMake Warning at cmake/OpenCVUtils.cmake:762 (message):
  Unexpected option: BUILD_ITT (=ON)

  Condition: IF
  ((;X86_64;OR;X86;OR;ARM;OR;AARCH64;OR;PPC64;OR;PPC64LE;);AND;NOT;WINRT;AND;NOT;APPLE_FRAMEWORK)
Call Stack (most recent call first):
  CMakeLists.txt:210 (OCV_OPTION)
```
2026-01-21 16:27:32 +08:00
Alexander Smorkalov 70b42e7134 Merge pull request #28292 from intel-staging:ippicv/master_20250919
Update IPPICV binaries (20250919)
2026-01-21 09:01:19 +03:00
Alexander Smorkalov 5132446d03 Merge pull request #28437 from asmorkalov:as/ci_cleanup
Removed unused CI pipelines.
2026-01-20 21:15:17 +03:00
Alexander Smorkalov 528d91e0bc Removed unused CI pipelines. 2026-01-20 10:49:26 +03:00
Alexander Smorkalov 6950bedb5c Merge pull request #28389 from akretz:fix_issue_28352
Use Mat::total() in Darknet IO
2026-01-14 10:02:07 +03:00
Madan mohan Manokar f994a43df2 Improved Bilateral Filter level2
AVX512_SKX and AVX512_ICL dispatch added.
BilateralFilter 32f has been improved for AVX512.
2026-01-14 00:58:16 +00:00
Kumataro 105a774720 Merge pull request #28393 from Kumataro:develop/doc_build_config_avif
doc: update image codec configuration reference (add AVIF, fix JPEG XL) #28393

This PR updates the build configuration documentation to:
- Add AVIF to the supported format list (it was missing).
- Clarify that some codecs (AVIF, JPEG XL) do not support BUILD_* options because OpenCV does not bundle their source code.
- Update the description to include "write" capabilities for these formats.

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [ ] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [x] The feature is well documented and sample code can be built with the project CMake
2026-01-13 13:02:47 +03:00
Adrian Kretz 29d68af2a8 Use Mat::total() in Darknet IO 2026-01-10 16:39:44 +01:00
Vincent Rabaud ef0172d636 Improve precision of RotatedRect::points
Not by much but enough to get a test to pass.
2026-01-08 09:52:35 +01:00
Alexander Smorkalov d8bc5b94b8 Merge pull request #28373 from vrabaud:lsh
Fix potential pointer overflow in BlockSum
2026-01-07 11:04:35 +03:00
Alexander Smorkalov 481ebe0ac0 Merge pull request #28371 from WalkingDevFlag:fix/copyTo-empty-fixed-type-28343
Fix copyTo on empty fixed-type matrices (#28343)
2026-01-07 11:04:05 +03:00
Vincent Rabaud b7efc11b51 Merge pull request #28361 from vrabaud:msan
Prevent a potential crash in FMEstimatorCallback::runKernel #28361
 
With solveCubic sometimes failing, n can be -1.

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [x] There is a reference to the original bug report and related work
- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake
2026-01-06 11:07:19 +03:00
Alexander Smorkalov b227993ad5 Merge pull request #28372 from amd:RaceConditionFix
Issue Fix: Race condition in GaussianBlurFixedPoint
2026-01-06 11:05:50 +03:00
Vincent Rabaud e9c6cb98ea Fix potential pointer overflow.
srcY-roi.y is promoted to size_t which creates problems when it is
negative.
2026-01-06 01:18:54 +01:00
ekharkov a5b283c800 Update IPPICV binaries (20250919) 2026-01-05 23:25:59 +01:00
WalkingDevFlag 175dd57bdd Fix copyTo on empty fixed-type matrices (#28343)
PR #27972 added _dst.create(size(), type()) in copyTo's empty() block.
In Debug builds, Mat::release() was resetting flags to MAGIC_VAL,
clearing the type information and causing assertion failures when
destination has fixedType().

Preserve type flags in Mat::release() debug mode by using:
  flags = (flags & CV_MAT_TYPE_MASK) | MAGIC_VAL

Thanks to @akretz for suggesting this better approach.
2026-01-06 00:51:06 +05:30
Madan mohan Manokar abd0eb94f6 Fixes Issue: Race condition in GaussianBlurFixedPoint #28370 2026-01-05 18:24:27 +00:00
Alexander Smorkalov f3758f40ae Merge pull request #28362 from vrabaud:lsh
Replace pow with std::pow
2026-01-05 16:10:22 +03:00
Vincent Rabaud 5622958189 Replace pow with std::pow
The C pow casts to double while std::pow has overloads that can be
optimized by the compiler.
Also replace pow(*, 1./3) by cbrt.
2026-01-04 15:12:59 +01:00
Alexander Smorkalov 10589eb2c8 Merge pull request #28349 from asmorkalov:as/numpy_2_4_types_fix
Typing fix in tests for modern Numpy
2026-01-03 12:24:01 +03:00
Alexander Smorkalov 0655c2ecba Merge pull request #28332 from nmizonov:hal_ipp_add_check_useipp
Add useIPP check to hal_ipp functions
2026-01-02 18:26:42 +03:00
Alexander Smorkalov f8c04bafa8 Typing fix in tests for modern Numpy 2026-01-02 16:30:28 +03:00
Alexander Smorkalov 4db66beb60 Merge pull request #28345 from hmaarrfk:patch-2
Fix macro definition for Power10 architecture
2026-01-02 15:48:52 +03:00
Mark Harfouche 13c8ec3aa9 Fix macro definition for Power10 architecture 2026-01-01 20:37:01 -05:00
Alexander Smorkalov 3c34e42209 Merge branch 'as/release_4.13.0' into 4.x 2025-12-30 21:56:39 +03:00
Alexander Smorkalov fe38fc608f release: OpenCV 4.13.0 4.13.0 2025-12-30 10:52:05 +03:00
nmizonov 6bb3c31450 Add useIPP check to hal_ipp functions 2025-12-29 04:20:31 -08:00
Alexander Smorkalov a6c10358a4 Merge pull request #28331 from asmorkalov:as/python_standalone_layout
Define installation layout for Python standalone builds
2025-12-29 15:07:37 +03:00
Alexander Smorkalov f9c2961411 Define installation layout for Python standalone builds. 2025-12-29 15:01:07 +03:00
Alexander Smorkalov d43ff988ca Merge pull request #28330 from asmorkalov:as/python_standalone_dlpack
Fixed DLPack detection in Python standalone builds
2025-12-29 14:37:00 +03:00
Alexander Smorkalov 2addae071e Fixed DLPack detection in Python standalone builds 2025-12-29 13:45:19 +03:00
Alexander Smorkalov 83804b8fc7 Merge pull request #28326 from lebarsfa:4.x
"/arch:AVX" should be only for Visual Studio
2025-12-29 13:13:01 +03:00