67枚あるtifファ​イルの256×256​の画像を256×25​6×67の三次元行列​にしたいです

5 ビュー (過去 30 日間)
thuru
thuru 2017 年 1 月 17 日
編集済み: thuru 2017 年 1 月 18 日
67枚あるtifファイルの256×256の画像を256×256×67の三次元行列にしたいです 下記のプログラムで、tifファイル1枚1枚をグレースケールに変換したのですが、それらを一つの三次元行列にしたいのですが、cat関数が使えるかなと思って試したのですがfor分の中に上手く組み込むことができず困っています。 clear; clc; close all; % 初期化
fileFolder = fullfile(pwd,'Series1'); % 画像の読込み (67枚の断面画像)
tifFiles = dir(fullfile(fileFolder,'*.tif'));
numfiles = length(tifFiles); mydata = cell(1, numfiles);
for k = 1:numfiles
mydata{k} = imread(tifFiles(k).name);
gray{k} = mat2gray(mydata{k});
end

採用された回答

Tohru Kikawada
Tohru Kikawada 2017 年 1 月 18 日
下記のようなコードで直接3次元配列に読み込んではいかがでしょうか。
手元に画像がないのでご自身の環境でお試しください。
また、 gray は同名の関数がありますので、変数としては使わないほうが無難です。
fileFolder = fullfile(pwd,'Series1'); % 画像の読込み (67枚の断面画像)
tifFiles = dir(fullfile(fileFolder,'*.tif'));
numfiles = length(tifFiles);
img = imread(tifFiles(1).name);
grayscale = zeros(size(img,1),size(img,2),numfiles);
for k = 2:numfiles
grayscale(:,:,k) = imread(tifFiles(k).name);
end
  4 件のコメント
Tohru Kikawada
Tohru Kikawada 2017 年 1 月 18 日
省くというのはどういう意味でしょうか。
NaN に置き換えたいという意味であれば、たとえば下記のコードで実現できます。
grayscale(graysclae==32768) = NaN;
もしくは、表示を透過させたいという意味のであれば こちら が参考になるかと思います。
また、グレイスケールが0~255の範囲になるのは入力画像が uint8 型のときです。
今回は uint16 型でRGB画像を取り扱われているので、グレイスケールも uint16 型の範囲で値が出力されます。
画像タイプの変換に関しては こちら も参照してみてください。
thuru
thuru 2017 年 1 月 18 日
編集済み: thuru 2017 年 1 月 18 日
省くというのは、今回画像の範囲内の平均値などを求めているのですが、実際に使用したいのは真ん中に表示してある範囲で、周りのグレーの部分をなくしたいのです。 つまり周りを無くして表示したい部分だけの行列にしたいという意味です。 NaN、試してみますありがとうございます。 画像タイプの変換早速行ってみたいと思います。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMeasurements and Spatial Audio についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by