Skip to content

Add RISC-V HAL implementation for cv::threshold and cv::adaptiveThreshold#27072

Merged
asmorkalov merged 4 commits intoopencv:4.xfrom
amane-ame:thresh_hal_rvv
Mar 18, 2025
Merged

Add RISC-V HAL implementation for cv::threshold and cv::adaptiveThreshold#27072
asmorkalov merged 4 commits intoopencv:4.xfrom
amane-ame:thresh_hal_rvv

Conversation

@amane-ame
Copy link
Copy Markdown
Contributor

@amane-ame amane-ame commented Mar 15, 2025

This patch implements cv_hal_threshold_otsu and cv_hal_adaptiveThreshold using native intrinsics, optimizing the performance of cv::threshold(THRESH_OTSU) and cv::adaptiveThreshold.

Since UI is as fast as HAL cv_hal_rvv::threshold::threshold so cv_hal_threshold is not redirected, but this part of HAL is keeped because cv_hal_threshold_otsu depends on it.

Tested on MUSE-PI (Spacemit X60) for both gcc 14.2 and clang 20.0.

$ ./opencv_test_imgproc --gtest_filter="*thresh*:*Thresh*"
$ ./opencv_perf_imgproc --gtest_filter="*otsu*:*adaptiveThreshold*" --perf_min_samples=1000 --perf_force_samples=1000

image

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

amane-ame and others added 3 commits March 14, 2025 14:05
Co-authored-by: Liutong HAN <liutong2020@iscas.ac.cn>
Co-authored-by: Liutong HAN <liutong2020@iscas.ac.cn>
Co-authored-by: Liutong HAN <liutong2020@iscas.ac.cn>
@amane-ame
Copy link
Copy Markdown
Contributor Author

I will investigate the test failure soon.

Co-authored-by: Liutong HAN <liutong2020@iscas.ac.cn>
@amane-ame
Copy link
Copy Markdown
Contributor Author

@asmorkalov Fixed, please re-run checks.

@asmorkalov
Copy link
Copy Markdown
Contributor

asmorkalov commented Mar 17, 2025

There are several groups of perf tests for threshold (Muse Pi v 30, gcc 14.2):
Generic:

threshold::Size_MatType_ThreshType::(127x61, 8UC1, THRESH_BINARY) 	0.004 	0.004 	0.99
threshold::Size_MatType_ThreshType::(127x61, 8UC1, THRESH_BINARY_INV) 	0.004 	0.004 	0.99
threshold::Size_MatType_ThreshType::(127x61, 8UC1, THRESH_TOZERO) 	0.004 	0.004 	0.99
threshold::Size_MatType_ThreshType::(127x61, 8UC1, THRESH_TOZERO_INV) 	0.004 	0.004 	0.98
threshold::Size_MatType_ThreshType::(127x61, 8UC1, THRESH_TRUNC) 	0.004 	0.004 	0.99
threshold::Size_MatType_ThreshType::(127x61, 16SC1, THRESH_BINARY) 	0.005 	0.006 	0.90
threshold::Size_MatType_ThreshType::(127x61, 16SC1, THRESH_BINARY_INV) 	0.005 	0.006 	0.93
threshold::Size_MatType_ThreshType::(127x61, 16SC1, THRESH_TOZERO) 	0.005 	0.006 	0.91
threshold::Size_MatType_ThreshType::(127x61, 16SC1, THRESH_TOZERO_INV) 	0.005 	0.006 	0.95
threshold::Size_MatType_ThreshType::(127x61, 16SC1, THRESH_TRUNC) 	0.004 	0.004 	0.89
threshold::Size_MatType_ThreshType::(127x61, 32FC1, THRESH_BINARY) 	0.013 	0.012 	1.08
threshold::Size_MatType_ThreshType::(127x61, 32FC1, THRESH_BINARY_INV) 	0.013 	0.012 	1.14
threshold::Size_MatType_ThreshType::(127x61, 32FC1, THRESH_TOZERO) 	0.013 	0.012 	1.06
threshold::Size_MatType_ThreshType::(127x61, 32FC1, THRESH_TOZERO_INV) 	0.012 	0.012 	1.02
threshold::Size_MatType_ThreshType::(127x61, 32FC1, THRESH_TRUNC) 	0.012 	0.010 	1.14
threshold::Size_MatType_ThreshType::(127x61, 64FC1, THRESH_BINARY) 	0.027 	0.028 	0.96
threshold::Size_MatType_ThreshType::(127x61, 64FC1, THRESH_BINARY_INV) 	0.028 	0.026 	1.06
threshold::Size_MatType_ThreshType::(127x61, 64FC1, THRESH_TOZERO) 	0.028 	0.025 	1.11
threshold::Size_MatType_ThreshType::(127x61, 64FC1, THRESH_TOZERO_INV) 	0.028 	0.024 	1.14
threshold::Size_MatType_ThreshType::(127x61, 64FC1, THRESH_TRUNC) 	0.028 	0.026 	1.11
threshold::Size_MatType_ThreshType::(640x480, 8UC1, THRESH_BINARY) 	0.096 	0.097 	0.99
threshold::Size_MatType_ThreshType::(640x480, 8UC1, THRESH_BINARY_INV) 	0.095 	0.096 	0.99
threshold::Size_MatType_ThreshType::(640x480, 8UC1, THRESH_TOZERO) 	0.096 	0.097 	0.99
threshold::Size_MatType_ThreshType::(640x480, 8UC1, THRESH_TOZERO_INV) 	0.096 	0.096 	1.00
threshold::Size_MatType_ThreshType::(640x480, 8UC1, THRESH_TRUNC) 	0.096 	0.096 	1.00
threshold::Size_MatType_ThreshType::(640x480, 16SC1, THRESH_BINARY) 	0.200 	0.185 	1.08
threshold::Size_MatType_ThreshType::(640x480, 16SC1, THRESH_BINARY_INV) 	0.201 	0.186 	1.08
threshold::Size_MatType_ThreshType::(640x480, 16SC1, THRESH_TOZERO) 	0.201 	0.186 	1.08
threshold::Size_MatType_ThreshType::(640x480, 16SC1, THRESH_TOZERO_INV) 	0.200 	0.186 	1.07
threshold::Size_MatType_ThreshType::(640x480, 16SC1, THRESH_TRUNC) 	0.200 	0.185 	1.08
threshold::Size_MatType_ThreshType::(640x480, 32FC1, THRESH_BINARY) 	0.419 	0.380 	1.10
threshold::Size_MatType_ThreshType::(640x480, 32FC1, THRESH_BINARY_INV) 	0.421 	0.375 	1.12
threshold::Size_MatType_ThreshType::(640x480, 32FC1, THRESH_TOZERO) 	0.419 	0.380 	1.10
threshold::Size_MatType_ThreshType::(640x480, 32FC1, THRESH_TOZERO_INV) 	0.419 	0.377 	1.11
threshold::Size_MatType_ThreshType::(640x480, 32FC1, THRESH_TRUNC) 	0.421 	0.382 	1.10
threshold::Size_MatType_ThreshType::(640x480, 64FC1, THRESH_BINARY) 	0.842 	0.807 	1.04
threshold::Size_MatType_ThreshType::(640x480, 64FC1, THRESH_BINARY_INV) 	0.841 	0.806 	1.04
threshold::Size_MatType_ThreshType::(640x480, 64FC1, THRESH_TOZERO) 	0.841 	0.805 	1.04
threshold::Size_MatType_ThreshType::(640x480, 64FC1, THRESH_TOZERO_INV) 	0.844 	0.807 	1.05
threshold::Size_MatType_ThreshType::(640x480, 64FC1, THRESH_TRUNC) 	0.839 	0.808 	1.04
threshold::Size_MatType_ThreshType::(1280x720, 8UC1, THRESH_BINARY) 	0.469 	0.282 	1.66
threshold::Size_MatType_ThreshType::(1280x720, 8UC1, THRESH_BINARY_INV) 	0.468 	0.291 	1.61
threshold::Size_MatType_ThreshType::(1280x720, 8UC1, THRESH_TOZERO) 	0.473 	0.303 	1.56
threshold::Size_MatType_ThreshType::(1280x720, 8UC1, THRESH_TOZERO_INV) 	0.468 	0.282 	1.66
threshold::Size_MatType_ThreshType::(1280x720, 8UC1, THRESH_TRUNC) 	0.468 	0.286 	1.64
threshold::Size_MatType_ThreshType::(1280x720, 16SC1, THRESH_BINARY) 	0.729 	0.610 	1.19
threshold::Size_MatType_ThreshType::(1280x720, 16SC1, THRESH_BINARY_INV) 	0.730 	0.608 	1.20
threshold::Size_MatType_ThreshType::(1280x720, 16SC1, THRESH_TOZERO) 	0.734 	0.610 	1.20
threshold::Size_MatType_ThreshType::(1280x720, 16SC1, THRESH_TOZERO_INV) 	0.725 	0.609 	1.19
threshold::Size_MatType_ThreshType::(1280x720, 16SC1, THRESH_TRUNC) 	0.729 	0.607 	1.20
threshold::Size_MatType_ThreshType::(1280x720, 32FC1, THRESH_BINARY) 	1.678 	1.230 	1.36
threshold::Size_MatType_ThreshType::(1280x720, 32FC1, THRESH_BINARY_INV) 	1.726 	1.221 	1.41
threshold::Size_MatType_ThreshType::(1280x720, 32FC1, THRESH_TOZERO) 	1.685 	1.226 	1.37
threshold::Size_MatType_ThreshType::(1280x720, 32FC1, THRESH_TOZERO_INV) 	1.593 	1.224 	1.30
threshold::Size_MatType_ThreshType::(1280x720, 32FC1, THRESH_TRUNC) 	1.270 	1.222 	1.04
threshold::Size_MatType_ThreshType::(1280x720, 64FC1, THRESH_BINARY) 	3.370 	2.386 	1.41
threshold::Size_MatType_ThreshType::(1280x720, 64FC1, THRESH_BINARY_INV) 	3.317 	2.383 	1.39
threshold::Size_MatType_ThreshType::(1280x720, 64FC1, THRESH_TOZERO) 	3.670 	2.388 	1.54
threshold::Size_MatType_ThreshType::(1280x720, 64FC1, THRESH_TOZERO_INV) 	3.757 	2.379 	1.58
threshold::Size_MatType_ThreshType::(1280x720, 64FC1, THRESH_TRUNC) 	2.500 	2.371 	1.05
threshold::Size_MatType_ThreshType::(1920x1080, 8UC1, THRESH_BINARY) 	0.911 	0.708 	1.29
threshold::Size_MatType_ThreshType::(1920x1080, 8UC1, THRESH_BINARY_INV) 	0.910 	0.718 	1.27
threshold::Size_MatType_ThreshType::(1920x1080, 8UC1, THRESH_TOZERO) 	0.912 	0.709 	1.29
threshold::Size_MatType_ThreshType::(1920x1080, 8UC1, THRESH_TOZERO_INV) 	0.926 	0.713 	1.30
threshold::Size_MatType_ThreshType::(1920x1080, 8UC1, THRESH_TRUNC) 	0.919 	0.703 	1.31
threshold::Size_MatType_ThreshType::(1920x1080, 16SC1, THRESH_BINARY) 	1.537 	1.383 	1.11
threshold::Size_MatType_ThreshType::(1920x1080, 16SC1, THRESH_BINARY_INV) 	1.541 	1.369 	1.13
threshold::Size_MatType_ThreshType::(1920x1080, 16SC1, THRESH_TOZERO) 	1.539 	1.363 	1.13
threshold::Size_MatType_ThreshType::(1920x1080, 16SC1, THRESH_TOZERO_INV) 	1.526 	1.360 	1.12
threshold::Size_MatType_ThreshType::(1920x1080, 16SC1, THRESH_TRUNC) 	1.524 	1.358 	1.12
threshold::Size_MatType_ThreshType::(1920x1080, 32FC1, THRESH_BINARY) 	3.363 	2.732 	1.23
threshold::Size_MatType_ThreshType::(1920x1080, 32FC1, THRESH_BINARY_INV) 	3.290 	2.766 	1.19
threshold::Size_MatType_ThreshType::(1920x1080, 32FC1, THRESH_TOZERO) 	3.325 	2.655 	1.25
threshold::Size_MatType_ThreshType::(1920x1080, 32FC1, THRESH_TOZERO_INV) 	3.336 	2.663 	1.25
threshold::Size_MatType_ThreshType::(1920x1080, 32FC1, THRESH_TRUNC) 	2.954 	2.679 	1.10
threshold::Size_MatType_ThreshType::(1920x1080, 64FC1, THRESH_BINARY) 	5.691 	5.494 	1.04
threshold::Size_MatType_ThreshType::(1920x1080, 64FC1, THRESH_BINARY_INV) 	5.715 	5.567 	1.03
threshold::Size_MatType_ThreshType::(1920x1080, 64FC1, THRESH_TOZERO) 	5.703 	5.516 	1.03
threshold::Size_MatType_ThreshType::(1920x1080, 64FC1, THRESH_TOZERO_INV) 	5.657 	5.545 	1.02
threshold::Size_MatType_ThreshType::(1920x1080, 64FC1, THRESH_TRUNC) 	5.390 	5.512 	0.98

OTSU:

threshold_otsu::Size_Only::127x61 	0.050 	0.050 	1.00
threshold_otsu::Size_Only::640x480 	1.075 	0.563 	1.91
threshold_otsu::Size_Only::1280x720 	3.248 	1.582 	2.05
threshold_otsu::Size_Only::1920x1080 	7.407 	3.690 	2.01 

Generic threshold with CPU and OpenCL:

Threshold::OCL_ThreshFixture::(640x480, 8UC1, THRESH_BINARY) 	0.099 	0.098 	1.01
Threshold::OCL_ThreshFixture::(640x480, 8UC1, THRESH_BINARY_INV) 	0.098 	0.100 	0.98
Threshold::OCL_ThreshFixture::(640x480, 8UC1, THRESH_TOZERO_INV) 	0.097 	0.099 	0.98
Threshold::OCL_ThreshFixture::(640x480, 8UC1, THRESH_TRUNC) 	0.098 	0.099 	0.99
Threshold::OCL_ThreshFixture::(640x480, 32FC1, THRESH_BINARY) 	0.377 	0.385 	0.98
Threshold::OCL_ThreshFixture::(640x480, 32FC1, THRESH_BINARY_INV) 	0.378 	0.385 	0.98
Threshold::OCL_ThreshFixture::(640x480, 32FC1, THRESH_TOZERO_INV) 	0.381 	0.384 	0.99
Threshold::OCL_ThreshFixture::(640x480, 32FC1, THRESH_TRUNC) 	0.380 	0.387 	0.98
Threshold::OCL_ThreshFixture::(640x480, 8UC4, THRESH_BINARY) 	0.376 	0.388 	0.97
Threshold::OCL_ThreshFixture::(640x480, 8UC4, THRESH_BINARY_INV) 	0.380 	0.385 	0.99
Threshold::OCL_ThreshFixture::(640x480, 8UC4, THRESH_TOZERO_INV) 	0.384 	0.387 	0.99
Threshold::OCL_ThreshFixture::(640x480, 8UC4, THRESH_TRUNC) 	0.381 	0.396 	0.96
Threshold::OCL_ThreshFixture::(640x480, 32FC4, THRESH_BINARY) 	1.602 	1.662 	0.96
Threshold::OCL_ThreshFixture::(640x480, 32FC4, THRESH_BINARY_INV) 	1.586 	1.680 	0.94
Threshold::OCL_ThreshFixture::(640x480, 32FC4, THRESH_TOZERO_INV) 	1.584 	1.668 	0.95
Threshold::OCL_ThreshFixture::(640x480, 32FC4, THRESH_TRUNC) 	1.599 	1.667 	0.96
Threshold::OCL_ThreshFixture::(1280x720, 8UC1, THRESH_BINARY) 	0.378 	0.279 	1.35
Threshold::OCL_ThreshFixture::(1280x720, 8UC1, THRESH_BINARY_INV) 	0.399 	0.279 	1.43
Threshold::OCL_ThreshFixture::(1280x720, 8UC1, THRESH_TOZERO_INV) 	0.404 	0.281 	1.44
Threshold::OCL_ThreshFixture::(1280x720, 8UC1, THRESH_TRUNC) 	0.379 	0.282 	1.34
Threshold::OCL_ThreshFixture::(1280x720, 32FC1, THRESH_BINARY) 	1.559 	1.196 	1.30
Threshold::OCL_ThreshFixture::(1280x720, 32FC1, THRESH_BINARY_INV) 	1.630 	1.197 	1.36
Threshold::OCL_ThreshFixture::(1280x720, 32FC1, THRESH_TOZERO_INV) 	1.693 	1.201 	1.41
Threshold::OCL_ThreshFixture::(1280x720, 32FC1, THRESH_TRUNC) 	1.201 	1.195 	1.01
Threshold::OCL_ThreshFixture::(1280x720, 8UC4, THRESH_BINARY) 	1.621 	1.204 	1.35
Threshold::OCL_ThreshFixture::(1280x720, 8UC4, THRESH_BINARY_INV) 	1.751 	1.209 	1.45
Threshold::OCL_ThreshFixture::(1280x720, 8UC4, THRESH_TOZERO_INV) 	1.662 	1.211 	1.37
Threshold::OCL_ThreshFixture::(1280x720, 8UC4, THRESH_TRUNC) 	1.636 	1.198 	1.37
Threshold::OCL_ThreshFixture::(1280x720, 32FC4, THRESH_BINARY) 	4.710 	4.725 	1.00
Threshold::OCL_ThreshFixture::(1280x720, 32FC4, THRESH_BINARY_INV) 	4.708 	4.677 	1.01
Threshold::OCL_ThreshFixture::(1280x720, 32FC4, THRESH_TOZERO_INV) 	4.705 	4.692 	1.00
Threshold::OCL_ThreshFixture::(1280x720, 32FC4, THRESH_TRUNC) 	4.693 	4.682 	1.00
Threshold::OCL_ThreshFixture::(1920x1080, 8UC1, THRESH_BINARY) 	0.747 	0.676 	1.10
Threshold::OCL_ThreshFixture::(1920x1080, 8UC1, THRESH_BINARY_INV) 	0.737 	0.676 	1.09
Threshold::OCL_ThreshFixture::(1920x1080, 8UC1, THRESH_TOZERO_INV) 	0.743 	0.723 	1.03
Threshold::OCL_ThreshFixture::(1920x1080, 8UC1, THRESH_TRUNC) 	0.741 	0.701 	1.06
Threshold::OCL_ThreshFixture::(1920x1080, 32FC1, THRESH_BINARY) 	2.951 	2.819 	1.05
Threshold::OCL_ThreshFixture::(1920x1080, 32FC1, THRESH_BINARY_INV) 	3.016 	2.814 	1.07
Threshold::OCL_ThreshFixture::(1920x1080, 32FC1, THRESH_TOZERO_INV) 	2.976 	2.766 	1.08
Threshold::OCL_ThreshFixture::(1920x1080, 32FC1, THRESH_TRUNC) 	2.648 	2.611 	1.01
Threshold::OCL_ThreshFixture::(1920x1080, 8UC4, THRESH_BINARY) 	2.942 	2.663 	1.10
Threshold::OCL_ThreshFixture::(1920x1080, 8UC4, THRESH_BINARY_INV) 	2.952 	2.722 	1.08
Threshold::OCL_ThreshFixture::(1920x1080, 8UC4, THRESH_TOZERO_INV) 	2.883 	2.660 	1.08
Threshold::OCL_ThreshFixture::(1920x1080, 8UC4, THRESH_TRUNC) 	2.908 	2.721 	1.07
Threshold::OCL_ThreshFixture::(1920x1080, 32FC4, THRESH_BINARY) 	10.328 	10.270 	1.01
Threshold::OCL_ThreshFixture::(1920x1080, 32FC4, THRESH_BINARY_INV) 	10.349 	10.212 	1.01
Threshold::OCL_ThreshFixture::(1920x1080, 32FC4, THRESH_TOZERO_INV) 	10.237 	10.260 	1.00
Threshold::OCL_ThreshFixture::(1920x1080, 32FC4, THRESH_TRUNC) 	10.351 	10.167 	1.02
Threshold::OCL_ThreshFixture::(3840x2160, 8UC1, THRESH_BINARY) 	2.791 	2.721 	1.03
Threshold::OCL_ThreshFixture::(3840x2160, 8UC1, THRESH_BINARY_INV) 	2.761 	2.747 	1.01
Threshold::OCL_ThreshFixture::(3840x2160, 8UC1, THRESH_TOZERO_INV) 	2.757 	2.763 	1.00
Threshold::OCL_ThreshFixture::(3840x2160, 8UC1, THRESH_TRUNC) 	2.780 	2.782 	1.00
Threshold::OCL_ThreshFixture::(3840x2160, 32FC1, THRESH_BINARY) 	10.833 	10.538 	1.03
Threshold::OCL_ThreshFixture::(3840x2160, 32FC1, THRESH_BINARY_INV) 	10.735 	10.374 	1.03
Threshold::OCL_ThreshFixture::(3840x2160, 32FC1, THRESH_TOZERO_INV) 	10.708 	10.300 	1.04
Threshold::OCL_ThreshFixture::(3840x2160, 32FC1, THRESH_TRUNC) 	10.269 	10.254 	1.00
Threshold::OCL_ThreshFixture::(3840x2160, 8UC4, THRESH_BINARY) 	10.629 	10.424 	1.02
Threshold::OCL_ThreshFixture::(3840x2160, 8UC4, THRESH_BINARY_INV) 	10.665 	10.349 	1.03
Threshold::OCL_ThreshFixture::(3840x2160, 8UC4, THRESH_TOZERO_INV) 	10.742 	10.311 	1.04
Threshold::OCL_ThreshFixture::(3840x2160, 8UC4, THRESH_TRUNC) 	10.655 	10.355 	1.03
Threshold::OCL_ThreshFixture::(3840x2160, 32FC4, THRESH_BINARY) 	41.122 	40.900 	1.01
Threshold::OCL_ThreshFixture::(3840x2160, 32FC4, THRESH_BINARY_INV) 	41.104 	40.866 	1.01
Threshold::OCL_ThreshFixture::(3840x2160, 32FC4, THRESH_TOZERO_INV) 	41.068 	40.733 	1.01
Threshold::OCL_ThreshFixture::(3840x2160, 32FC4, THRESH_TRUNC) 	40.892 	41.059 	1.00 

Adaptive threshold:

adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 0) 	0.239 	0.028 	8.47
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 10) 	0.233 	0.029 	8.09
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 0) 	0.248 	0.046 	5.36
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 10) 	0.248 	0.046 	5.37
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 3, 0) 	0.065 	0.027 	2.42
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 3, 10) 	0.065 	0.027 	2.40
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 5, 0) 	0.070 	0.035 	1.99
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 5, 10) 	0.070 	0.035 	2.00
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 0) 	0.237 	0.028 	8.46
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 10) 	0.234 	0.028 	8.21
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 0) 	0.251 	0.046 	5.41
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 10) 	0.247 	0.046 	5.35
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 3, 0) 	0.065 	0.027 	2.44
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 3, 10) 	0.065 	0.027 	2.41
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 5, 0) 	0.071 	0.035 	2.00
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(127x61, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 5, 10) 	0.071 	0.035 	2.03
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 0) 	7.829 	0.201 	39.02
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 10) 	7.800 	0.200 	38.92
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 0) 	8.256 	0.293 	28.21
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 10) 	8.289 	0.293 	28.32
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 3, 0) 	1.633 	0.199 	8.19
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 3, 10) 	1.619 	0.199 	8.12
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 5, 0) 	1.775 	0.236 	7.53
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 5, 10) 	1.770 	0.236 	7.51
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 0) 	7.869 	0.201 	39.23
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 10) 	7.783 	0.202 	38.59
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 0) 	8.316 	0.293 	28.39
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 10) 	8.325 	0.293 	28.44
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 3, 0) 	1.626 	0.198 	8.19
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 3, 10) 	1.613 	0.199 	8.12
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 5, 0) 	1.762 	0.235 	7.50
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(640x480, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 5, 10) 	1.760 	0.235 	7.49
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 0) 	22.820 	0.432 	52.82
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 10) 	22.739 	0.430 	52.84
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 0) 	24.283 	0.722 	33.62
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 10) 	24.240 	0.725 	33.43
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 3, 0) 	4.937 	0.412 	12.00
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 3, 10) 	4.875 	0.408 	11.94
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 5, 0) 	5.411 	0.479 	11.29
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 5, 10) 	5.437 	0.481 	11.30
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 0) 	22.805 	0.431 	52.88
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 10) 	22.749 	0.433 	52.56
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 0) 	24.118 	0.723 	33.34
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 10) 	24.184 	0.717 	33.71
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 3, 0) 	4.929 	0.409 	12.04
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 3, 10) 	4.877 	0.413 	11.80
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 5, 0) 	5.411 	0.478 	11.31
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1280x720, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 5, 10) 	5.332 	0.479 	11.14
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 0) 	49.260 	1.091 	45.16
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 10) 	49.372 	1.099 	44.92
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 0) 	58.498 	2.465 	23.73
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 10) 	58.249 	2.480 	23.48
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 3, 0) 	11.307 	0.969 	11.67
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 3, 10) 	11.216 	0.966 	11.62
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 5, 0) 	12.346 	1.159 	10.65
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, 5, 10) 	12.071 	1.155 	10.45
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 0) 	49.405 	1.093 	45.18
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 3, 10) 	49.437 	1.096 	45.10
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 0) 	58.419 	2.443 	23.91
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY_INV, ADAPTIVE_THRESH_GAUSSIAN_C, 5, 10) 	58.440 	2.440 	23.95
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 3, 0) 	11.349 	0.959 	11.84
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 3, 10) 	11.360 	0.957 	11.87
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 5, 0) 	12.629 	1.164 	10.85
adaptiveThreshold::Size_AdaptThreshType_AdaptThreshMethod_BlockSize_Delta::(1920x1080, THRESH_BINARY_INV, ADAPTIVE_THRESH_MEAN_C, 5, 10) 	12.258 	1.151 	10.65 

@asmorkalov
Copy link
Copy Markdown
Contributor

@fengyuentau @mshabunin Do you have any remarks? I want to merge the PR.

Copy link
Copy Markdown
Member

@fengyuentau fengyuentau left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My performance results (K1 vs RK3568): perf-threshold.zip

👍

@asmorkalov asmorkalov merged commit 0142231 into opencv:4.x Mar 18, 2025
21 of 28 checks passed
@asmorkalov asmorkalov mentioned this pull request Apr 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants