在matlab中比较多个图像

时间:2015-04-04 02:54:24

标签: performance matlab image-processing

我试图对存储在单元格数组中的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

1 个答案:

答案 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)