2015-01-15 2 views
0

У меня есть два изображения: ручная сегментация (красная линия) и автоматическая сегментация (синяя линия).Как обрезать и масштабировать изображение по отношению к другому?

То, что я хочу сделать, это

  1. Перекрытие их так, что точки в первом соответствуют точкам во втором.
  2. Обрезать изображение (автоматическая сегментация), чтобы точки имели одинаковые размеры и одинаковый масштаб, чтобы я мог проверить сегментацию, сравнив два контура.

В то время как я пытался подобное решение от MathWorks, registering-an-image-using-normalized-cross-correlation, используя код, приведенный ниже, но я получил сообщение об ошибке.

Что я делаю неправильно? Почему xbegin и offset отрицательный?

% Algorithm for image validation 
    % Open the two images which will be compared 
    name2=input('Image name (automated segmentation)  ','s'); 
    img_automated=imread(name2,'png'); 
    figure (1), imshow(img_automated), title('Image automated') 
    name=input('Image name (manual segmentation)  ','s'); 
    img_manual=imread(name,'png'); 
    img_manual_gray=rgb2gray(img_manual); 
    figure (2), imshow (img_manual),title('Image manual') 
    img_automated_gray=rgb2gray(img_automated); 
    %img_double=im2double(img_automated_gray); 
    figure (3), imshow (img_automated_gray), title (' Image converted to double '); 
    imcontrast 
    %uiwait(img_automated_gray) 
    img_automated_eq=adapthisteq(img_automated_gray); 
    figure (5), imshow (img_automated_eq), title (' Image after histogram equalization '); 
    img_automated_gray=rgb2gray(img_automated); 
    figure (6), imshowpair(img_manual,img_automated_eq) 
    title('Images overlap') 

    %Step 2: Choose Subregions of Each Image 
    %It is important to choose regions that are similar.The image sub_automated 
    %will be the template, and must be smaller than the image sub_manual. 
    % interactively 

    [sub_manual,rect_manual] = imcrop(img_manual); % choose the pepper below the onion 
    [sub_automated,rect_automated] = imcrop(img_automated_gray); % choose the whole onion 
    % display sub images 
    figure(8), imshow(sub_automated) 
    figure(9), imshow(sub_automated) 

    %Step 3: Do Normalized Cross-Correlation and Find Coordinates of Peak 
    %Calculate the normalized cross-correlation and display it as a surface plot. 
    % The peak of the cross-correlation matrix occurs where the sub_images are 
    % best correlated. normxcorr2 only works on grayscale images, so we pass it 
    % the red plane of each sub image. 

    c = normxcorr2(sub_automated(:,:,1),sub_manual(:,:,1)); 
    figure (10), surf(c), shading flat 

    %Step 4: Find the Total Offset Between the Images 
    %The total offset or translation between images depends on the location 
    %of the peak in the cross-correlation matrix, and on the size and position 
    %of the sub images. 
    % offset found by correlation 

    [max_c, imax] = max(abs(c(:))); 
    [ypeak, xpeak] = ind2sub(size(c),imax(1)); 
    corr_offset = [(xpeak-size(sub_automated,2)) 
        (ypeak-size(sub_automated,1))]; 
    % relative offset of position of subimages 
    rect_offset = [(rect_manual(1)-rect_automated(1)) 
        (rect_manual(2)-rect_automated(2))]; 
    % total offset 
    offset = corr_offset + rect_offset; 
    xoffset = offset(1); 
    yoffset = offset(2); 

    %Step 5: See if the Onion Image was Extracted from the Peppers Image 
    %Figure out where onion falls inside of peppers. 

    xbegin = round(xoffset+1); 
    xend = round(xoffset+ size(img_automated_gray,2)); 
    ybegin = round(yoffset+1); 
    yend = round(yoffset+size(img_automated_gray,1)); 
    % extract region from peppers and compare to onion 
    extracted_automated =img_manual(ybegin:yend,xbegin:xend,:); 
    if isequal(img_automated_gray,extracted_automated) 
     disp('extracted_automated.png was extracted from img_automated.png') 
    end 

    %Step 6: Pad the Onion Image to the Size of the Peppers Image 
    %Pad the automated image to overlay on manual, using the offset determined above. 

    recovered_automated = uint8(zeros(size(img_manual))); 
    recovered_onion(ybegin:yend,xbegin:xend,:) = img_automated_gray; 
    figure(11), imshow(recovered_automated) 
    figure (12), imshowpair(img_manual(:,:,1),recovered_automated,'blend') 
+1

Примеры изображений помогут (если у вас недостаточно рекламы, загрузите их на сторонний сайт, и кто-то отредактирует их для вас). Также объяснение того, что вы подразумеваете под «не соответствует», и которое/сколько контрольных точек, которые вы собираете, поможет. – nkjt

+0

Хорошо, мои изображения не имеют искажений. Они находятся в разных масштабах, а один более обрезанный, чем другие. Есть ссылки на изображения: https://www.dropbox.com/s/c5lfr0n8z881jk6/Bif11_automated.png?dl=0 https://www.dropbox.com/s/e7emf9alo7un98v/Bif11_manual.png?dl=0 Сколько очков, по вашему мнению, я должен выбрать? –

+0

Я уже установил ссылку на изображения. Эти изображения не имеют искажений, они находятся в разных масштабах. Я просто один, чтобы преобразовать их в один и тот же масштаб, чтобы сравнить два счета в одной и той же системе координат. Я пробовал все примеры для регистрации изображений в Matlab, но без успеха, у Doe sanyone есть один sugestion? –

ответ

1

Этот ответ не может быть полным, но с количеством информации, которую вы уже включены, у меня есть это поделиться:

  1. Было бы интересно узнать, какие искажения двойки изображения, которые вы пытаетесь зарегистрировать. Я вижу, что вы использовали «подобие» как transformation type. Существуют и другие типы трансформаций, которые могут быть более подходящими для ваших изображений, и получение этого неправильного результата не даст вам хорошего результата, несмотря на то, что вы выбрали достаточно и точно расположены контрольные точки.
  2. В MATLAB documentation перечислены другие способы регистрации двух изображений и в зависимости от типа функций в ваших изображениях, один из других вариантов: а именно: интенсивность (с использованием имрегистрации) или функция (с использованием набора функций с компьютера Vision System Toolbox) может быть более точным.
  3. Чтобы обрезать изображения одинакового размера, вы можете отображать их с помощью imshowpair, как вы уже есть, а затем использовать imcrop для размера, который вы планируете использовать. imshowpair отображает все пиксели зарегистрированной пары, так что ваш конечный результат всегда является подкомпонентом отображаемого.
+0

Хорошо, мои изображения не имеют искажений. Они находятся в разных масштабах, а один более обрезанный, чем другие. Есть ссылки на изображения: https://www.dropbox.com/s/c5lfr0n8z881jk6/Bif11_automated.png?dl=0 https://www.dropbox.com/s/e7emf9alo7un98v/Bif11_manual.png?dl=0 Сколько очков, по вашему мнению, я должен выбрать? –

Смежные вопросы