2013-02-21 4 views
0

Мне нужен быстрый способ выполнить пороговое значение для областей изображения (матрицы). Входной сигнал представляет собой матрицу (изображение), пороговое значение и радиус, для каждого пикселя. Мне нужно проверить, меньше ли всех значений в пределах данного радиуса, если это так, мне нужно сохранить координаты этого значения (пикселя). Я не хочу делать это с двойными циклами, потому что мне нужно выполнить эту задачу много раз с несколькими радиусами. Я не забочусь о минималях или максимах, так что все значения вокруг пикселя будут ниже некоторого порога. Любая идея будет очень оценена!пороговые значения в матрице matlab

+1

Вы можете выполнить дилатацию с помощью кругового структурирующего элемента, за которым следует тривиальное пороговое значение в полученном изображении. Поскольку вопрос помечен как «matlab», я думаю, вы не заинтересованы в том, чтобы ускорить расширение, просто ожидая, что «matlab» даст достаточно быстрый результат. Если вас это интересует, то есть достойная работа по разложимости и связанным с ней способам повышения эффективности морфологических операций. – mmgp

ответ

0

Я не знаю быстрого алгоритма для круговой окрестности. Тем не менее, если у вас есть есть прямоугольная окрестность, вы можете реализовать чеку очень быстрый взгляд на здесь для более подробной информации: http://leetcode.com/2011/01/sliding-window-maximum.html

Кроме того, вы можете imporve вам скорость, когда вам, когда у вас есть несколько значений радиуса. Просто начните с наименьшего значения и вычислите результат. Для будущих значений радиуса, если точка не проходила с одного из предыдущих шагов, не обрабатывайте ее, существует точка меньшего радиуса (так в текущем радиусе), которая больше порога.

+0

Привет, я не знал о пороге, он может измениться с радиусом, поэтому я не могу сэкономить тест на пиксель, который не «прошел» с предыдущего уровня. Я думал о создании маски размера изображения, только с текущим окном (я могу создать круг в квадратном окне, например, здесь: http://www.mathworks.com/matlabcentral/answers/24609 , и просто проверьте, меньше ли сумма изображения. * маска меньше порога. * mask. Я просто не знаю, как избежать цикла в этом случае. – matlabit

+0

Таким образом, вам просто нужно определить круговой фильтр, а затем использовать conv2 или filter2, чтобы запустить вычисление суммы (Matlab внутренне использовал FFT, так что это быстрее, чем реализация вложенного цикла). – iampat

+0

Привет, спасибо, вот что я сделаю, отредактируйте свой ответ (с комментарием), и я его приму. – matlabit

Смежные вопросы