Есть ли эффективный способ дополнить матрицу нулями со всех сторон? - PullRequest
3 голосов
/ 27 ноября 2011

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

Мой текущий план с учетом исходной матрицы размера изображенияMxN и требуемый размер роста P:
(1) Создать целевую матрицу размера (M + 2P) x (N + 2P)
(2) Установить значение цели (i + P, j +P) = оригинал (i, j)
(3) Запустите Efros и Leung

Есть ли способ, которым я могу исключить (1) и (2) и просто использовать исходное изображение, чтобы дополнить еговсе направления с нулями?

Ответы [ 3 ]

4 голосов
/ 27 ноября 2011

Если у вас есть доступ к панели инструментов обработки изображений, вы можете использовать функцию PADARRAY :

imgPadded = padarray(img, [p p], 0, 'both');

В противном случае вы можете просто использовать матричную индексацию:

sz = size(img);
imgPadded = zeros([sz(1:2)+2*p size(img,3)], class(img));
imgPadded((1:sz(1))+p, (1:sz(2))+p, :) = img;

Это должно работать как для изображений в градациях серого, так и для изображений RGB.

3 голосов
/ 27 ноября 2011

Использование padarray :

y = padarray(x, [P P]);
3 голосов
/ 27 ноября 2011
>> y = [zeros(P,N+2*P) ; [zeros(M,P), x, zeros(M,P)] ; zeros(P,N+2*P)];

, где x - исходная матрица изображения, а y - вывод должен работать. Если матрица имеет 3 плоскости, настройте на:

>> y = [zeros(P,N+2*P,3) ; [zeros(M,P,3), x, zeros(M,P,3)] ; zeros(P,N+2*P,3)];
...