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

Обработка сигналов и изображений\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)
    

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


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

    Система Orphus

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