我的matlab脚本中存在性能问题。
我要做的是找到一条水平线,其中强度值的方差最小。天真的实现如下。问题是如何重写它以提高性能。
% img is some previously loaded image
height = size(img,1);
width = size(img,2);
smallestVar = inf;
smallestXline = [];
smallestYline = [];
for i=1:height,
for j=1:width,
for k=i+1:height,
xline = [j j];
yline = [i k];
variance = var(improfile(img,xline,yline));
if variance < smallestVar
smallestVar = variance;
smallestXline = xline;
smallestYline = yline;
end
end
end
end
答案 0 :(得分:2)
如果它只是一条水平线,即矩阵的所有行,你可以用:
sigma = var(matrix, 0, 2);
[val, idx] = sort(sigma, 'ascend');
其中val(1)
将包含最小方差,idx(1)
包含相应的行索引。如果您正在寻找要扫描的任何直线,请查看所谓的跟踪变换。
答案 1 :(得分:1)
这是一种更快速的方式(根据您对问题的描述)。变量行将具有最小方差的行号:
[~, row] = min(var(img, 0, 2));