Выполнение перевода, вращения и масштабирования изображения с небольшими шагами и точностью до субпикселя в C ++ с openCV

Я пытаюсь сделать перевод, вращение и масштабирование с точностью до субпикселя в openCV.

Это ссылка для выполнения перевода с субпиксельной pecision:

Перевести изображение с помощью OpenCV в C ++

Итак, мне нужно сделать то же самое для масштабирования и поворота, например, когда я поворачиваю изображение на 2 градуса, оно работает, но когда я поворачиваю его на 1 или ниже 1 градуса, оно не работает, а результат поворота на 2 градуса так же, как вращение на 2,1 градуса!

В предоставленной ссылке упоминается, что я мог бы повысить точность, изменив следующий код внутри imgproc.hpp

enum InterpolationMasks {
INTER_BITS      = 5,
INTER_BITS2     = INTER_BITS * 2,
INTER_TAB_SIZE  = 1 << INTER_BITS,
INTER_TAB_SIZE2 = INTER_TAB_SIZE * INTER_TAB_SIZE
};

Вот пример для вращения:
Исходное изображение выглядит следующим образом:

0  0   0  0
0 255 255 0
0 255 255 0
0  0   0  0

Я делаю вращение относительно центра изображения.

Для поворота на 1 градус результат совпадает с исходным изображением!

И для вращения на 2 градуса результат такой же, как и на 2,1 градуса (чего не должно быть)!

Вот код:

Mat rotateImage(Mat sourceImage, double rotationDegree){

Mat rotationMatrix, rotatedImage;
double rowOfImgCenter, colOfImgCenter;
rowOfImgCenter = scaledImage.rows / 2.0 - 0.5;
colOfImgCenter = scaledImage.cols / 2.0 - 0.5;
Point2d imageCenter(colOfImgCenter, rowOfImgCenter);
rotationMatrix = getRotationMatrix2D(imageCenter, rotationDegree, 1.0);
warpAffine(scaledImage, rotatedImage, rotationMatrix, scaledImage.size(), INTER_AREA);

return rotatedImage;
}

Когда я проверяю предоставленный код перевода, он работает с точностью 1e-7, но когда я делаю перевод в столбце к 1e-8, он дает мне исходное изображение вместо его перевода (что не правильно), когда я делаю код в Matlab дает мне следующий результат, который является правильным (я хочу получить тот же результат с хорошей точностью в C ++):

0          0                       0                 0
0   2.5499999745e+02              255       2.549999976508843e-06
0   2.5499999745e+02              255       2.549999976508843e-06
0          0                       0                 0

Также для поворота, когда я поворачиваю изображение на 1 градус, результат должен выглядеть примерно так (это то, что я получил в matlab и хочу того же результата в c ++)
(Мне пришлось убрать некоторые числа (снизить точность), чтобы матрица могла здесь поместиться)

0                   0               1.1557313           0
1.1557313    2.5497614e+02          2.549761e+02        0
0            2.5497614e+02          2.549761e+02     1.1557313
0            1.1557313                  0               0

Теперь мой вопрос заключается в том, как я могу увеличить субпиксельную точность в openCV?
или же
Существуют ли идеи или коды для масштабирования и поворота изображения с точностью до субпикселя (например, код, предоставленный для перевода изображения в указанной ссылке)?

Буду признателен за любые идеи.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]