Распознавание изображений - проблема производительности - PullRequest
1 голос
/ 31 октября 2011

У меня проблема с производительностью в скрипте 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 ]

2 голосов
/ 31 октября 2011

Если это просто горизонтальная линия, т.е. все строки матрицы, вы можете сделать это с помощью:

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

Где val(1) будет содержать минимальную дисперсию и idx(1) соответствующий индекс строки,Если вы ищете какую-либо прямую линию для сканирования, обратите внимание на так называемое преобразование трассировки.

1 голос
/ 01 ноября 2011

Это более быстрый способ сделать это (на основе вашего описания проблемы). Переменная строка будет иметь номер строки с минимальной дисперсией:

[~, row] = min(var(img, 0, 2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...