Я работаю над деформацией изображения. У меня есть матрица 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);
Слишком медленный .....
Не могли бы вы уточните? Что вы не понимаете в помощи «Matlab»? – lrnzcig
Что находится в 'D'? Целые числа, поплавки? – Dan
@ Даны значения в D и I - все целые числа, я думаю, мне нужно использовать обратную интерполяцию вместо foward –