Matlab "Уменьшить" вектор со средними - PullRequest
3 голосов
/ 12 октября 2011

Довольно сложно объяснить, что я ищу, у меня есть изображение, представленное как матрица n в Matlab, и я пытаюсь уменьшить его до 4x4 так же, как изображение будет масштабировано (усредните ближайшие значения)

Так например

1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
0 2 3 4 9 9 7 8
0 2 3 4 9 9 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 7
1 2 3 4 5 6 7 7

станет

1.5 3.5 5.5 7.5
1.0 3.5 9.0 7.5
1.5 3.5 5.5 7.5
1.5 3.5 5.5 7.0

Ответы [ 3 ]

5 голосов
/ 12 октября 2011

Похоже, imresize дает что-то немного отличное от того, что вы ожидали. Для ваших входных данных будет работать следующее:

A = filter2([1 1; 1 1] / 4, X, 'same')
A = A(1:2:end, 1:2:end);

РЕДАКТИРОВАТЬ : На самом деле, вероятно, быстрее сделать следующее:

i = 1:2:size(A,1)-1;
j = 1:2:size(A,2)-1;

B = 0.25 * (A(i,j) + A(i+1,j) + A(i,j+1) + A(i+1,j+1));
3 голосов
/ 12 октября 2011

По какой причине вы не можете использовать функцию imresize () ? Это именно то, что вы хотите ..

I =

 1 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8
 0 2 3 4 5 6 7 8
 0 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8



I2 = imresize(I,[4 4])

I2 =

1.4688    3.4919    5.5117    7.4922
1.0742    3.5289    5.5117    7.4922
1.4688    3.4919    5.5117    7.4922
1.5137    3.4877    5.5117    7.4922
0 голосов
/ 12 октября 2011

Если у вас нет imresize.m из панели инструментов обработки изображений, вы можете увидеть, как октава делает это здесь (используется свертка).

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