Radi_tech’s blog

Radiological technologist in Japan / MRI / AI / Deep learning / MATLAB / R / Python

【MATLAB】MRI画像をRescale slope, Scale factorで補正する

MRI画像をRescale slope, Scale factorで補正する。
↑はPHILIPSの場合

ちなみにこれはSignal intensityをそのまま使うときようのものであって、SNR、CNRなど”比”をとるときは必要ない。

〜
dcm_path = "DICOMデータのpathを書く"

dcm_data = dicomread(dcm_path);
dcm_data = double(dcm_data);
info = dicominfo(dcm_path);

RescaleSlope = info.RescaleSlope;
Scale_factor = info.Private_2005_100e;

ifs = RescaleSlope * Scale_factor
ifs = double(ifs)

ifs_dcm_data = immultiply(dcm_data ,ifs);
imshow(ifs_dcm_data,[])
〜

【Python】DICOMを撮像条件で名前をつけて保存する。

DICOMを撮像条件で名前をつけて保存する。
今回は、"TR_◯◯◯◯_TE_◯◯◯◯.dcm"とする。
こうしておくと管理がしやすい。

import os
import shutil
import pydicom


ws = "ワークスペースフォルダパスを書く"
os.chdir(ws)


dcm_path = os.path.join(ws, "00000010.DCM")
tmp_dcm = pydicom.dcmread(dcm_path) 


TE = str(round(tmp_dcm.EchoTime))
TR = str(round(tmp_dcm.RepetitionTime))

#ここで保存するファイル名を書く
tmp_fl_nm = "TR_" + TR +"_TE_" + TE +".dcm" 

des_fd = "保存先のフォルダパスを書く"

des_fl_path = os.path.join(des_fd, tmp_fl_nm)

shutil.copy2(dcm_path , des_fl_path)
〜

これをfor分と組み合わせて使う。

【R】95%信頼区間もふくむ基本統計量を算出 

R

95%信頼区間もふくむ基本統計量を算出 

〜
ws = "ワークスペースとするフォルダパス"
setwd(ws)

path = "CSVファイルのパス"
dat <- read.csv(path, header=T,fileEncoding = "UTF-8-BOM")
dat <- na.omit(dat)
attach(dat)

library(tidyverse)
library(pastecs)

dat_stat = stat.desc(dat)
write.csv(dat,"保存先のCSVパスを書く")

これで一発で算出可能です。

【MATLAB】DICOM のタグを任意に編集して保存する

DICOM のタグを任意に編集して保存する。

今回は、すべてのタグを一度からにして、任意のタグの値を編集する。

% DICOMファイルからinfoを読み込む
dcm_path = "パスを書く";
info = dicominfo(dcm_path)

% タグの数を得る
names=fieldnames(info)
length(names)

%タグを一旦空にする
emp_info = info

for x= 1:length(names)
    emp_info = setfield(emp_info,names{x},"");
end

% タグを編集する
ed_info = emp_info

ed_info.Format         = 'DICOM';
ed_info.FormatVersion  = 3;
ed_info.Width          = 1024;
ed_info.Height         = 1024;
ed_info.BitDepth       = 16;
ed_info.ColorType      = 'grayscale'
ed_info.Modality       = 'MR'  

% 保存する
writestruct(ed_info, "ed_dcm_info.xml")

【MATLAB】画像の信号強度の平均,SNRを求める


% 読み込んだ画像をいったん”x”に代入.  
x=img;                         

% 信号が0の部分をnanに置き換える
x(x==0) = nan;

%  nan以外の部分を抽出     
x = x(~isnan(x));     
            
ave = mean(x,"all");
sd  = std(x,"omitnan");

【MATLAB】任意のWW,WLでDICOMを表示する

dcm_path = "DICOMデータのパス";

img = dicomread(dcm_path);

WL = 3000;
WW = 2000;


W_min = WL - WW/2;
W_max = WL + WW/2;


img = dicomread(dcm_path);

imshow(img,[W_min,W_max]);

【MATLAB】DICOMデータをCSVへ一括変換

DICOMデータをCSVへ一括変換する。
MRIのT1 mapなどの処理に有用。


% dcm 2 csv

main_fd = "DICOMデータが入っているフォルダを指定";

imgs = dir(main_fd);
imgs = imgs(3:end);

csv_fd = "CSVファイルを保存するフォルダを指定";

for x = 1:length(imgs)

    img_path = fullfile(main_fd, imgs(x).name);

    img = dicomread(img_path);

    nm = split(imgs(x).name,".");

    csv_path = fullfile(csv_fd,strcat(nm{1},".csv"));

    csvwrite(csv_path,img)


end