Современные технологии обработки изображений 30

Исследование конформных преобразований

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

Ключевые понятия:

Преобразование изображений, конформное отображение, вектор преобразований, контроль отображения

Ключевые функции:

maketform, imtransform, tformfwd

Обзор демонстраций.

Демонстрационные примеры включают следующие шаги:

  • Шаг 1: Деформация изображений с помощью конформных преобразований.
  • Шаг 2: Исследование отображения изображений с помощью линий сетки, окружностей и т.п.
  • Шаг 3: Достижение специальных эффектов на результирующем изображении с помощь использования метода частичных масок.
  • Шаг 4: Повторение эффекта на разных изображениях.

Шаг 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.

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

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');

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

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

Шаг 2: Исследование отображения изображений с помощью линий сетки, окружностей и т.п.

Когда преобразования задаются с помощью функции maketform, тогда для трансформации правильных геометрических объектов можно применить функцию tformfwd (особенно, для прямоугольной сетки и равномерного массива окружностей). В этом примере рассматриваются однозначные преобразования, поскольку одной исходной точке соответствуют две преобразованные. Таким образом, обработку исходных данных можно производить двумя различными функциями.

Когда принять, что w=(z+1/z)/2 или представить это в другом виде (z^2+2*w*z+1=0), тогда z=w+/sqrt(w^2-1).

Получение положительного и отрицательного квадратного корня приводит к необходимости разделения процесса преобразований. Покажем применение и управление функцией maketform в первом варианте:

Функция: Forward1.m

function X=Forward1( U, t )
W=complex(U(:, 1),U(:, 2));
Z=W+sqrt(W.^2-1);
X(:, 2)=imag(Z);
X(:, 1)=real(Z);

Возможен другой способ построения преобразований:

Функция: Forward2.m

function X=Forward1( U, t )
W=complex(U(:, 1),U(:, 2));
Z=W-sqrt(W.^2-1);
X(:, 2)=imag(Z);
X(:, 1)=real(Z);

Функция ipex005 создает типичные объекты TFORM с возможностью ее ручного управления

t1=maketform(‘custom’, 2, 2, @Forward1, [], []);

t2=maketform(‘custom’, 2, 2, @Forward2, [], []);

и использования вместе с tformfwd для преобразования объектов типа сетка из линий и массив окружностей.

Четыре изображения внизу демонстрируют работу функции ipex005. В первом случае это изображение типа сетка из линий и во втором случае — это массив окружностей:

Программный источник функции ipex005 размещается в matlabroot/toolbox/images/imdemos/ipex005.m.

ipex005(A,uData,vData,B,xData,yData)

До начала преобразований сетка из линий представляет собой квадранты, окрашенные в соответствующий цвет. Полезность такого окрашивания квадрантов особенно ценна после проведения соответствующих преобразований. С их помощью на результирующем изображении четко видно проведенные пространственные изменения. Отметим, что каждый квадрант условно подвергается двухэтапным преобразованиям — во внутренней стороне окружности и внешней стороне окружности. Разные части квадранта подвергаются различной степени искажений.

Равномерная сетка, состоящая из окружностей одинакового размера, преобразуется в окружности, которые упакованы в соответствии тангенциальной зависимостью. При таком виде преобразований положительные значения преобразований отображаются зеленым цветом, а отрицательные — синим и определяются как . Также отметим, что при преобразованиях нелинейно изменяется диаметр окружности.

Графика MATLAB позволяет удобно отображать сдвиг и масштабирование локальных объектов преобразованного изображения. Использование полупрозрачного режима отображения позволяет наглядно понять суть проводимых преобразований. Наибольшим искажениям подвергаются объекты, размещенные в центральной части изображения. Более детально это представлено на двух верхних рисунках.

Шаг 3: Достижение специальных эффектов на результирующем изображении с помощь использования метода частичных масок.

При инверсной функции преобразования структура TFORM возвращает вектор значений для получения результирующего изображения. При этом также используются функции imtransform и tformarray. Эти действия, в основном, детально описаны в начале (см. Шаг 1). Нужно только с помощью функции maketform(‘custom’…) преобразовать структуру TFORM с целью ручного управления INVERSE_FCN:

Инверсная функции: ipex006.m

function U=ipex006( X, t )
Z=complex(X(:, 1), X(:, 2));
W=(Z+1./Z)/2;
q=0.5<=abs(Z)&abs(Z)<=2;
W(~q)=complex(NaN, NaN);
U(:, 2)=imag(W);
U(:, 1)=real(W);

Программный источник функции размещается в matlabroot/toolbox/images/imdemos/ipex006.m. В принципе, функция ipex006 аналогична функции ipex004, описанной в Шаге 1, за исключением двух дополнительных линеек:

q=0.5<=abs(Z)&abs(Z)<=2;
W(~q)=complex(NaN, NaN);

Эти данные являются основными при инверсных преобразованиях. В более общем виде эти преобразования можно представить так:

ring=maketform('custom', 2, 2, [], @ipex006, []);
Bring=imtransform( A, ring, 'cubic',...
                    'UData', uData,  'VData', vData,...
                    'XData', [-2 2], 'YData', yData,...
                    'Size', [400 400], 'FillValues', 255 );
figure, imshow(Bring); title('Transformed Image With Masking');

Полученный результат, по сюжету, аналогичный исходному, за исключением нескольких объектов на внешней части окружности.

Шаг 4: Повторение эффекта на разных изображениях

Проведем так называемые преобразования по окружности, которые описаны в Шаге 3, с другими изображениями, увидим результирующий эффект и возможное практическое применение.

Для этого сначала считаем исходное изображение и отобразим его.

  C=imread('greens.jpg');
figure, imshow(C);
title('Winter Greens Image');

Далее проводятся так называемые преобразования по окружности.
D=imtransform( C, ring, 'cubic',...
                 'UData', uData, 'VData', vData,...
                 'XData', [-2 2], 'YData', [-2 2],...
                 'Size', [400 400], 'FillValues', 255 );
figure, imshow(D);
title('Transformed and Masked Winter Greens Image');