Ограничить интерполяцию определенной областью маски

#matlab #image-processing #interpolation

#matlab #обработка изображений #интерполяция

Вопрос:

У меня есть область изображения, которую я хотел бы интерполировать. Он окружен нулями, что означает, что если я попытаюсь выполнить интерполяцию с помощью встроенной interp2 функции MATLAB, границы этой области будут интерполированы с использованием мусорных данных и скомпрометированы. Существует ли какой-либо известный способ, например, интерполировать только определенный набор точек данных (или даже непрямоугольную матрицу), а затем встроить их в матрицу правильных размеров? У меня есть логическая маска, которую можно использовать, если это поможет.

Изображения для справки: объектив
маска

Ответ №1:

Это довольно просто сделать. Используйте interp2 команду так, как вы обычно ее используете. После того, как вы получите интерполированный результат, используйте свою маску для обнуления местоположений мусора. Предполагая, что out это то, что возвращается после interp2 , и mask сохраняет местоположения, которые вы хотите ограничить интерполяцией, просто выполните:

 maskMatch = cast(mask, class(out)); %// Ensures out and mask are the same type
finalOut = out .* maskMatch;
 

Это должно обнулить эти местоположения мусора, гарантируя, что те значения, которые вы хотите интерполировать, останутся.


Вышеизложенное предполагает, что выходные данные имеют те же размеры, что и входные. Если вы собираетесь расширить или уменьшить изображение, вы также можете интерполировать маску, а затем использовать ту же процедуру, о которой я только что говорил. Таким образом, просто запустите interp2 свою маску, чтобы размеры совпадали с out , затем выполните точечное умножение, о котором я говорил выше.

Комментарии:

1. Проблема в том, что interp2 будет интерполировать границы объекта на изображении выше с нулями вокруг него, что вызывает искажения. Я пытаюсь предотвратить рассмотрение фоновых данных во время процесса интерполяции, как если бы у меня был плавающий двоичный объект, который я хотел сгладить.

2. @Scott — Вы хотите извлечь только область, а затем изменить размер изображения?

3. Я полагаю, что это сработало бы, т. Е. Извлеките область с помощью большого двоичного объекта, интерполируйте и повторно вставьте ее в изображение с измененным размером.

4. @Scott — Если это так, вы можете использовать imresize для изменения размера изображения до нужных вам координат, а затем вставить его в нужное положение в измененной матрице

5. Любые советы о том, как самостоятельно извлечь интересующую область для выполнения обработки?