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

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

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

Регистрация изображений с помощью нормированной кросс-корреляции

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

Ключевая концепция Нормированная кросс-корреляция, прозрачность
Ключевые функции normxcorr2, max, ind2sub
Обзор примеров
Приведенные примеры включают следующие шаги:


  • Шаг 1: Считывание изображения.
    • Шаг 2: Выбор подобласти для каждого изображения.
    • Шаг 3: Нормированная кросс-корреляция и поиск координат пиков.
    • Шаг 4: Поиск общих относительных различий между изображениями.
    • Шаг 5: Анализ подизображения, полученного из основного изображения.
    • Шаг 6: Отображение вырезанного изображения на пустом изображении с размерами исходного.
    • Шаг 7: Свойство прозрачности исходного изображения. Шаг 1: Считывание изображения. onion=imread('onion.png'); peppers=imread('peppers.png'); imshow(onion) figure, imshow(peppers)
    • Шаг 2: Выбор подобласти для каждого изображения

      Важной является процедура выбора похожей подобласти. Изображение sub_onion является тем эталоном, на основании которого производится поиск sub_peppers. Методы выбора этой подобласти делятся на итеративные и неитеративные.

      % неитеративный
      rect_onion=[111 33 65 58];
      rect_peppers=[163 47 143 151];
      sub_onion=imcrop(onion,rect_onion);
      sub_peppers=imcrop(peppers,rect_peppers);
      % или 
      % итеративный
      [sub_onion,rect_onion]=imcrop(onion);
      [sub_peppers,rect_peppers]=imcrop(peppers);
      % отображение подизображений
      figure, imshow(sub_onion)
      figure, imshow(sub_peppers)
      

      Шаг 3: Нормированная кросс-корреляция и поиск координат пиков

      Вычисление нормированной кросс-корреляции и отображение ее поверхности. Пики матрицы кросс-корреляции, которые попали на подизображение (sub_images) свидетельствуют о наивысшей корреляции. Функция normxcorr2 работает только с полутоновыми изображениями, однако попробуем применить ее для обработки подизображений.

      c=normxcorr2(sub_onion(:, :, 1), sub_peppers(:, :, 1));

      figure, surf(c), shading flat

      Шаг 4: Поиск общих относительных различий между изображениями

      Общие различия между изображениями характеризуются положением пиков в матрице кросс-корреляции, а также размерами и местонахождением подизображений.

      % поиск на основании корреляции
      [max_c, imax]=max(abs(c(:)));
      [ypeak, xpeak]=ind2sub(size(c), imax(1));
      corr_offset=[(xpeak-size(sub_onion, 2)) 
                     (ypeak-size(sub_onion, 1))];
      % относительное месторасположение подизображений
      rect_offset=[(rect_peppers(1)-rect_onion(1)) 
                     (rect_peppers(2)-rect_onion(2))];
      
      % поиск на основании общих относительных различий
      offset=corr_offset+rect_offset;
      xoffset=offset(1);
      yoffset=offset(2);
      
      Шаг 5: Анализ подизображения, полученного из основного изображения
      
      Подизображение на исходном изображении.
      xbegin=xoffset+1;
      xend=xoffset+size(onion, 2);
      ybegin=yoffset+1;
      yend=yoffset+size(onion, 1);
      
      % Получение рассматриваемого подизображения и сравнение его с исходным
      extracted_onion=peppers(ybegin:yend, xbegin:xend, :);
      if isequal(onion, extracted_onion) 
         disp('onion.png получено из peppers.png')
      end
      
      Шаг 6: Отображение подизображения на пустом изображении с размерами исходного
      
      Расположим подизображение на исходном изображении на основании анализа различий.
      recovered_onion=uint8(zeros(size(peppers)));
      recovered_onion(ybegin:yend, xbegin:xend, :)=onion;
      figure, imshow(recovered_onion)
      
      Шаг 7: Свойство прозрачности исходного изображения
      
      Создание прозрачной (или полупрозрачной) маски для непрозрачного исходного изображения.
      [m, n, p]=size(peppers);
      mask=ones(m, n); 
      i=find(recovered_onion(:, :, 1)==0);
      mask(i)=.2; % экспериментирование с различными значениями прозрачности
      % наложение полупрозрачного рисунка
      figure, imshow(peppers(:,:,1)) % отображение только красной составляющей
      hold on
      h=imshow(recovered_onion); % отображение recovered_onion
      set(h, 'AlphaData', mask)
      

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

    
            

О получении локальных копий сайтов
  Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)
На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro   
E-mail:    
  Информация на сайте была обновлена 11.05.2004 Copyright 2001-2004 SoftLine Co 
Наши баннеры