2015-12-18 3 views
0

Я работаю над деформацией изображения. У меня есть матрица D, и я хочу, чтобы получить J с помощью функции interp2 Определение J являетсяКак использовать interp2 в этом случае

,

где D и у меня есть один и тот же размер.

Очевидно, что некоторые значения в матрице J не назначены, я хочу назначить их значения с помощью interp2.

Это то, что я тестировал для преобразования без использования interp2

for i=1:1:h 
    for j = 1:1:w 
     J(i,j+img_d(i,j)) = img_c(i,j); 
    end 
end 

J имеет много значений ипа-присвоенный. Interp2 предоставляет некоторые алгоритмы интерполяции, но я не знаю, как их использовать.

Тогда я попробовал следующее:

img_d = imread('1_d.png'); 
img_c = imread('1_c.png'); 
[h,w] = size(img_d); 
for i = 1:1:h 
    for j = 1:1:w 
     J(i,j+img_d(i,j)) = img_c(i,j,1); 
    end 
end 
[Xq,Yq] = meshgrid((1:1:w),(1:1:h)); 
V = interp2(J,Xq,Yq,'spline'); 

И MATLAB сообщает об ошибках:

Ошибки с помощью griddedInterpolant выборочных значений должна быть одинарным или двойным массивом.

Ошибка в interp2> makegriddedinterp (строка 228) F = griddedInterpolant (varargin {:});

Ошибка в interp2 (строка 112) F = makegriddedinterp ({X, Y}, V, метод, extrap);

Ошибка в том, что измерение J не совпадает с размером meshgrid, как это исправить?

Это то, что я реализовал для обратной коробления

img_d = imread('1_d.png');img_c = imread('1_c.png'); 
    [h,w] = size(img_d); 
    J_1 = zeros(h,w); 
    J_2 = zeros(h,w); 
    J_3 = zeros(h,w); 
    for i = 1:1:h 
     for j = 1:1:w 
      min_value = j; 
      col = 1; 
      for k = 1:1:w 
       temp = j-(k + img_d(i,k)); 
       if temp < min_value 
        min_value = temp; 
        col = k; 
       end 
      end 
      J_1(i,j) = img_c(i,col,1); 
      J_2(i,j) = img_c(i,col,2); 
      J_3(i,j) = img_c(i,col,3); 
     end 
    end 
    J = cat(3,J_1,J_2,J_3); 

Слишком медленный .....

+0

Не могли бы вы уточните? Что вы не понимаете в помощи «Matlab»? – lrnzcig

+0

Что находится в 'D'? Целые числа, поплавки? – Dan

+0

@ Даны значения в D и I - все целые числа, я думаю, мне нужно использовать обратную интерполяцию вместо foward –

ответ

0

Ответ прост, как раз обратная матрица, interp2 используется для imresize

Смежные вопросы