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

조회 수: 6 (최근 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 CenterFile Exchange에서 Get Started with MATLAB에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by