II Всероссийская конференция пользователей MATLAB, 25-26 мая 2004 года >>
На первую страницу
Рубрика Matlab&Toolboxes
Российские MATLAB-разработки
Вход
Раздел "Обработка сигналов и изображений\Image Processing Toolbox"

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

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

Пространственные преобразования изображений

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

Ключевые понятия Пространственные преобразования, координатная система, линейные конформные отображения, аффинные преобразования, проекции, полиномы, кусочно-линейный, бочкообразные искажения
Ключевые функции checkerboard, maketform, imtransform, makeresampler, tformarray

Приведем демонстрационные примеры, которые будут включать:

  • Изображение 1: Создание шахматной доски.
  • Изображение 2: Применение линейных конформных преобразований.
  • Изображение 3: Применение аффинных преобразований.
  • Изображение 4: Применение проекционных преобразований.
  • Изображение 5: Применение полиномиальных преобразований.
  • Изображение 6: Применение кусочно-линейных преобразований.
  • Изображение 7: Применение синусоидальных преобразований.
  • Изображение 8: Применение бочкообразных преобразований.
  • Изображение 9: Применение инверсных бочкообразных преобразований.
  • Изображение 1: Создание шахматной доски.

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

    Геометрические преобразования заключаются в преобразовании из одной системы координат в другую. В этом примере изображение представляет собой сетку в виде шахматной доски, представленную в некоторой исходной координатной системе. Каждое преобразование проводится в различных координатных системах. При вычислении геометрических преобразований исходное изображение находится в координатах (x, y), а преобразованное изображение - в координатах (u, v).

    В дальнейшем изображение шахматной доски I будет использовано в качестве исходного при демонстрации различных примеров.

    I=checkerboard(10, 2);
    figure
    subplot(331)
    imshow(I)
    title('original')

    Изображение 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 отличны от нуля, то это не влияет на результирующее изображение. Чтобы увидеть координаты, которые соответствуют нашим преобразованиям, включая сдвиг, нужно провести следующие вычисления:

    [I_linearconformal, xdata, ydata]=imtransform(I, t_lc, 'FillValues', .3);
    figure, imshow(xdata, ydata, I_linearconformal), axis on

    Отметим, что параметры xdata и ydata соответствуют сдвигу. Для описания той части изображения, которую нужно рассмотреть (проанализировать), в функции imtransform используются параметры 'XData' и 'YData'.

    Изображение 3: Применение аффинных преобразований.

    При аффинных преобразованиях размерности x и y можно масштабировать или вырезать при сдвиге. Параллельные линии остаются параллельными, прямые линии остаются прямыми. Линейные конформные преобразования являются подмножеством аффинных преобразований.

    Выражение для аффинных преобразований аналогично выражению для линейных конформных преобразований: [u v]=[ x y 1] T. Параметр T представляет собой матрицу 3x2 с шестью различными элементами.

    T=[1 0.1;
        1 1;
       0 0];
    t_aff=maketform('affine', T);
    I_affine=imtransform(I, t_aff, 'FillValues', .3);
    subplot(333)
    imshow(I_affine)
    title('affine')

    Изображение 4: Применение проекционных преобразований.

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

    Для проекционных преобразований: [up vp wp]=[x y w] T, где

    u = up / wp
    v = vp / wp.

    Параметр T представляет собой матрицу с размерностью 3x3 с девятью различными элементами.

    T = [A D G
            B E H
            C F I]

    Что касается матричных преобразований, то эквивалентными являются два выражения:

    u = (Ax + By + C) / (Gx + Hy + 1)
    v = (Dx + Ey + F) / (Gx + Hy + 1)
    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: Применение полиномиальных преобразований.

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

    Для полиномиальных преобразований второго порядка:

    [u v] = [1 x y x*y x^2 y^2] T

    Оба параметра 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 
Наши баннеры