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 | 含義 |
---|---|
0 | 無錯誤 |
1 | matchedPoints1 和 matchedPoints2點不足 |
2 | 足夠的內點沒有發現 |
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');