我试图对存储在单元格数组中的20 png图像进行逐像素比较。对于每个像素位置(i,j),我想找到20个图像中具有最大和最小值的像素。
我当前的实现似乎有效,但由于它只是一堆嵌套的for循环,因此需要几分钟才能完成执行。我正在寻找一种更有效的方法,有人有建议吗?我目前的代码如下。
min = 256;
max = -1;
for j = 1: xMax
for k = 1: yMax
for p = 1: 20
if imageArray{p}(j,k) > max
max = imageArray{p}(j,k);
end
if imageArray{p}(j,k) < min
min = imageArray{p}(j,k);
end
end
minImg(j,k) = min;
maxImg(j,k) = max;
min = 256;
max = -1;
end
end
答案 0 :(得分:2)
假设所有这些图像的大小相同,这是一种有效的方法 -
%// Get dimensions of each image
[nrows,ncols] = size(imageArray{1})
%// Convert the cell array to a 3D numeric array for vectorized operations
im = reshape(cell2mat(imageArray),nrows,ncols,[])
%// Use MATLAB builtins min and max along the third dimension for final output
minImg = min(im,[],3)
maxImg = max(im,[],3)