画像(1000枚)の輝度値を要素とした三次元行列を作成したいです。
cat関数を用いて、画像を三次元に拡張しようと考えたのですが時間がかかります。
もっと早く作成する方法はありますか?
gray スケールの画像1000枚をfor構文とcat関数を用いて一枚ずつ三次元方向にくっつけています。

 채택된 답변

Shunichi Kusano
Shunichi Kusano 2020년 7월 22일

1 개 추천

b = zeros(m,n,1000);
で始めに1000枚分の行列を確保してから,for文で一枚ずつ画像入れてあげると早くできます。
% sample
img = rand(500,500);
tic
imgall = zeros(500,500,1000);
for i = 1:1000
imgall(:,:,i) = img;
end
toc % 経過時間は 0.936728 秒です。
tic
imgall = img;
for i = 2:1000
imgall = cat(3,imgall,img);
end
toc % 経過時間は 586.288862 秒です。

댓글 수: 5

madhan ravi
madhan ravi 2020년 7월 22일
Ah ok, I understand the question now ;). So yes, creating a 3D matrix is much better.
shunya hara
shunya hara 2020년 7월 22일
最大配列サイズを超えるみたいで作成できませんでした、、、
b=zeros(2048,2048,1000)
で行いました
Shunichi Kusano
Shunichi Kusano 2020년 7월 22일
普通に8ビット画像だとすると
b = zeros(2048,2048,1000,'uint8');
としてみてください。もしかするといけるかもしれません。
ですがそれでも1000枚は割と多めだと思うので、そのあとの演算でメモリ不足に陥る可能性が出てきます。
根本的に画像枚数を減らすか、何分割かして逐次的に処理するか、一枚一枚をリサイズして縮小するか、メモリ増強するか。他にもあるかもしれませんが、思いつく対策としてはこんなところでしょうか。
shunya hara
shunya hara 2020년 7월 22일
ありがとうございます!!
C=zeros(2048,2048,100)
a=dir(filename)
for n=3:100;
A=imread(a(n).name);
C(;,;,n)=A
end
このプログラムであってますか?
Shunichi Kusano
Shunichi Kusano 2020년 7월 25일
100枚に減らしたんでしょうか。
3から始まっていていいのでしたら、他には特に気になるところはないです。・・・とおもったら、C(;,;,n)=Aのところは
C(:,:,n) = A; % セミコロンではなくてコロン
です。

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

madhan ravi
madhan ravi 2020년 7월 22일
편집: madhan ravi 2020년 7월 22일

0 개 추천

I = num2cell(Images);
W = cat(3, I{:});

댓글 수: 2

shunya hara
shunya hara 2020년 7월 22일
numcell(Image)
とあるのですがimageはどのように1000枚の画像を入れればいいですか?
今は以下のように画像を読み込んでいます
a=dir('filename')
for n=4:1079;
A=imread(a(n).name);
b=cat(3,b,A)
end
madhan ravi
madhan ravi 2020년 7월 22일
n = 4 : 1079;
A = cell(numel(n), 1);
for n = n
A{k} = imread(a(n).name);
k = k + 1;
end
W = cat(3, A{:});

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

제품

질문:

2020년 7월 22일

댓글:

2020년 7월 25일

Community Treasure Hunt

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

Start Hunting!