Исправление стереоизображений
Моя конечная цель - сделать визуальную одометрию. Для этого я собираюсь собрать свой собственный набор данных изображений. Но прежде всего я пытаюсь выполнить исправление изображений с необработанными изображениями Malaga Dataset. Набор данных представляет собой набор данных стереоизображений. Я уже загрузил файл malaga-urban-dataset-extract-07.zip и попытался исправить изображение с необработанными изображениями. Я использовал код MATLAB:
path='C:\Users\Jasmine\Desktop\malaga_raw';
for i=0:2120
I1 = imread([path '\image_0\' sprintf('%06d.jpg',i)]); % left camera images
I2= imread([path '\image_1\' sprintf('%06d.jpg',i)]); % right camera images
I1gray = histeq(rgb2gray(I1));
I2gray = histeq(rgb2gray(I2));
blobs1 = detectSURFFeatures(I1gray, 'MetricThreshold', 2000);
blobs2 = detectSURFFeatures(I2gray, 'MetricThreshold', 2000);
[features1, validBlobs1] = extractFeatures(I1gray, blobs1);
[features2, validBlobs2] = extractFeatures(I2gray, blobs2);
indexPairs = matchFeatures(features1, features2, 'Metric', 'SAD', ...
'MatchThreshold', 5);
matchedPoints1 = validBlobs1(indexPairs(:,1),:);
matchedPoints2 = validBlobs2(indexPairs(:,2),:);
[fMatrix, epipolarInliers, status] = estimateFundamentalMatrix(...
matchedPoints1, matchedPoints2, 'Method', 'RANSAC', ...
'NumTrials', 10000, 'DistanceThreshold', 0.1, 'Confidence', 99.99);
if status ~= 0 || isEpipoleInImage(fMatrix, size(I1)) ...
|| isEpipoleInImage(fMatrix', size(I2))
error(['Either not enough matching points were found or '...
'the epipoles are inside the images. You may need to '...
'inspect and improve the quality of detected features ',...
'and/or improve the quality of your images.']);
end
inlierPoints1 = matchedPoints1(epipolarInliers, :);
inlierPoints2 = matchedPoints2(epipolarInliers, :);
[t1, t2] = estimateUncalibratedRectification(fMatrix, ...
inlierPoints1.Location, inlierPoints2.Location, size(I2));
tform1 = projective2d(t1);
tform2 = projective2d(t2);
[I1Rect, I2Rect] = rectifyStereoImages(I1, I2, tform1, tform2, 'OutputView', 'Full');
folder = 'C:\Users\Jasmine\Desktop\malaga_raw';
newimagename_1 = [folder '\i_0\' sprintf('%06d.jpg',i)]; % left camera images
imwrite(I1Rect,newimagename_1)
newimagename_2 = [folder '\i_1\' sprintf('%06d.jpg',i)]; %right camera images
imwrite(I2Rect,newimagename_2)
end
Но он дал мне ошибку в 152-м кадре:
if status ~= 0 || isEpipoleInImage(fMatrix, size(I1)) ...
|| isEpipoleInImage(fMatrix', size(I2))
error(['Either not enough matching points were found or '...
'the epipoles are inside the images. You may need to '...
'inspect and improve the quality of detected features ',...
'and/or improve the quality of your images.']);
end
За исключением этой ошибки, уже очевидные (с 1-го по 151-й кадр) исправленные изображения не похожи на исходные исправленные изображения набора данных Малаги. Например; Если я покажу вам соответственно 20-й кадр Malaga Raw Image Dataset, результат исправления кода Matlab, который я использовал, и исходное исправленное изображение Malaga Dataset:
Я знаю, что использовал код исправления Matlab для некалиброванных камер. Но это уже откалиброванный набор данных необработанного изображения в наборе данных Малаги. Другой код ректификации MATLAB является это Но Малага набор данных изображений (или набор данных, который я буду собирать) не содержит плату Checker в нем. Итак, я не мог понять, как я могу использовать этот код с изображениями, которые не содержат шахматную доску.
У меня три вопроса:
- Как я могу решить проблему с ошибкой, о которой я писал выше?
- Почему результат исправления Matlab не похож на исходное изображение исправления?
- Как я могу исправить необработанные изображения другим способом?
1 ответ
Разница, вероятнее всего, связана с тем, что вы использовали EstimationUncalibratedRectification(), тогда как исправленные изображения набора данных Malaga зависят от правильного исправления с использованием параметров калибровки.
На веб-странице набора данных Малаги вы можете найти параметры стереокалибровки (например, http://ingmec.ual.es/~jlblanco/malaga-urban-dataset/calibration/camera_params_rectified_a=0_800x600.txt.
Используя этот подход, вы должны получить те же результаты.