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

6 views (last 30 days)
thuru
thuru on 17 Jan 2017
Edited: thuru on 18 Jan 2017
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

Accepted Answer

Tohru Kikawada
Tohru Kikawada on 18 Jan 2017
下記のようなコードで直接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 Comments
Tohru Kikawada
Tohru Kikawada on 18 Jan 2017
省くというのはどういう意味でしょうか。
NaN に置き換えたいという意味であれば、たとえば下記のコードで実現できます。
grayscale(graysclae==32768) = NaN;
もしくは、表示を透過させたいという意味のであれば こちら が参考になるかと思います。
また、グレイスケールが0~255の範囲になるのは入力画像が uint8 型のときです。
今回は uint16 型でRGB画像を取り扱われているので、グレイスケールも uint16 型の範囲で値が出力されます。
画像タイプの変換に関しては こちら も参照してみてください。
thuru
thuru on 18 Jan 2017
Edited: thuru on 18 Jan 2017
省くというのは、今回画像の範囲内の平均値などを求めているのですが、実際に使用したいのは真ん中に表示してある範囲で、周りのグレーの部分をなくしたいのです。 つまり周りを無くして表示したい部分だけの行列にしたいという意味です。 NaN、試してみますありがとうございます。 画像タイプの変換早速行ってみたいと思います。

Sign in to comment.

More Answers (0)

Categories

Find more on Get Started with MATLAB in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!