|
|
|||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||
| Вход | |||||||||||||||||||||||||||||||||
|
Раздел "Обработка сигналов и изображений\Image Processing Toolbox"
И.М.Журавель "Краткий курс теории обработки изображений" В оглавление \ К следующему разделу \ К предыдущему разделу Пространственные преобразования изображений Большинство свойств пространственных преобразований наиболее наглядно демонстрируются на примере изображения шахматной доски.
Приведем демонстрационные примеры, которые будут включать:
Изображение 1: Создание шахматной доски.
Изображение 2: Применение линейных конформных преобразований.
Для линейных конформных преобразований: [u v]=[ x y 1] T.
Параметр T представляет собой матрицу с размерностью 3x2, которая зависит от четырех параметров.
% Четыре параметра.
scale=1.2; % коэффициент масштабирования
angle=40*pi/180; % угол поворота
tx=0; % сдвиг по x
ty=0; % сдвиг по y
sc=scale*cos(angle);
ss=scale*sin(angle);
T=[ sc -ss;
ss sc;
tx ty];
Далее линейные конформные преобразования используются как подмножество аффинных преобразований.
После этого создается структура TFORM:
t_lc=maketform('affine', T);
I_linearconformal=imtransform(I, t_lc, 'FillValues', .3);
subplot(332)
imshow(I_linearconformal);
title('linear conformal')
Что касается сдвига, то когда изменения в одном из направлений tx или ty отличны от нуля, то это не влияет на результирующее изображение. Чтобы увидеть координаты, которые соответствуют нашим преобразованиям, включая сдвиг, нужно провести следующие вычисления:
Изображение 4: Применение проекционных преобразований.
Параметр T представляет собой матрицу с размерностью 3x3 с девятью различными элементами.
Что касается матричных преобразований, то эквивалентными являются два выражения:
T=[1 0 0.008;
1 1 0.01;
0 0 1];
t_proj=maketform('projective', T);
I_projective=imtransform(I, t_proj, 'FillValues', .3);
subplot(334)
imshow(I_projective)
title('projective')
Изображение 5: Применение полиномиальных преобразований.
Оба параметра u и v являются полиномами второго порядка относительно x и y. Каждый полином второго порядка характеризуется, в свою очередь, шестью параметрами. При определении всех коэффициентов размерность T составляет 6x2.
xybase=reshape(randn(12, 1), 6, 2);
t_poly=cp2tform(xybase, xybase, 'polynomial', 2);
% Двенадцать элементов T.
T= [0 0;
1 0;
0 1;
0.001 0;
0.02 0;
0.01 0];
t_poly.tdata=T;
I_polynomial=imtransform(I, t_poly, 'FillValues', .3);
subplot(335)
imshow(I_polynomial)
title('polynomial')
Изображение 6: Применение кусочно-линейных преобразований.
imid=round(size(I, 2)/2);
I_left=I(:, 1:imid);
stretch=1.5; % Коэффициент растяжения
size_right=[size(I, 1) round(stretch*imid)];
I_right=I(:, imid+1:end);
I_right_stretched=imresize(I_right, size_right);
I_piecewiselinear=[I_left I_right_stretched];
subplot(336)
imshow(I_piecewiselinear)
title('piecewise linear')
Последние три примера показывают методы восстановления изображений с нерегулярными искажениями.
Изображение 7: Применение синусоидальных преобразований.
[nrows, ncols]=size(I);
[xi, yi]=meshgrid(1:ncols, 1:nrows);
a1=5; % амплитуда синусоиды.
a2=3;
u=xi+a1*sin(pi*xi/imid);
v=yi-a2*sin(pi*yi/imid);
tmap_B=cat(3, u, v);
resamp=makeresampler('linear', 'fill');
I_sinusoid=tformarray(I, [], resamp, [2 1], [1 2], [], tmap_B, .3);
subplot(337)
imshow(I_sinusoid)
title('sinusoid')
Изображение 8: Применение бочкообразных преобразований.
% Радиальные бочкообразные искажения
xt=xi(:)-imid;
yt=yi(:)-imid;
[theta, r]=cart2pol(xt, yt);
a=.001; % Амплитуда кубического выражения.
s=r+a*r.^3;
[ut, vt]=pol2cart(theta, s);
u=reshape(ut, size(xi))+imid;
v=reshape(vt, size(yi))+imid;
tmap_B=cat(3, u, v);
I_barrel=tformarray(I, [], resamp, [2 1], [1 2], [], tmap_B, .3);
subplot(338)
imshow(I_barrel)
title('barrel')
Изображение 9: Применение инверсных бочкообразных преобразований.
% Радиальные инверсные бочкообразные искажения
xt=xi(:)-imid;
yt=yi(:)-imid;
[theta,r]=cart2pol(xt, yt);
a=-0005; % Амплитуда при кубических преобразованиях.
s=r+a*r.^3;
[ut, vt]=pol2cart(theta, s);
u=reshape(ut, size(xi))+imid;
v=reshape(vt, size(yi))+imid;
tmap_B=cat(3, u, v);
I_pin=tformarray(I, [], resamp, [2 1], [1 2], [], tmap_B, .3);
subplot(339)
imshow(I_pin)
title('pin cushion')
|
|
Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)
|
||
| На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro | ||
| E-mail: | ||
| Информация на сайте была обновлена 11.05.2004 |
Copyright 2001-2004 SoftLine Co Наши баннеры |
|