一种减少运行时的方法

时间:2017-11-16 20:35:20

标签: matlab image-processing runtime

我有一个2048x2048图像,我想根据特定条件重新设置像素值。问题是代码结束所需的时间(如果不是几天)。有没有办法缩短运​​行时间? 这是功能:

function ProcImage = ProcessImage(X,length,width)
 for i=1:length
    for j=1:width
        if X(j,i)<=0.025*(max(max(X(:,:))))
            X(j,i)=0;
        else
            if X(j,i)>=0.95*(max(max(X(:,:))))
                X(j,i)=(max(max(X(:,:))));
            end
        end
    end
end
ProcImage=X(1:end,1:end);

提前感谢。

2 个答案:

答案 0 :(得分:4)

Vectorize it。您不需要在每次迭代时计算X的最大值,因为它始终是相同的。计算一次,存储该值,然后再使用它。您也可以使用element-wise logical operations and matrix indexing取消循环。这是一个简化版本,应该更多更快:

maxX = max(X(:));
X(X <= 0.025.*maxX) = 0;
X(X >= 0.95.*maxX) = maxX;

答案 1 :(得分:2)

如果您的图像是灰度图像,其值在0到255范围内,这是一个可能的解决方案:

m = max(X(:));
tbl = 0:255;
tbl(tbl<=0.025*m)=0;
tbl(tbl>=0.95*m)=m;
X = tbl(int16(X)+1);