MATLAB Answers

画像の位置合わせについて

19 views (last 30 days)
2つの画像(DICOM形式)の位置合わせを行い、出力(DICOM形式)したいと考えております。
Pro_A90.dcm:装置Aで作成した90スライスの投影データ(DICOMファイル)
Pro_B90.dcm:装置Bで作成した90スライスの投影データ(DICOMファイル)
Pro_A90.dcmとPro_B90.dcmは同じ形の物のデータであります。
これらの位置合わせて、それぞれのファイルをDICOM形式で出力したいと考えております。
この処理は可能でしょうか。
ご教授頂ければと思います。
何卒宜しくお願い致します。

Accepted Answer

Megumi Fukuda
Megumi Fukuda on 27 Jun 2021
お話伺った感じですと、マルチモーダル 3 次元医用画像のレジストレーションdicomwriteを使ってできるのではないか?と思います。「マルチモーダル 3 次元医用画像のレジストレーション」のページの例に沿って処理をしていただき、最後に出てきたものをdicomwriteで書き出すというワークフローになると思います。
もし良ければ、お手持ちのデータで上記の処理がうまくいったか、教えていただけますと大変うれしいです。よろしくお願いいたします。

More Answers (3)

弘達 土亀
弘達 土亀 on 27 Jun 2021
貴重な情報ありがとうございます。
「マルチモーダル 3 次元医用画像のレジストレーション」のページを拝見させて頂きました。
難しそうだったので、同じことができるかやってみたいと思います。
「マルチモーダル 3 次元医用画像のレジストレーション」の例についても、またご教示頂けると助かります。
今後とも何卒宜しくお願い致します。
  1 Comment
Megumi Fukuda
Megumi Fukuda on 27 Jun 2021
お返事ありがとうございます。
示したURLでは、RIRE形式のデータを読み込んでいますが、DICOM形式ですとdicomreadで読んでそのままいけるかもしれませんし、少し工夫が必要になるかもしれません。
データを見せていただかないと難しい部分もあるかもしれないですが、何か困った点や詰まった点などあれば、またお知らせください。

Sign in to comment.


弘達 土亀
弘達 土亀 on 30 Jun 2021
返信ありがとうございます。
今回のデータ(pro_A90.dcmとpro_B90.dcm)を添付させて頂きます。
もし可能でしたら、コードなどをご教示頂けると大変助かります。
お忙しいところ恐縮ですが、何卒宜しくお願い致します。
  1 Comment
Megumi Fukuda
Megumi Fukuda on 3 Jul 2021
どのあたりで詰まってしまった、などありますでしょうか?
以下のコードを利用すると、ご添付いただいたファイルで位置を確認するところまでできます。
(変数名は少し変更してしまいました。分かりづらくなってしまったかもしれません)
img_orig = "pro_A90.dcm";
img_dist = "pro_B90.dcm";
hdr_orig = dicominfo(img_orig);
hdr_dist = dicominfo(img_dist);
X_orig = dicomread(hdr_orig);
X_dist = dicomread(hdr_dist);
X_orig = squeeze(X_orig);
X_dist = squeeze(X_dist);
centerOrig = size(X_orig)/2;
centerDist = size(X_dist)/2;
figure
imshowpair(X_orig(:,:,centerOrig(3)), X_dist(:,:,centerDist(3)));
ちなみに、「マルチモーダル 3 次元医用画像のレジストレーション」のサンプルについて、
[optimizer,metric] = imregconfig('multimodal');
については、
[optimizer,metric] = imregconfig('monomodal');
に書き換えたほうがいいかもしれません。

Sign in to comment.


弘達 土亀
弘達 土亀 on 4 Jul 2021
お忙しいにも関わらず、大変貴重な情報ありがとうございます。
自分は最初の画像入力のところから、良く分からなかったので大変助かります。
頂いたコードを参考に進めて行ければと思います。
勝手ありますが、この続きのコードについてもわかりましたら教えて頂ければと思います。
何卒宜しくお願い致します。
一つ質問です。
この位置合わせは、90枚の投影データに全て一括で行うのはむずかしいでしょうか?
もしかすると、画像再構成したデータの方が扱いやすいのでしょうか?
いろいろと相談に乗ってもらいながら、こんな事を聞いてしまい申し訳ありません。
  1 Comment
Megumi Fukuda
Megumi Fukuda on 5 Jul 2021
> この位置合わせは、90枚の投影データに全て一括で行うのはむずかしいでしょうか?
マルチモーダル 3 次元医用画像のレジストレーションにならって、DICOM画像を読み込んで(ここで画像再構成 = 128x128x90の3次元画像データにします)、読み込んだ画像に対して変換を行う、というやり方が可能です。なので、投影データ(スライス1枚分、ということかと思います。間違っていたら教えてください)90枚分に変換を行っていると言えると思います。
先日のDICOM読み取りについて、マルチモーダル3次元医用画像のレジストレーションの見本に沿った変数になるように書き換えると、以下のような感じになります。頑張ってください :)
path_moving = "pro_A90.dcm";
path_fixed = "pro_B90.dcm";
movingHeader = dicominfo(path_moving);
fixedHeader = dicominfo(path_fixed);
movingVolume = dicomread(movingHeader);
fixedVolume = dicomread(fixedHeader);
movingVolume = squeeze(movingVolume);
fixedVolume = squeeze(fixedVolume);
% ここまでで手順1のコードが書かれた最初のボックスと同じところまで進んでいますので、
% 「関数 helperVolumeRegistration は、3 次元レジストレーションの結果の質を判断するために
% 提供されている補助関数です。ビューは対話方式で回転でき、両軸は一致したまま動きます。」の
% 先からすすめてみてください。
また、処理後のデータですが、DICOMにすることも可能ですが、そのままnifti形式に保存することもできます。

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!