Шаг 1: Деформация изображений с помощью конформных преобразований

В этом демонстрационном примере деформации изображений в качестве инверсных преобразований используются преобразования типа (z+1/z)/2.

Двумерные пространственные преобразования f являются конформными, если (x, y)=f(u, v) есть заданными с помощью аналитической функции F и x+i*y=F(u+i*v).

Подобные преобразования называются конформными отображениями. Конформные отображения имеют много свойств и применений; одно из важных свойств преобразований изображений состоит в сохранении локальных образов.

Аналитическая функция G, где G(z)=(z+1/z)/2, определяет конформные отображения, которые характеризуются достаточно сильными нелинейными преобразованиями. На основе этих преобразований линии, в зависимости от своего месторасположения, преобразуются в части окружностей (или в части окружностей цилиндров в случае трехмерных преобразований) или в прямые линии. (См. pp. 340-341 in Strang, Gilbert, Introduction to Applied Mathematics, Wellesley-Cambridge Press, Wellesley, MA, 1986.)

В этом демонстрационном примере покажем применение функции G для определения инверсных преобразований с целью искажения прямоугольного изображения. Результат четко демонстрирует суть преобразований, а также понимание особенностей конформных отображений.

Инверсные преобразования g можно определить как (u, v)=g(x, y) или представить в виде w=G(z), где w =u+i*v и z=x+i*y.

Считываем исходное изображение, которое разбито на 300x500 подизображений и отобразим их.

A=imread('peppers.png');A=A(31:330, 1:500, :);figure, imshow(A);title('Original Image');

Используем функцию maketform для создания структуры TFORM с возможностью применения в качестве INVERSE_FCN аргумента следующих функций:

Инверсная функция: ipex004.m
function U=ipex004( X, t ) Z=complex(X(:, 1), X(:, 2)); R=abs(Z); W=(Z+1./Z)/2; U(:, 2)=imag(W); U(:, 1)=real(W);
conformal=maketform('custom', 2, 2, [], @ipex004, []); Определим границы отображения исходного и преобразованного изображений. Отметим, что параметры uData и vData сохраняют свою пропорциональность согласно исходному изображению (5/3). uData=[ -1.25 1.25]; % Граница для REAL(w)vData=[ 0.75 -0.75]; % Граница для IMAG(w)xData=[ -2.4 2.4 ]; % Граница для REAL(z)yData=[ 2.0 -2.0 ]; % Граница для IMAG(z) В функцию imtransform необходимо включать параметр SIZE c соотношением сторон, пропорциональных xData и yData (6/5), а также опцию просмотра результата. B=imtransform( A, conformal, 'cubic', ... 'UData', uData,'VData', vData,... 'XData', xData,'YData', yData,... 'Size', [300 360], 'FillValues', 255);figure, imshow(B);title('Transformed Image');

Сравним исходное и преобразованное изображение. Отметим, что в результате преобразований границы объектов изображений определенным образом искажаются. Также следует отметить такую особенность, что некоторые объекты исходного изображения на трансформированном изображении могут появляться дважды. Еще одной особенностью преобразований такого типа является то, что в центре преобразованного изображения образуется отверстие, состоящие из четырех полуокружностей.

Фактически большинство точек исходных данных отображается после проведенных преобразований двумя точками - одна на внутренней части и одна на внешней. Внутренняя часть является значительно меньше соответствующей ей внешней части.