Я хочу сделать:
masked = image - mask
Но я хочу "вытеснить" mask
. То есть перемещайте его вертикально и горизонтально (пока пересечение между ним и image
не пусто, это будет допустимо).
У меня есть некоторая сборка с ручным кодированием (которая использует инструкции MMX), которая делает это, встроенная в программу на C ++, но она нестабильна при вертикальном смещении, поэтому я подумал об использовании OpenCV. Можно ли сделать это, вызвав только одну функцию OpenCV?
Производительность имеет решающее значение; при использовании OpenCV время должно быть, по крайней мере, в том же порядке, что и код сборки.
РЕДАКТИРОВАТЬ : Вот пример
image
(средний кадр, см. Контраст в черепе парня):
mask
(первый кадр, без контраста):
image - mask
, без смещения. Обратите внимание на то, как улучшается контрастный контур, но поскольку пациент немного двигается, мы можем видеть некоторые контуры черепа, которые являются визуальным шумом для диагностических целей.
image - mask
, маска смещена примерно на 5 пикселей вниз . Чтобы попытаться компенсировать шум, создаваемый движением пациента, мы слегка «смещаем» маску, чтобы удалить контуры и лучше видеть траекторию контрастности (яркость и контрастность были отрегулированы, поэтому она выглядит немного темнее).
EDIT 2 : По поводу алгоритма мне удалось исправить его проблемы. Он больше не падает, но недостатком является то, что теперь он обрабатывает все пиксели изображения (он должен обрабатывать только те, которые должны быть вычтены). В любом случае, как исправить старый код, это не мой вопрос; мой вопрос, как мне сделать эту обработку с использованием OpenCV? Я опубликую некоторые результаты профилирования позже.