Wdrożyłem mieszanie obrazu za pomocą piramidów. Działa dobrze, jeśli zmienić rozmiar pierwszego obrazu, ale nie dostaję tego, co chcę, jeśli go zmieniam. Więc to, czego potrzebuję, aby zmieszać się bez zmiany rozmiaru, aby uzyskać odpowiedni wynik. Mój kod to:

clc; close all; clear all

eyeImg = im2double(imread('eye.jpg'));
figure; imshow(eyeImg); title('Image 1');

handImg = im2double(imread('hand.jpg'));
figure; imshow(handImg); title('Image 2');

mask1 = im2double(imread('maskOrgan.jpg'));

eyeImage = imresize(eyeImg,[size(handImg,1) size(handImg,2)]);


figure; imshow(eyeImage); title('Image 1');
figure; imshow(handImg); title('Image 2');


figure; imshow(mask1); title('Mask 1');
mask2 = 1-mask1; %complement of the mask
figure; imshow(mask2); title('Mask 2');

level = 5;
lpA = genPyr(eyeImage,'laplace',level); % the Laplacian pyramid
lpB = genPyr(handImg,'laplace',level); % the Laplacian pyramid

gpM1 = genPyr(mask1, 'gauss', level);
gpM2 = genPyr(mask2, 'gauss', level);

limgo = cell(1,level); % the blended pyramid

for p = 1:level
    [Mp, Np, ~] = size(lpA{p});
    maskap = imresize(mask1,[Mp Np]);
    maskbp = imresize(mask2,[Mp Np]);
    limgo{p} = lpA{p}.*maskap + lpB{p}.*maskbp;
end
imgo = pyrReconstruct(limgo);
figure,imshow(imgo) % blend by pyramid

Używam tych zdjęć wejściowych: https://imgur.com/a/j1hkzxg

Należy pamiętać, że jeśli nie zmieniam rozmiaru, otrzymuję następujący błąd.

Array dimensions must match for binary array op.

Error in main (line 35)
    limgo{p} = lpA{p}.*maskap + lpB{p}.*maskbp;
0
Terminou 24 grudzień 2019, 00:07

1 odpowiedź

Najlepsza odpowiedź

Jeśli chcesz bez zmian do rozmiaru, musisz to zrobić "wyściółki", tj. Zwiększ rozmiar najmniejszego obrazu do wielkości największych ... trzymając w ten sposób oryginalną skalę obu obrazów. Utwórz większy obraz z zerami i skopiuj najmniejszy obraz do niego.

1
bhamadicharef 23 grudzień 2019, 22:02