我正在进行图像变形。我有矩阵D和I,我想通过使用函数 interp2 得到J J的定义是
,
其中D和I的大小相同。
显然,矩阵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 :(得分:0)
答案很简单,只需反转矩阵,interp2用于imresize