Дублирование строк и столбцов изображения - PullRequest
0 голосов
/ 07 февраля 2019

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

Я реализовал это с помощью кода ниже;однако на выходе получается полностью черное изображение.

img = imread('https://people.sc.fsu.edu/~jburkardt/data/png/lena.png');

[M1,N1] = size(img);

M2 = M1*2;
N2 = N1*2;
g = zeros(M2,N2);
imshow(g); 

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

Ответы [ 4 ]

0 голосов
/ 08 февраля 2019

Если я не найду эффективную repelem, я могу использовать kron:

g = kron(img , ones(2));
0 голосов
/ 08 февраля 2019

Хотя ответ @ sardar-usama скорее всего то, что вы хотите сделать на практике, строго говоря, он не дублирует строки / столбцы в соответствии с заданным вопросом.Скорее, он интерполирует изображение до нового размера (хотя, imresize включает опции о том, как выполнить интерполяцию).

Если вы действительно хотите продублировать строки и столбцы, вы можете сделать: g = repelem(img,2,2);

0 голосов
/ 08 февраля 2019

Другое предложение, которое у меня есть, если у вас почему-то нет доступа к repelem, - это создание meshgrid координат, которые вводят 0,5 координаты в каждом измерении, удалите десятичные дроби с помощью floor, затеминдекс в изображение.Вам придется преобразовать координаты в линейные индексы с помощью sub2ind перед индексацией.

Другими словами:

img = imread('https://people.sc.fsu.edu/~jburkardt/data/png/lena.png');
[M1,N1] = size(img);

% Create grid of coordinates at twice the frequency
[X,Y] = meshgrid(1:0.5:N1+0.5, 1:0.5:M1+0.5);

% Remove decimal precision
X = floor(X);
Y = floor(Y);

% Convert to linear indices and sample
ind = sub2ind([M1, N1], Y, X);
g = img(ind);
0 голосов
/ 07 февраля 2019

Чтобы изменить размер изображения и дублировать пиксели, используйте imresize с методом интерполяции ближайшего соседа.

g = imresize(img,2,'nearest');  %resizing to twice the size of the original image

Теперь вы можете видеть:

>> size(img)  
ans =  
   512   512

>> size(g)  
ans =  
   1024  1024

Вы не дублировали ни одну строку / столбец в своем коде.Скорее вы инициализировали нулевую матрицу, в два раза превышающую размер img.Матрица всех нулей - это не что иное, как черное изображение, которое вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...