我在matlab中使用interp3并获得一些奇怪的行为。我想在3D图像中获得子体素值,但是我得到的值不正确。
以下代码创建随机3D图像。我试图在点(25,33,36)提取一个子像素。此时的插值应与该点的索引相等(或非常接近)。但我得到了不同的价值观。
x = 25; y=33; z= 36;
c = [x,y,z];
sE2= randn(50,50,50);
[X,Y,Z] = meshgrid(1:size(sE2,1),1:size(sE2,2),1:size(sE2,3));
f = interp3(X,Y,Z,sE2,c(1),c(2),c(3),'linear')
v = sE2(c(1),c(2),c(3))
输出:
f =
0.5166
v =
0.2645
显然,每次都会给出不同的值,但f和v应该相同或接近,因为我正在插入一个索引值。
有什么想法吗?
答案 0 :(得分:1)
坐标顺序混乱再次发生。在坐标XY平面上,我们列出水平坐标第一和垂直第二,在矩阵中它是垂直的第一和第二水平。示例:当您使用[X,Y] = meshgrid(1:3,1:2)
时,X矩阵的条目是列索引(在索引中列出第二个),Y的条目是行索引(首先列出)。
长话短说:插值得到的值与条目匹配
v = sE2(c(2),c(1),c(3))
而不是
v = sE2(c(1),c(2),c(3))
最好修复前一行:将其替换为
f = interp3(X,Y,Z,sE2,c(2),c(1),c(3),'linear')
因此X与第二个索引相同,Y与第一个相同。