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

2 ビュー (過去 30 日間)
wataru yoshimi
wataru yoshimi 2017 年 1 月 12 日
回答済み: Tohru Kikawada 2017 年 1 月 13 日
試したコード
% 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を当てはめてレジストレーションをしたいです。

採用された回答

Tohru Kikawada
Tohru Kikawada 2017 年 1 月 13 日
下記の手順でコーナーポイントを使った位置あわせを行うことができます。
% 画像読み込み
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に位置あわせ');

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeImage Processing Toolbox についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by