多数の画像データの同一領域を集めたい (for loopの高速化)
Ältere Kommentare anzeigen
多数の画像データの同一領域を集めたいです。
例えば、100枚の画像データ対して行列(1:3,1:3)の同一領域を100枚の画像全てから集め1つのセルに格納し、
さらに1画素ズラして行列(2:4,1:3)の同一領域を100枚全ての画像から集め1つのセルに格納する。
という処理を行いたいです。
処理系としては以下のように記述し、やりたいことは出来ていると思うのですが、
処理の時間が長すぎて困っています。改善点やparforを使った処理で高速化出来ますでしょうか?
回答していただけると幸いです。
%フォルダの中の拡張子を指定して内容一覧にする。画像取り込み
P='D:\subimg_lineup';
bmpFiles = dir(fullfile(P,'*.bmp'));
numfiles = length(bmpFiles);
mydata = cell(numfiles,1);
bmpFiles=natsortfiles(bmpFiles);
for k = 1:numfiles
mydata{k} =single(imread(fullfile(P,bmpFiles(k).name)));
end
%3×3画素の分割領域
bl=3;br=3;
m=(bl-1)/2;
n=(br-1)/2;
[y,x]=size(mydata{1});
picsize=x*y;
stakimg1=cell(round(picsize/2,0),1);
stakimg2=cell(picsize-round(picsize/2,0),1);
lineup_img1=zeros(round(numfiles/2,0)*3,br);
lineup_img2=zeros((numfiles-round(numfiles/2,0))*3,br);
a=1;
for row=1:x
c=1;
for col=1:y
for k=1:2:numfiles-1
padimg2=single(padarray(mydata{k},[m n],"symmetric",'both'));%mydata[2]をパディング
padimg=single(padarray(mydata{k+1},[m n],"symmetric",'both'));%mydata[1]をパディング
splitimg1=padimg(col:col+bl-1,row:row+br-1);
splitimg2=padimg2(col:col+bl-1,row:row+br-1);
lineup_img1(c:c+bl-1,1:br)=splitimg1;
lineup_img2(c:c+bl-1,1:br)=splitimg2;
c=c+bl;
end
stakimg1{a}=lineup_img1;
stakimg2{a}=lineup_img2;
a=a+1;
end
end
Akzeptierte Antwort
Weitere Antworten (0)
Kategorien
Mehr zu イメージ算術 finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



