#templates #matlab #matching #geometry
#шаблоны #matlab #сопоставление #геометрия
Вопрос:
Я использую
rectangle ('position', [0, 0, 50, 50], 'curvature', [1, 1])
чтобы нарисовать круг на изображении. Окружность меньше изображения, и мне нужно умножить значения cirkel (значения пикселей должны быть равны 1 по краю и нулю везде, двоичный круг) на каждое возможное местоположение изображения. Это своего рода сопоставление шаблонов, но вместо использования шаблона для вычисления корреляции я хочу использовать функцию circlefunction, потому что это быстрее, чем загрузка тысяч шаблонов.
Есть идеи о том, как я могу заставить функцию circle иметь двоичные значения и умножать их на части изображения?
Я надеюсь, что моя формулировка достаточно хороша
Ответ №1:
Если вы используете круг в качестве фильтра, то вы же не хотите его рисовать, не так ли? То, что вам нужно, — это матрица из единиц и 0, и умножить это на каждую прямоугольную часть изображения размером 50×50. Чтобы получить матрицу,
d = 50;
F = false(d,d);
[X Y] = meshgrid( size(F) ) - d/2;
F( round(hypot(X,Y)) == d/2 ) = true;
На самом деле я не запускал этот код, но что-то вроде этого должно сработать. imagesc (F) покажет вам, как это выглядит. Затем вам нужно поместить ваше изображение в матрицу и пошагово распределить по плиткам.