イメージレジストレーションの反復方法について
6 次查看(过去 30 天)
显示 更早的评论
以下の処理を用いて,イメージレジストレーションを行おうと思いますが,
画像データが1000枚程度あり,そのすべてをレジストレーションしたいと思っています.
そのためには,for文による繰り返し処理が必要ですが,どのようにfor分を組めばいいか教えてもらえばと思います.
参考:https://jp.mathworks.com/help/images/registering-multimodal-mri-images.html
以上,お手数ですが,ご回答お願いします.
2 个评论
Kojiro Saito
2022-8-8
参考ドキュメントの例では、固定イメージと移動イメージのペアを使ってレジストレーションをしていますが、今回は画像データ1000枚にそれぞれ500枚ずつペアがあるのでしょうか?
回答(1 个)
Kojiro Saito
2022-8-8
まずはドキュメントのレジストレーション例を繰り返し使えるように関数化します。
ここではdicomImageRegという関数名で、ファイル名もdicomImageReg.mで保存します。
function registeredImage = dicomImageReg(img1, img2)
[optimizer,metric] = imregconfig('multimodal');
optimizer.InitialRadius = optimizer.InitialRadius/3.5;
optimizer.MaximumIterations = 300;
tformSimilarity = imregtform(img2, img1,'similarity',optimizer,metric);
registeredImage = imregister(img2, img1,'affine',optimizer,metric,...
'InitialTransformation',tformSimilarity);
end
元のドキュメントには試行錯誤で色々試していましたが、最後のレジストレーション方法による結果のみリターンするようにしています。
dcmファイルをまとめてdirコマンドでファイル取得して、ファイルの数だけレジストレーションをおこないます。
結果を画像保存する際はimwriteかdicomwriteを使います。
こちらがサンプルです。
list = dir("*.dcm"); % 現在のフォルダにdcm画像がある場合
%list = dir("image/*.dcm"); % 現在のフォルダのimageサブフォルダにdcm画像がある場合
for n=1:length(list)-1
img1 = dicomread(list(n).name);
img2 = dicomread(list(n+1).name);
registeredImage = dicomImageReg(img1, img2);
%imwrite(registeredImage, sprintf('out%d.jpg', n)) % JPEGフォーマットで保存する場合
dicomwrite(registeredImage, sprintf('out%d.dcm', n)) % DICOMフォーマットで保存する場合
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 幾何学的変換とイメージ レジストレーション 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!