图像识别 - 性能问题

时间:2011-10-31 14:52:49

标签: matlab image-processing

我的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

2 个答案:

答案 0 :(得分:2)

如果它只是一条水平线,即矩阵的所有行,你可以用:

sigma = var(matrix, 0, 2);
[val, idx] = sort(sigma, 'ascend');

其中val(1)将包含最小方差,idx(1)包含相应的行索引。如果您正在寻找要扫描的任何直线,请查看所谓的跟踪变换。

答案 1 :(得分:1)

这是一种更快速的方式(根据您对问题的描述)。变量行将具有最小方差的行号:

[~, row] = min(var(img, 0, 2));