0

我知道在 Matlab 中已经有很多关于样条外推的问题。我有一个示例,它在 2D 中效果很好,我想了解这种行为以使用 Math.Net 在 C# 中对其进行编程。这是我的例子:

matrix = zeros(128,128);
barWidth = 10;

%Calculate Midpoints
midpointX = floor(size(matrix,2)/2) + 1;
midpointY = floor(size(matrix,1)/2) + 1;

matrix(midpointY-barWidth:midpointY+barWidth,:) = 1;

% Windowing (I know it could be shortened...)
distanceMatY = -midpointY+1:midpointY-2;
distanceMatY = abs(repmat(distanceMatY',1,size(matrix,2)));
Factor = 0.5*(cos(pi*distanceMatY/barWidth)+1);
index = distanceMatY > barWidth;
Factor(index) = 0;
matrix = matrix.*Factor;

% Rotate matrix
alpha = 30 * pi/180;
y = -midpointY+1:midpointY-2; y = y'; 
x = -midpointX+1:midpointX-1;     %set new COS for rotation in Midpoint
xRot = x*cos(alpha) - y*sin(alpha) + nMP;  %Determine X and Y matrices for
yRot = x*sin(alpha) + y*cos(alpha) + mMP;  %Roatation with angle alpha

rotMatrix = interp2(matrix,xRot,yRot,'linear');      %Interpolate rotated matrix

我有一个零矩阵,中间有一个条形图。 我将 Hann Window 应用于条形以平滑边缘,然后使用双线性插值将矩阵旋转 30 度。 现在我有设置为 NaN 的边界之外的值。我可以将所有 NaN 值设置为零,但我真正想要的是该条将自动扩展。现在我可以在旋转之前填充矩阵并在旋转到输入矩阵大小后再次切割它。使用起来要容易得多,并且旋转的矩阵看起来完全符合我对每个角度的要求。 2D 样条插值是如何做到的,有没有办法手动编程?
输入矩阵

旋转矩阵双线性
interp2(matrix,xRot,yRot,'spline')
旋转矩阵样条

4

0 回答 0