MATLAB: FAST レジストレーションのやり方

Image Processing Toolboxレジストレーション fast日本語

試したコード
% code
%%対応点の自動選択(FAST)
im1_16bit = imread('im1.tif');
im1_corners = detectFASTFeatures(im1_16bit);
im1_corners=(im1_corners.selectStrongest(2000));
im2_16bit = imread('im2.tif');
im2_corners= detectFASTFeatures(im2_16bit);
im2_corners=(im2_corners.selectStrongest(2000));
%レジスト
movingPoints=im2_corners
fixedPoints=im1_corners
mytform = fitgeotrans(movingPoints, fixedPoints, 'affine');
im2_registered = imwarp(im2_16bit, mytform);
end
このような処理をしたいのですが,movingPointsがsingle, double形式ではないので上手くできませんでした。今まではコントロールポイントで手動でmovingPointsとfixedPointsを選択していましたが、それの代わりに自動抽出されたcornerPointsを当てはめてレジストレーションをしたいです。

Best Answer

下記の手順でコーナーポイントを使った位置あわせを行うことができます。
% 画像読み込み
I1 = rgb2gray(imread('viprectification_deskLeft.png'));
I2 = rgb2gray(imread('viprectification_deskRight.png'));
figure;
imshowpair(I1,I2);
title('読み込んだ画像の差分');
% コーナー点検出
points1 = detectHarrisFeatures(I1);
points2 = detectHarrisFeatures(I2);
% 特徴量抽出
[features1,valid_points1] = extractFeatures(I1,points1);
[features2,valid_points2] = extractFeatures(I2,points2);
% 特徴のマッチング
indexPairs = matchFeatures(features1,features2);
% 対応点を取得
matchedPoints1 = valid_points1(indexPairs(:,1),:);
matchedPoints2 = valid_points2(indexPairs(:,2),:);
% 対応点の可視化
figure; showMatchedFeatures(I1,I2,matchedPoints1,matchedPoints2);
% 幾何学変換行列の推定
[tform,inlierPts2,inlierPts1] = ...
estimateGeometricTransform(matchedPoints2,matchedPoints1,...
'similarity');
% 幾何学変換行列で使用された対応点の可視化
figure;
showMatchedFeatures(I1,I2,...
inlierPts1,inlierPts2);
title('幾何学変換行列で使用された対応点');
% 画像2を画像1に位置あわせ
outputView = imref2d(size(I1));
Ir = imwarp(I2,tform,'OutputView',outputView);
figure; imshowpair(I1,Ir);
title('画像2を画像1に位置あわせ');