在 Matlab 中将一个数据集缩放到另一个数据集

Scale one dataset to another in Matlab

我有两个数据集,它们是来自两个图像(dat1 和 dat2)的特定指标。我希望两个图像具有相同的响应。 'ideal' 图像应该看起来像第一个数据集 (dat1)

但真实图像看起来像第二个数据集(dat2)。

我想尝试 'fit' 第二个数据集到第一个数据集。我如何使用 Matlab 缩放 dat2 使其看起来像 dat1? 我试图用不同的多项式、指数或高斯拟合 dat1,然后使用我发现适合 dat2 的系数,但程序失败并且拟合不正确,它给了我一条直线零线。当我尝试使用允许系数自由的相同形状来拟合 dat2 时,程序不会给我我想要的理想形状,因为它遵循 dat2 的趋势。

有什么方法可以将数据集拟合到另一组数据而不是函数?

通常,在这种情况下,一种非常常见的方法是对 01 之间的所有向量进行归一化(区间 [0,1],包括两个极端)。这可以很容易地实现如下:

dat1_norm = rescale(dat1);
dat2_norm = rescale(dat2);

如果您的 Matlab 版本大于或等于 2017b,默认情况下已包含 rescale 函数。否则,可以定义如下:

function x = rescale(x)
    x = x - min(x);
    x = x ./ max(x);
end

为了实现你提到的objective(根据dat2的最小值和最大值重新缩放dat1),你可以按照@cemsazara在他的评论:

dat2_scaled = rescale(dat2,min(dat1),max(dat1));

但这只是一个很好的解决方案,只要你能先验地识别出尺度更大的向量。否则,风险是根据较大矢量的值重新缩放较小矢量。这就是为什么我建议您的第一种方法可能是更舒适的解决方案。

为了采用第二种方法,如果您的 Matlab 版本低于 2017b,您必须修改上面定义的自定义 rescale 函数以接受两个补充参数:

function x = rescale(x,mn,mx)
    if (nargin == 1)
        mn = min(x);
        mx = max(x);
    elseif ((nargin == 0) || (nargin == 2))
        error('Invalid number of arguments supplied.');
    end

    x = x - mn;
    x = x ./ mx;
end