dstChannels Lab, Luv, YCrCb and XYZ conversion fix#22962
Conversation
|
Perf test results summary before/after patch (last column - x-factor): Due to the performance problem occurs when the ...
make_tuple(ConversionTypes(COLOR_RGB2Lab), 3, 0),
make_tuple(ConversionTypes(COLOR_Lab2BGR), 3, 0),
make_tuple(ConversionTypes(COLOR_RGB2Luv), 3, 0),
...This significant difference in performance (especially in conversion of high resolution images) is explained here:
|
|
/cc @vrabaud |
|
@stopmosk , would it make sense to add perf test modifications to the PR too? |
|
@asmorkalov is it correct to replace all explicit Before: OCL_PERF_TEST_P(CvtColorFixture, CvtColor, testing::Combine(
OCL_TEST_SIZES,
testing::Values(
make_tuple(ConversionTypes(COLOR_RGB2GRAY), 3, 1),
make_tuple(ConversionTypes(COLOR_RGB2BGR), 3, 3),
make_tuple(ConversionTypes(COLOR_RGB2YUV), 3, 3),
make_tuple(ConversionTypes(COLOR_YUV2RGB), 3, 3),
make_tuple(ConversionTypes(COLOR_RGB2YCrCb), 3, 3),
make_tuple(ConversionTypes(COLOR_YCrCb2RGB), 3, 3),
make_tuple(ConversionTypes(COLOR_RGB2XYZ), 3, 3),
make_tuple(ConversionTypes(COLOR_XYZ2RGB), 3, 3),
make_tuple(ConversionTypes(COLOR_RGB2HSV), 3, 3),
make_tuple(ConversionTypes(COLOR_HSV2RGB), 3, 3),
make_tuple(ConversionTypes(COLOR_RGB2HLS), 3, 3),
make_tuple(ConversionTypes(COLOR_HLS2RGB), 3, 3),
make_tuple(ConversionTypes(COLOR_BGR5652BGR), 2, 3),
make_tuple(ConversionTypes(COLOR_BGR2BGR565), 3, 2),
make_tuple(ConversionTypes(COLOR_RGBA2mRGBA), 4, 4),
make_tuple(ConversionTypes(COLOR_mRGBA2RGBA), 4, 4),
make_tuple(ConversionTypes(COLOR_RGB2Lab), 3, 3),
make_tuple(ConversionTypes(COLOR_Lab2BGR), 3, 4),
make_tuple(ConversionTypes(COLOR_RGB2Luv), 3, 3),
make_tuple(ConversionTypes(COLOR_Luv2LBGR), 3, 4),
make_tuple(ConversionTypes(COLOR_YUV2RGB_NV12), 1, 3),
make_tuple(ConversionTypes(COLOR_YUV2RGB_IYUV), 1, 3),
make_tuple(ConversionTypes(COLOR_YUV2GRAY_420), 1, 1),
make_tuple(ConversionTypes(COLOR_RGB2YUV_IYUV), 3, 1),
make_tuple(ConversionTypes(COLOR_YUV2RGB_YUY2), 2, 3),
make_tuple(ConversionTypes(COLOR_YUV2GRAY_YUY2), 2, 1)
)))
{...}After: OCL_PERF_TEST_P(CvtColorFixture, CvtColor, testing::Combine(
OCL_TEST_SIZES,
testing::Values(
make_tuple(ConversionTypes(COLOR_RGB2GRAY), 3, 0),
make_tuple(ConversionTypes(COLOR_RGB2BGR), 3, 0),
make_tuple(ConversionTypes(COLOR_RGB2YUV), 3, 0),
make_tuple(ConversionTypes(COLOR_YUV2RGB), 3, 0),
make_tuple(ConversionTypes(COLOR_RGB2YCrCb), 3, 0),
make_tuple(ConversionTypes(COLOR_YCrCb2RGB), 3, 0),
make_tuple(ConversionTypes(COLOR_RGB2XYZ), 3, 0),
make_tuple(ConversionTypes(COLOR_XYZ2RGB), 3, 0),
make_tuple(ConversionTypes(COLOR_RGB2HSV), 3, 0),
make_tuple(ConversionTypes(COLOR_HSV2RGB), 3, 0),
make_tuple(ConversionTypes(COLOR_RGB2HLS), 3, 0),
make_tuple(ConversionTypes(COLOR_HLS2RGB), 3, 0),
make_tuple(ConversionTypes(COLOR_BGR5652BGR), 2, 0),
make_tuple(ConversionTypes(COLOR_BGR2BGR565), 3, 0),
make_tuple(ConversionTypes(COLOR_RGBA2mRGBA), 4, 0),
make_tuple(ConversionTypes(COLOR_mRGBA2RGBA), 4, 0),
make_tuple(ConversionTypes(COLOR_RGB2Lab), 3, 0),
make_tuple(ConversionTypes(COLOR_Lab2BGR), 3, 0),
make_tuple(ConversionTypes(COLOR_RGB2Luv), 3, 0),
make_tuple(ConversionTypes(COLOR_Luv2LBGR), 3, 0),
make_tuple(ConversionTypes(COLOR_YUV2RGB_NV12), 1, 0),
make_tuple(ConversionTypes(COLOR_YUV2RGB_IYUV), 1, 0),
make_tuple(ConversionTypes(COLOR_YUV2GRAY_420), 1, 0),
make_tuple(ConversionTypes(COLOR_RGB2YUV_IYUV), 3, 0),
make_tuple(ConversionTypes(COLOR_YUV2RGB_YUY2), 2, 0),
make_tuple(ConversionTypes(COLOR_YUV2GRAY_YUY2), 2, 0)
)))
{...}Or are explicit values important to the test and should be kept, and tests with zero |
|
I propose to add new set of perf tests with |
7fb0e58 to
1339c7f
Compare

Define channels number for Lab, Luv, YCrCb and XYZ conversions. Resolves performance issue #20465
Fixes #20465
Pull Request Readiness Checklist
See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request
Patch to opencv_extra has the same branch name.