1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-28 06:43:01 +04:00
Commit Graph

776 Commits

Author SHA1 Message Date
Haodi Yao 29746ab963 fix(features2d): Correct pointer arithmetic in BRISK corner traversal
The pointer offset to move from top-right to bottom-right was incorrect. This change corrects the pointer calculation to use the proper row stride, ensuring it lands on the correct pixel.
2025-11-27 16:34:26 +08:00
pratham-mcw cb659575e8 Merge pull request #27642 from pratham-mcw:perf_arm64_fast_loop_unroll
stitching: enable loop unrolling in fast.cpp to improve ARM64 performance #27642

### 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


- This PR introduces an ARM64-specific performance optimization in the FAST_t function by applying loop unrolling. 
- The optimization is guarded with #if defined(_M_ARM64) to ensure it only affects ARM64 builds. 
- This optimizations lead to performance improvements in stitching module functions.

**Performance Improvements:** 

- This change significantly improved the performance on Windows ARM64 targets.
<img width="935" height="579" alt="image" src="https://github.com/user-attachments/assets/a03833d1-ac9b-408f-916b-243fd6ae2d53" />
2025-09-19 16:49:21 +03:00
pratham-mcw a7943cef60 Merge pull request #27776 from pratham-mcw:win-arm64-agast-detect-optimization
features2d: performance optimization of detect function on Windows-ARM64 #27776

### 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

- This PR improves the performance of the detect function on Windows ARM64 targets.
- Added the defined(_M_ARM64) macro in agast.cpp and agast_score.cpp files, aligning ARM64 behavior with how x64 selects internal functions for computation.
- As a result, ARM64 now executes the same internal functions as x64 where applicable, leading to measurable performance improvements in detect function.
- This changes is limited to Windows ARM64 and does not affect other architectures

**Performance impact:**
- Detect function shows improved runtime on ARM64 targets due to reuse of existing efficient computation paths.
<img width="1419" height="408" alt="image" src="https://github.com/user-attachments/assets/feab411a-d256-4bff-bec2-22b2583f63d1" />
2025-09-12 17:28:54 +03:00
Alexander Smorkalov 84d391aac4 Added heuristic to allocate buffer for FAST features depending on input image resolution. 2025-08-12 11:07:35 +03:00
Haosonn 75d9ac3964 Merge pull request #27391 from Haosonn:pr-rvv-hal-fast
hal/riscv-rvv: implement FAST keypoint detection #27391

An implementation of FAST keypoint detection with NMS/noNMS version.

A new perf test is written, and the perf test is evaluated in two platforms: K1/K230.
Accelaration is achieved when threshold is high, however, weird stat shows that the acceleration doesn't work when threshold is low (the number of keypoint candidates is high).

K1:
```
# GCC

                             Name of Test                               scalar  rvv      rvv
                                                                                          vs
                                                                                        scalar
                                                                                      (x-factor)
detect::Fast_Params::(20, 2, false, "cv/cameracalibration/chess9.png")  22.113 23.721    0.93
detect::Fast_Params::(20, 2, false, "cv/inpaint/orig.png")              4.605  7.168     0.64
detect::Fast_Params::(20, 2, true, "cv/cameracalibration/chess9.png")   26.228 24.689    1.06
detect::Fast_Params::(20, 2, true, "cv/inpaint/orig.png")               7.134  7.561     0.94
detect::Fast_Params::(30, 2, false, "cv/cameracalibration/chess9.png")  19.488 21.407    0.91
detect::Fast_Params::(30, 2, false, "cv/inpaint/orig.png")              3.481  5.404     0.64
detect::Fast_Params::(30, 2, true, "cv/cameracalibration/chess9.png")   22.309 22.145    1.01
detect::Fast_Params::(30, 2, true, "cv/inpaint/orig.png")               4.826  5.654     0.85
detect::Fast_Params::(100, 2, false, "cv/cameracalibration/chess9.png") 14.108 8.205     1.72
detect::Fast_Params::(100, 2, false, "cv/inpaint/orig.png")             2.520  1.072     2.35
detect::Fast_Params::(100, 2, true, "cv/cameracalibration/chess9.png")  14.133 8.410     1.68
detect::Fast_Params::(100, 2, true, "cv/inpaint/orig.png")              2.556  1.097     2.33

# Clang

                             Name of Test                               scalar  rvv      rvv
                                                                                          vs
                                                                                        scalar
                                                                                      (x-factor)
detect::Fast_Params::(20, 2, false, "cv/cameracalibration/chess9.png")  25.130 23.695    1.06
detect::Fast_Params::(20, 2, false, "cv/inpaint/orig.png")              4.987  7.168     0.70
detect::Fast_Params::(20, 2, true, "cv/cameracalibration/chess9.png")   28.035 24.467    1.15
detect::Fast_Params::(20, 2, true, "cv/inpaint/orig.png")               6.760  7.503     0.90
detect::Fast_Params::(30, 2, false, "cv/cameracalibration/chess9.png")  22.954 21.373    1.07
detect::Fast_Params::(30, 2, false, "cv/inpaint/orig.png")              3.838  5.330     0.72
detect::Fast_Params::(30, 2, true, "cv/cameracalibration/chess9.png")   24.523 21.998    1.11
detect::Fast_Params::(30, 2, true, "cv/inpaint/orig.png")               4.795  5.543     0.87
detect::Fast_Params::(100, 2, false, "cv/cameracalibration/chess9.png") 16.799 8.102     2.07
detect::Fast_Params::(100, 2, false, "cv/inpaint/orig.png")             2.874  1.024     2.81
detect::Fast_Params::(100, 2, true, "cv/cameracalibration/chess9.png")  16.950 8.073     2.10
detect::Fast_Params::(100, 2, true, "cv/inpaint/orig.png")              2.899  1.027     2.82
```

K230
```
# GCC

                             Name of Test                               scalar  rvv      rvv
                                                                                          vs
                                                                                        scalar
                                                                                      (x-factor)
detect::Fast_Params::(20, 2, false, "cv/cameracalibration/chess9.png")  21.082 32.090    0.66
detect::Fast_Params::(20, 2, false, "cv/inpaint/orig.png")              4.837  9.157     0.53
detect::Fast_Params::(20, 2, true, "cv/cameracalibration/chess9.png")   25.479 33.576    0.76
detect::Fast_Params::(20, 2, true, "cv/inpaint/orig.png")               7.549  9.716     0.78
detect::Fast_Params::(30, 2, false, "cv/cameracalibration/chess9.png")  18.463 30.087    0.61
detect::Fast_Params::(30, 2, false, "cv/inpaint/orig.png")              3.716  6.544     0.57
detect::Fast_Params::(30, 2, true, "cv/cameracalibration/chess9.png")   21.548 31.374    0.69
detect::Fast_Params::(30, 2, true, "cv/inpaint/orig.png")               5.107  6.928     0.74
detect::Fast_Params::(100, 2, false, "cv/cameracalibration/chess9.png") 13.763 8.712     1.58
detect::Fast_Params::(100, 2, false, "cv/inpaint/orig.png")             2.578  1.284     2.01
detect::Fast_Params::(100, 2, true, "cv/cameracalibration/chess9.png")  13.804 8.831     1.56
detect::Fast_Params::(100, 2, true, "cv/inpaint/orig.png")              2.615  1.289     2.03

# Clang

                             Name of Test                               scalar  rvv      rvv
                                                                                          vs
                                                                                        scalar
                                                                                      (x-factor)
detect::Fast_Params::(20, 2, false, "cv/cameracalibration/chess9.png")  23.424 35.072    0.67
detect::Fast_Params::(20, 2, false, "cv/inpaint/orig.png")              5.284  10.107    0.52
detect::Fast_Params::(20, 2, true, "cv/cameracalibration/chess9.png")   26.487 35.978    0.74
detect::Fast_Params::(20, 2, true, "cv/inpaint/orig.png")               7.146  10.612    0.67
detect::Fast_Params::(30, 2, false, "cv/cameracalibration/chess9.png")  21.155 32.858    0.64
detect::Fast_Params::(30, 2, false, "cv/inpaint/orig.png")              4.101  7.153     0.57
detect::Fast_Params::(30, 2, true, "cv/cameracalibration/chess9.png")   23.321 33.505    0.70
detect::Fast_Params::(30, 2, true, "cv/inpaint/orig.png")               5.106  7.415     0.69
detect::Fast_Params::(100, 2, false, "cv/cameracalibration/chess9.png") 15.597 8.792     1.77
detect::Fast_Params::(100, 2, false, "cv/inpaint/orig.png")             2.922  1.228     2.38
detect::Fast_Params::(100, 2, true, "cv/cameracalibration/chess9.png")  15.626 8.817     1.77
detect::Fast_Params::(100, 2, true, "cv/inpaint/orig.png")              2.963  1.240     2.39
```

### 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
- [ ] The PR is proposed to the proper branch
- [ ] 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
2025-08-11 13:03:34 +03:00
Alexander Smorkalov 1de6e20463 Move OpenVX implementation for FAST to HAL. 2025-02-14 17:47:48 +03:00
Vincent Rabaud bfb54aa691 Remove useless C headers 2025-01-13 16:34:28 +01:00
Maksim Shabunin 72023951ea C-API cleanup: use AutoBuffer in MSER 2024-10-01 18:44:22 +03:00
Alexander Smorkalov e1fec15627 Merge pull request #26148 from mshabunin:fix-sift-corruption
features2d: fixed out of bounds access in SIFT
2024-09-13 15:46:00 +03:00
Maksim Shabunin 6308739638 features2d: fixed out of bounds access in SIFT 2024-09-13 14:30:27 +03:00
Wanli c8080aa415 Merge pull request #26109 from WanliZhong:univ_intrin_operator2warpper
Replace operators with wrapper functions on universal intrinsics backends #26109

This PR aims to replace the operators(logic, arithmetic, bit) with wrapper functions(v_add, v_eq, v_and...)

### 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.
- [ ] The feature is well documented and sample code can be built with the project CMake
2024-09-13 10:56:48 +03:00
Kumataro a3bdbf5553 Merge pull request #26022 from Kumataro:fix26016
Imgproc: use double to determine whether the corners points are within src #26022

close #26016
Related https://github.com/opencv/opencv_contrib/pull/3778

### 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
2024-08-23 12:35:13 +03:00
Liutong HAN a287605c3e Clean up the Universal Intrinsic API. 2023-10-13 19:23:30 +08:00
Sean McBride 5fb3869775 Merge pull request #23109 from seanm:misc-warnings
* Fixed clang -Wnewline-eof warnings
* Fixed all trivial clang -Wextra-semi and -Wc++98-compat-extra-semi warnings
* Removed trailing semi from various macros
* Fixed various -Wunused-macros warnings
* Fixed some trivial -Wdocumentation warnings
* Fixed some -Wdocumentation-deprecated-sync warnings
* Fixed incorrect indentation
* Suppressed some clang warnings in 3rd party code
* Fixed QRCodeEncoder::Params documentation.

---------

Co-authored-by: Alexander Smorkalov <alexander.smorkalov@xperience.ai>
2023-10-06 13:33:21 +03:00
Yuriy Chernyshov 9f74982a54 Merge pull request #24323 from georgthegreat:akaze-variadic 2023-10-03 16:16:41 +03:00
HAN Liutong aa143a3dd1 Merge pull request #24301 from hanliutong:rewrite-stereo-sift
Rewrite Universal Intrinsic code: features2d and calib3d module. #24301

The goal of this series of PRs is to modify the SIMD code blocks guarded by CV_SIMD macro: rewrite them by using the new Universal Intrinsic API.

This is the modification to the features2d module and calib3d module.

Test with clang 16 and QEMU v7.0.0. `AP3P.ctheta1p_nan_23607` failed beacuse of a small calculation error. But this patch does not touch the relevant code, and this error always reproduce on QEMU, regardless of whether the patch is applied or not. I think we can ignore it
```
[ RUN      ] AP3P.ctheta1p_nan_23607
/home/hanliutong/project/opencv/modules/calib3d/test/test_solvepnp_ransac.cpp:2319: Failure
Expected: (cvtest::norm(res.colRange(0, 2), expected, NORM_INF)) <= (3e-16), actual: 3.33067e-16 vs 3e-16
[  FAILED  ] AP3P.ctheta1p_nan_23607 (26 ms)

...

[==========] 148 tests from 64 test cases ran. (1147114 ms total)
[  PASSED  ] 147 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] AP3P.ctheta1p_nan_23607
```

Note: There are 2 test cases failed with GCC 13.2.1 without this patch, seems like there are someting wrong with RVV part on GCC.
```
[----------] Global test environment tear-down
[==========] 148 tests from 64 test cases ran. (1511399 ms total)
[  PASSED  ] 146 tests.
[  FAILED  ] 2 tests, listed below:
[  FAILED  ] Calib3d_StereoSGBM.regression
[  FAILED  ] Calib3d_StereoSGBM_HH4.regression
```

The patch is partially auto-generated by using the [rewriter](https://github.com/hanliutong/rewriter).

### Pull Request Readiness Checklist

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

- [ ] I agree to contribute to the project under Apache 2 License.
- [ ] 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
- [ ] 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.
- [ ] The feature is well documented and sample code can be built with the project CMake
2023-09-25 13:03:25 +03:00
Yuriy Chernyshov 2c53e3f53d Merge pull request #24204 from georgthegreat:mser-license
Properly preserve chi_table license as mandated by BSD-3-Clause #24204

Amend reference to online hosted file with the full license quotation as mandated by the original license.
2023-09-05 17:05:47 +03:00
Alexander Smorkalov d4861bfd1f Merge remote-tracking branch 'origin/3.4' into merge-3.4 2023-05-24 14:37:48 +03:00
Alexander Smorkalov ae8c90301f Fixed mask handling in AffineFeature. 2023-05-17 12:04:52 +03:00
Vaclav Vavra 923dbcc58f different interpolation by double image (#23124)
* different interpolation by double image

* fixing scaling mapping

* fixing a test

* added an option to enable previous interpolation

* added doxygen entries for the new parameter

* ASSERT_TRUE -> ASSERT_EQ

* changed log message when using old upscale mode
2023-02-17 10:35:54 +03:00
Alexander Alekhin 47293f28cf Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2023-02-11 18:35:00 +00:00
whuaegeansea 400572b19f Fix bug 2023-02-01 11:25:31 +08:00
Alexander Alekhin 18cbfa4a4f Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2023-01-23 00:11:12 +00:00
Alexander Alekhin 5bacd8753b build: eliminate GCC9 warning from sift.simd.hpp 2023-01-10 01:38:12 +00:00
Alexander Smorkalov b7292bc899 Fixed blob detector parameters range. 2022-12-26 15:02:24 +03:00
augustinmanecy 0bd54a60e9 Merge pull request #20367 from augustinmanecy:features2d-rw
**Merge with contrib**: https://github.com/opencv/opencv_contrib/pull/3003

### 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 other license that is incompatible with OpenCV
- [x] The PR is proposed to proper branch
- [ ] There is reference to 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
2022-12-21 16:03:00 +03:00
Petr Glotov a3ebafbdeb Merge pull request #21942 from pglotov:add-blob-contours
added blob contours to blob detector

* added blob contours

* Fixed Java regression test after new parameter addition to SimpleBlobDetector.

* Added stub implementation of SimpleBlobDetector::getBlobContours to presume source API compatibility.
2022-10-07 19:07:51 +03:00
Sean McBride 1829eba584 Fixed most clang -Wextra-semi warnings 2022-09-27 18:06:46 -04:00
Alexander Smorkalov bfeeb0ad70 Merge pull request #22285 from asenyaev:asen/disabled_compiling_warnings_3.4
Disabled compiling warnings in case of symbols in cmake for 3.4
2022-09-20 15:14:36 +03:00
Alexander Smorkalov 2273af0166 Merge pull request #22286 from asenyaev:asen/disabled_compiling_warnings_4.x
Disabled compiling warnings in case of symbols in cmake for 4.x
2022-09-20 15:13:06 +03:00
Andrey Senyaev ccfc34b13f Disabled compiling warnings in case of symbols in cmake for 4.x 2022-09-20 13:35:48 +03:00
Andrey Senyaev 3f4abcb228 Disabled compiling warnings in case of symbols in cmake for 3.4 2022-09-20 13:34:17 +03:00
Alexander Alekhin 2ebdc04787 Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2022-08-14 15:50:42 +00:00
Alexander Alekhin 85b0b0cd77 build: add missing GCC condition for pragma 2022-07-24 12:19:37 +03:00
Andrey Senyaev d2b1e38207 Pragma to ignore -Waggressive-loop-optimizations on Linux ARM64 2022-07-14 11:17:38 +03:00
Namgoo Lee 24547f40ff remove const from functions returning by value 2022-05-26 21:30:41 +09:00
Kumataro 602caa9cd6 Merge pull request #21937 from Kumataro:4.x-fix-21911
* Fix warnings for clang15

* Fix warnings: Remove unnecessary code

* Fix warnings: Remove unnecessary code
2022-05-13 17:32:05 +00:00
Alexander Alekhin 7b57df02a7 Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2021-10-30 14:26:17 +00:00
Alexander Alekhin d612c72405 build: fix MSVC-Clang warnings about unused parameters in stubs 2021-10-28 21:08:36 +00:00
Alexander Alekhin cca4c47781 Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2021-10-08 11:05:45 +00:00
Alexander Panov dfc94c58f0 Merge pull request #20823 from AleksandrPanov:fix_orb_integer_overflow
Fix ORB integer overflow

* set size_t step to fix integer overflow in ptr0 offset

* added issue_537 test

* minor fix tags, points

* added size_t_step and offset to remove mixed unsigned and signed operations

* features2d: update ORB checks

Co-authored-by: Alexander Alekhin <alexander.a.alekhin@gmail.com>
2021-10-07 22:46:25 +00:00
Alexander Alekhin 03a08435e2 Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2021-10-07 04:27:22 +00:00
Alexander Alekhin 755e0143fb Merge pull request #20815 from alalek:fix_20649_revert_19859
features2d: repair SimpleBlobDetector

* features2d: revert code change by PR #19859

Reverted commit 76860933f0

* features2d: check SimpleBlobDetector parameters consistency
2021-10-06 15:05:45 +03:00
Alexander Alekhin 4c05a697fa Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2021-08-28 21:30:28 +00:00
Alexander Alekhin 076587425e build: eliminate build warnings 2021-08-28 17:11:26 +00:00
Alexander Alekhin 5091e64a42 Merge pull request #20204 from Developer-Ecosystem-Engineering:improve-sift 2021-06-22 22:58:52 +00:00
Alexander Alekhin 735a79ae83 Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2021-06-19 18:44:16 +00:00
Developer-Ecosystem-Engineering 9557b9f70f Improve SIFT for arm64/Apple silicon
- Reduce branch density by collapsing compares.
- Fix windows build errors
- Use OpenCV universal intrinsics
- Use v_check_any and v_signmask as requested
2021-06-17 10:14:48 -07:00
Tiago De Gaspari 411fd2b761 Add Thickness parameter in drawMatches function
This commit adds the feature of selecting the thickness
of the matches drawn by the drawMatches function.

In larger images, the default thickness of 1 pixel creates images
that are hard to visualize.
2021-06-07 12:52:48 -03:00
Alexander Alekhin 68d15fc62e Merge remote-tracking branch 'upstream/3.4' into merge-3.4 2021-04-08 11:23:24 +00:00