Объединение двух изображений с соответствующими характеристиками - PullRequest
0 голосов
/ 22 мая 2019

Так что в основном я работаю над попыткой объединить два изображения, которые накладываются друг на друга. Я использовал приложение для оценки регистрации, и они соответствовали функциям. Моя программа в данный момент выбирает подходящие объекты и отображает их, а другое изображение на заднем плане. То, что я хочу сделать, это иметь возможность копировать то, что делает приложение для оценки регистрации, и комбинировать два изображения, где встречаются их функции.

Я посмотрел пример панорамы, но, похоже, по какой-то причине он не работает.

clear all;
close all;
I1 = rgb2gray(imread('q2.jpg'));
I2 = rgb2gray(imread('q20.jpg'));

points1 = detectSURFFeatures(I1);
points2 = detectSURFFeatures(I2);

[f1, vpts1] = extractFeatures(I1, points1);
[f2, vpts2] = extractFeatures(I2, points2);

indexPairs = matchFeatures(f1, f2) ;
matchedPoints1 = vpts1(indexPairs(:, 1));
matchedPoints2 = vpts2(indexPairs(:, 2));

figure; ax = axes;
showMatchedFeatures(I1,I2,matchedPoints1,matchedPoints2,'Parent',ax);
title(ax, 'Putative point matches');
legend(ax,'Matched points 1','Matched points 2');

% Create new Image ... 
% joinedImg = Combined image where matched points overlap

Так что в основном мне нужно создать новое изображение и записать его, который представляет собой объединенное изображение двух изображений. Что-то вроде панорамы, но не потому, что именно там, где точки встречаются и перекрываются

1 Ответ

0 голосов
/ 23 мая 2019

Я думаю, что вы выбрали неправильный пример из документации MATLAB.

Вы можете использовать пример оценкаGeometricTransform .

Следующий код дает вам преобразование tform:

[tform,inlierPtsDistorted,inlierPtsOriginal] = ...
    estimateGeometricTransform(matchedPtsDistorted,matchedPtsOriginal,...
    'similarity');

Код деформации: Ir = imwarp(distorted,tform,'OutputView',outputView);

Для слияния изображений вы можете использовать * 1014Функция * imfuse .

Следующий код объединяет пример estimateGeometricTransform с примером imfuse:

%https://www.mathworks.com/help/vision/ref/estimategeometrictransform.html
original  = imread('cameraman.tif');
%imshow(original);
%title('Base image');
distorted = imresize(original,0.7); 
distorted = imrotate(distorted,31);
%figure; imshow(distorted);
%title('Transformed image');
ptsOriginal  = detectSURFFeatures(original);
ptsDistorted = detectSURFFeatures(distorted);
[featuresOriginal,validPtsOriginal] = extractFeatures(original,ptsOriginal);
[featuresDistorted,validPtsDistorted] = extractFeatures(distorted,ptsDistorted);
index_pairs = matchFeatures(featuresOriginal,featuresDistorted);
matchedPtsOriginal  = validPtsOriginal(index_pairs(:,1));
matchedPtsDistorted = validPtsDistorted(index_pairs(:,2));
%figure; 
%showMatchedFeatures(original,distorted, matchedPtsOriginal,matchedPtsDistorted);7
%title('Matched SURF points,including outliers');
[tform,inlierPtsDistorted,inlierPtsOriginal] = estimateGeometricTransform(matchedPtsDistorted,matchedPtsOriginal, 'similarity');
%figure; 
%showMatchedFeatures(original,distorted, inlierPtsOriginal,inlierPtsDistorted);
%title('Matched inlier points');
outputView = imref2d(size(original));
Ir = imwarp(distorted,tform,'OutputView',outputView);
%figure; imshow(Ir); 
%title('Recovered image');

%https://www.mathworks.com/help/images/ref/imfuse.html
C = imfuse(original, Ir, 'falsecolor', 'Scaling', 'joint', 'ColorChannels', [1 2 0]);
figure; imshow(C); 
title('fuse image');

%Write result image to file.
imwrite(C, 'fused.png');

Может быть полезно, если вы добавите входные изображения: 'q2.jpg' и 'q20.jpg'.

...