1. 程式人生 > >Matlab-vision包學習-Image Registration and Geometric Transformation

Matlab-vision包學習-Image Registration and Geometric Transformation

在這一篇中,我們將介紹一個新的函式:estimateGeometricTransform,其它的函式都在之前介紹學習過了。

函式/Functions

函式名稱:estimateGeometricTransform

功能:利用匹配的特徵點對估計幾何變換(Similarity,affine,projective transformations)

語法:tform = estimateGeometricTransform(matchedPoints1, matchedPoints2,transformType); 

           [tform,inlierpoints1,inlierpoints2] = estimateGeometricTransform(matchedPoints1, matchedPoints2,transformType); 

            [_,status] = estimateGeometricTransform(matchedPoints1, matchedPoints2,transformType); 

            [ _ ] = estimateGeometricTransform(matchedPoints1, matchedPoints2,transformType,Name,Value); 

其中,matchedPoints1和matchedPoints2分別表示兩個影象匹配的對應點;tform是幾何變換物件(affine2d object/projective2d object);transformType是可以取值為’similarity'/'affine'/'projective',即幾何變換的型別;status為返回狀態,具體取值如下表;inlierpoints1和inlierpoints2分別為兩個影象對應的內點;Name為用一對單引號包含的字串,Value為對應Name的值。

status及含義
status 含義
0 無錯誤
1 matchedPoints1 和 matchedPoints2點不足
2 足夠的內點沒有發現
Name&Value引數
Name Value
'MaxNumTrials' 預設值為1000,範圍為正整數,為了獲取最大內點進行隨機試驗的次數,取較大的值時,能夠提高估計的魯棒性
'Confidence' 預設值為99,範圍為(0,100),獲取最愛內點的置信度,取較大值時能夠提高估計的魯棒性
'MaxDistance' 預設值為1.5,範圍為>0,可以衡量誤差

舉例:


close all; 
clear all; 
clc; 
% 原影象
original = imread('cameraman.tif'); 
imshow(original); 
title('Base image'); 
% 退化影象
distorted = imresize(original,0.7); 
distorted = imrotate(distorted,31); 
figure; 
imshow(distorted); 
title('Transformed image'); 
% 提取SURF特徵點
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);
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');