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

조회 수: 13 (최근 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 CenterFile Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by