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

  • Регистрация аэрофотографий на ортофотоснимках

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

    Ключевые понятия Регистрация изображений, контрольные точки, геометрические преобразования, ортофотоснимки
    Ключевые функции cpselect, cp2tform, imtransform

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

  • Шаг 1: Считывание изображения.
  • Шаг 2: Выбор контрольных точек.
  • Шаг 3: Выбор геометрических преобразований.
  • Шаг 4: Преобразование незарегистрированных изображений.
  • Шаг 5: Просмотр зарегистрированных изображений.

    Шаг 1: Считывание изображения.

    Изображение westconcordorthophoto.png представляет собой ортофотоснимок, на котором изображена некоторая часть поверхности земли. Изображение westconcordaerial.png являет собой незарегистрированное аэроизображение и содержит некоторые искажение относительно ортофотоснимка.

    unregistered=imread(‘westconcordaerial.png’);
    figure, imshow(unregistered)
    figure, imshow(‘westconcordorthophoto.png’)


    Шаг 2: Выбор контрольных точек.

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

    load westconcordpoints
    cpselect(unregistered(:, :, 1),’westconcordorthophoto.png’,…
        input_points,base_points)

    С помощью специального пакета существует возможность выбора соответствующих контрольных точек. Контрольные точки используются в качестве маркеров для совмещения (привязки) двух изображений. Четырех пар контрольных точек уже достаточно для поиска (привязки). На основании этих точек делается заключение о том, какие геометрические преобразования нужно проделать в дальнейшем.

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

    Для запоминания контрольных точек необходимо в меню File выбрать опцию Save Points to Workspace. После запоминания точек следует перезаписать переменные input_points и base_points.

    Шаг 3: Выбор геометрических преобразований.

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

    t_concord=cp2tform(input_points, base_points, ‘projective’);

    Шаг 4: Преобразование незарегистрированных изображений.

    Совмещая изображения с помощью выбранных контрольных точек существует возможность выявления геометрических искажений. А применение функции imtransform приводит к устранению этих искажений. Следует отметить, что выбор значений ‘XData’ и ‘YData’ обеспечивает еще более точное совмещение (калибровку) с ортофотоснимком.

    Info=imfinfo(‘westconcordorthophoto.png’);
    registered=imtransform(unregistered, t_concord, …
        ‘XData’, [1 info.Width], ‘YData’, [1 info.Height]);

    Шаг 5: Просмотр зарегистрированных изображений.

    figure, imshow(registered)

    Визуальный анализ полученных результатов свидетельствует о их приемлемости. В другом случае, для получения еще более эффективного результата, следует начать обработку с шага 2 и выбрать большее число контрольных точек.

     

     

    Наверх

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

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

    Ключевые понятия Пространственные преобразования, координатная система, линейные конформные отображения, аффинные преобразования, проекции, полиномы, кусочно-линейный, бочкообразные искажения
    Ключевые функции 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 представляет собой матрицу 3×2 с шестью различными элементами.

    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 представляет собой матрицу с размерностью 3×3 с девятью различными элементами.

    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 составляет 6×2.

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