Этот ответ более пояснительный, чем попытка быть кратким и эффективным. Я думаю, что решение gnovice является лучшим в этом отношении. Если вы пытаетесь понять, как это работает, продолжайте читать ...
Теперь проблема с вашим кодом заключается в том, что вы сопоставляете местоположения с входным изображением на выходное изображение, поэтому вы получаете пятно мощность. Рассмотрим пример, когда входное изображение является полностью белый и выход инициализируется черный, мы получаем следующее:

То, что вы должны делать обратное (от выхода к входу). В качестве примера рассмотрим следующие обозначения:
1 c 1 scaleC*c
+-----------+ 1 +----------------------+ 1
| | | | | |
|----o | <=== | | |
| (ii,jj) | |--------o |
+-----------+ r | (i,j) |
inputImage | |
| |
+----------------------+ scaleR*r
ouputImage
Note: I am using matrix notation (row/col), so:
i ranges on [1,scaleR*r] , and j on [1,scaleC*c]
and ii on [1,r], jj on [1,c]
Идея заключается в том, что для каждого места (i,j)
в выходном изображении, мы хотим, чтобы отобразить его в «ближайшее» место в координатах входного изображения. Поскольку это простое отображение мы используем формулу, которая отображает данную x
к y
(учитывая все другие Params):
x-minX y-minY
--------- = ---------
maxX-minX maxY-minY
в нашем случае, x
является i
/j
координат и y
является ii
/jj
координат. Поэтому подставляя каждый дает нам:
jj = (j-1)*(c-1)/(scaleC*c-1) + 1
ii = (i-1)*(r-1)/(scaleR*r-1) + 1
Ввод куски вместе, мы получаем следующий код:
% read a sample image
inputI = imread('coins.png');
[r,c] = size(inputI);
scale = [2 2]; % you could scale each dimension differently
outputI = zeros(scale(1)*r,scale(2)*c, class(inputI));
for i=1:scale(1)*r
for j=1:scale(2)*c
% map from output image location to input image location
ii = round((i-1)*(r-1)/(scale(1)*r-1)+1);
jj = round((j-1)*(c-1)/(scale(2)*c-1)+1);
% assign value
outputI(i,j) = inputI(ii,jj);
end
end
figure(1), imshow(inputI)
figure(2), imshow(outputI)
К сожалению, не знаю, что я имел в виду - вам нужно пройти по выходу, не вход, поскольку выход больше. И в этом случае мои формулы должны быть отменены. –