多数の画像データの同一領域を集めたい (for loopの高速化)
Afficher commentaires plus anciens
多数の画像データの同一領域を集めたいです。
例えば、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
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur イメージ算術 dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



