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

 Réponse acceptée

Shunichi Kusano
Shunichi Kusano le 22 Juil 2020

1 vote

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 commentaires

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

Connectez-vous pour commenter.

Plus de réponses (1)

madhan ravi
madhan ravi le 22 Juil 2020
Modifié(e) : madhan ravi le 22 Juil 2020

0 votes

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

2 commentaires

shunya hara
shunya hara le 22 Juil 2020
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 le 22 Juil 2020
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{:});

Connectez-vous pour commenter.

Catégories

En savoir plus sur Image Processing and Computer Vision dans Centre d'aide et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!