我有一个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);
提前感谢。
答案 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);