У меня есть видеопоток, поступающий с 180-градусной камеры «рыбий глаз». Я хочу выполнить некоторую обработку изображений, чтобы преобразовать изображение «рыбий глаз» в обычный вид.
После некоторых исследований и множества прочитанных статей я нашел эту статью .
Они описывают алгоритм (и некоторые формулы) для решения этой проблемы.
Я пытался реализовать этот метод в Matlab. К сожалению, это не работает, и я не смог заставить его работать. «Исправленное» изображение выглядит точно так же, как исходная фотография, и при этом не происходит никакого искажения, и во-вторых, я просто получаю верхнюю левую сторону изображения, а не полное изображение, но изменение значения «K» на 1,9 дает mw всего изображения , но это точно такое же изображение.
Исходное изображение:
![Input Image](https://i.stack.imgur.com/rlyHb.png)
Результат:
Когда значение K составляет 1,15, как указано в статье
Когда значение K составляет 1,9
Вот мой код:
image = imread('image2.png');
[Cx, Cy, channel] = size(image);
k = 1.5;
f = (Cx * Cy)/3;
opw = fix(f * tan(asin(sin(atan((Cx/2)/f)) * k)));
oph = fix(f * tan(asin(sin(atan((Cy/2)/f)) * k)));
image_new = zeros(opw, oph,channel);
for i = 1: opw
for j = 1: oph
[theta,rho] = cart2pol(i,j);
R = f * tan(asin(sin(atan(rho/f)) * k));
r = f * tan(asin(sin(atan(R/f))/k));
X = ceil(r * cos(theta));
Y = ceil(r * sin(theta));
for k = 1: 3
image_new(i,j,k) = image(X,Y,k);
end
end
end
image_new = uint8(image_new);
warning('off', 'Images:initSize:adjustingMag');
imshow(image_new);