MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Обработка сигналов и изображений\image Processing Toolbox

И.М.Журавель "Краткий курс теории обработки изображений"

В оглавление \ К следующему разделу \ К предыдущему разделу

Создание обивочных материалов с использованием изображений

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

Ключевые слова

Вырезание изображения, аффинные преобразования, преобразования векторов

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

maketform, makeresampler, imtransform, tformfwd

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

  • Шаг 1: Первичное преобразование изображений.
  • Шаг 2: Исследование преобразований.
  • Шаг 3: Сравнительный анализ различных методов.
  • Шаг 4: Реализация методов с параметрами 'circular' и 'symmetric'.

Шаг 1: Первичное преобразование изображений.

В двумерном случае, при создании обивочных материалов на основе изображений, преобразования заключаются в трансформации исходной пары координат [u v] в пару результирующих координат [x y]. Это можно представить в таком виде

x=u+a*v
y=v

(1)

где является константой.

В отдельных случаях применяют аффинные преобразования, которые можно записать так как

[ x y 1 ]=[ u v 1 ]*[ 1 0 0
                              a 1 0        
                              0 0 1]
(2)

Значения x и y определяются из выражения 1.

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

a=0.45;
T=maketform('affine', [1 0 0; a 1 0; 0 0 1] );

Теперь необходимо выбрать, считать и просмотреть изображение, 
которое будет использоваться при преобразованиях.

A=imread('football.jpg');
h1=figure; imshow(A); title('Исходное изображение');

Выберем фон, на котором будет размещено это изображение, например, оранжевый.

orange=[255 127 0]';

Считаем и используем параметр T для преобразования данных в A. Эти преобразования можно представить следующим образом:

B=imtransform(A, T, 'cubic', 'FillValues', orange);

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

R=makeresampler({'cubic', 'nearest'}, 'fill');
B=imtransform(A, T, R, 'FillValues', orange);
h2=figure; imshow(B);

Шаг 2: Исследование преобразований.

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

Скрипт ipex001 формирует сетку из линий, наложенную на исходное изображение и отображает на нем. Этот программный продукт содержится в /toolbox/images/imdemos/ipex001.m.

ipex001

Скрипт ipex002 реализует ту же процедуру, только с использованием окружностей. Этот программный продукт содержится в /toolbox/images/imdemos/ipex002.m.

ipex002

Шаг 3: Сравнительный анализ различных методов.

При реализации технологии вырезания изображений, функция imtransform заполняет оранжевыми треугольниками места, где нет данных. Известно пять модификаций рассматриваемого метода. При этом используется пять различных параметров ('fill', 'replicate', 'bound', 'circular' и 'symmetric'). Проведем сравнительный анализ первых трех параметров.

Первая опция 'fill' вместе с опциями 'XData' и 'YData' используется в функции imtransform для принудительной установки фона вокруг изображения.

Bf=imtransform(A, T, makeresampler({'cubic', 'nearest'},...
                 'fill'), 'XData', [-49 500], 'YData', ...
                 [-49 400], 'FillValues', orange);
figure, imshow(Bf);
title('Pad Method=''fill''');

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

Br=imtransform(A, T, makeresampler({'cubic', 'nearest'}, ...
                 'replicate'), 'XData', [-49 500], 'YData', ...
                 [-49 400]);
figure, imshow(Br);
title('Pad Method=''replicate''');

Теперь рассмотрим применение третьей опции 'bound'.

 Bb=imtransform(A, T, makeresampler({'cubic', 'nearest'}, ...
                 'bound'), 'XData', [-49 500], 'YData', ...
                 [-49 400], 'FillValues', orange);
figure, imshow(Bb);
title('Pad Method=''bound''');

Результаты обработки исходного изображения с помощью исследуемого метода при установке опций 'fill' и 'bound' являются очень похожими. Разница состоит в том, что при использовании опции 'bound' при обработке используется кубическая интерполяция и результирующее изображение получается немного размытым. Рассмотрим этот момент более детально и проанализируем результаты обработки с использованием двух опций ('fill' и 'bound') на элементном уровне.

Cf=imtransform(A, T, makeresampler({'cubic', 'nearest'}, ...
                 'fill'), 'XData', [423 439], 'YData', ...
                 [245 260], 'FillValues', orange);
Cb=imtransform(A, T, makeresampler({'cubic', 'nearest'}, ...
                 'bound'), 'XData', [423 439], 'YData', ...
                 [245 260], 'FillValues', orange);
Cf=imresize(Cf, 12, 'nearest');
Cb=imresize(Cb, 12, 'nearest');
figure;
subplot(1, 2, 1); imshow(Cf); title('Pad Method=''fill''');
subplot(1, 2, 2); imshow(Cb); title('Pad Method=''bound''');
 

Шаг 4: Реализация методов с параметрами 'circular' и 'symmetric'.

Оставшиеся две опции определяют два подхода. Один из них использует опцию 'circular' и состоит в повторяемости исходного изображения вдоль каждой размерности, второй - использует опцию 'symmetric' и состоит в повторяемости зеркальных отражений исходного изображения. Продемонстрируем это на конкретных примерах.

Thalf=maketform('affine', [1 0; a 1; 0 0]/2);
Bc=imtransform(A, Thalf,makeresampler({'cubic', 'nearest'}, ...
                 'circular'), 'XData', [-49 500], 'YData', ...
                 [-49 400], 'FillValues', orange);
figure, imshow(Bc);
title('Pad Method=''circular''');

Bs=imtransform(A, Thalf, makeresampler({'cubic', 'nearest'}, ...
                 'symmetric'), 'XData', [-49 500], 'YData', ...
                 [-49 400], 'FillValues', orange);
figure, imshow(Bs);
title('Pad Method=''symmetric''');

В оглавление \ К следующему разделу \ К предыдущему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика